TurboPFor: TurboPFor decode

This commit is contained in:
x
2018-01-14 09:12:51 +01:00
parent e73d25d8b5
commit d26400f28f

21
vp4d.c
View File

@ -395,27 +395,18 @@ size_t TEMPLATE2(P4NDEC, USIZE)(unsigned char *__restrict in, size_t n, uint_t *
}
#if USIZE > 8
else {
uint_t ex[P4D_MAX+64];
uint_t ex[P4D_MAX+32],*pex=ex;
b &= 0x3f;
bx = *ip++;
ip = TEMPLATE2(BITUNPACK, USIZE)(ip, CSIZE, op, b);
ip = TEMPLATE2(BITUNPACK, USIZE)(ip, n, op, b);
ip = TEMPLATE2(vbdec, USIZE)(ip, bx, ex);
for(i = 0; i != (bx & ~7); i += 8) {
op[ip[i ]] |= ex[i ] << b;
op[ip[i+1]] |= ex[i+1] << b;
op[ip[i+2]] |= ex[i+2] << b;
op[ip[i+3]] |= ex[i+3] << b;
op[ip[i+4]] |= ex[i+4] << b;
op[ip[i+5]] |= ex[i+5] << b;
op[ip[i+6]] |= ex[i+6] << b;
op[ip[i+7]] |= ex[i+7] << b;
}
for(;i != bx; i++)
op[ip[i]] |= ex[i] << b;
#define ST(j) op[ip[i+j]] |= ex[i+j] << b; //#define ST(j) op[*ip++] |= (*pex++) << b; //unsigned char *ip;for(ip = ip; ip != ip + (bx & ~3); )
for(i = 0; i != (bx & ~7); i+=8) { ST(0);ST(1);ST(2);ST(3); ST(4);ST(5);ST(6);ST(7); } //for(;ip != ip+bx; ) ST(0);
for(;i != bx; i++) ST(0);
ip += bx;
#ifdef BITUNDD
TEMPLATE2(BITUNDD, USIZE)(op, CSIZE, start);
TEMPLATE2(BITUNDD, USIZE)(op, n, start);
#endif
}
#endif