From d26400f28fb53963ceb69ee1ec3ef64ef3ac969e Mon Sep 17 00:00:00 2001 From: x Date: Sun, 14 Jan 2018 09:12:51 +0100 Subject: [PATCH] TurboPFor: TurboPFor decode --- vp4d.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/vp4d.c b/vp4d.c index 59ea2c5..e22b290 100644 --- a/vp4d.c +++ b/vp4d.c @@ -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