TurboPFor: TurboPFor decode
This commit is contained in:
34
vp4d.c
34
vp4d.c
@ -263,6 +263,17 @@ extern char _shuffle_16[256][16]; // defined in bitunpack.c
|
|||||||
#define _BITUNPACKD _bitd1unpack256v
|
#define _BITUNPACKD _bitd1unpack256v
|
||||||
#define BITUNDD bitd1dec
|
#define BITUNDD bitd1dec
|
||||||
#include "vp4d.c"
|
#include "vp4d.c"
|
||||||
|
|
||||||
|
#define _P4DEC _p4zdec256v
|
||||||
|
#define P4DEC p4zdec256v
|
||||||
|
#define P4NDEC p4nzdec256v
|
||||||
|
#define P4NDECS p4zdec
|
||||||
|
#define BITUNPACKD bitzunpack256v
|
||||||
|
#define _BITUNPACKD _bitzunpack256v
|
||||||
|
#define BITUNDD bitzdec
|
||||||
|
#define USIZE 32
|
||||||
|
#include "vp4d.c"
|
||||||
|
|
||||||
#undef BITUNDD
|
#undef BITUNDD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -347,7 +358,7 @@ unsigned char *TEMPLATE2(P4DEC, USIZE)(unsigned char *__restrict in, unsigned n,
|
|||||||
}
|
}
|
||||||
#if USIZE > 8
|
#if USIZE > 8
|
||||||
else {
|
else {
|
||||||
uint_t ex[P4D_MAX+32],*pex=ex;
|
uint_t ex[P4D_MAX+64],*pex=ex;
|
||||||
b &= 0x3f;
|
b &= 0x3f;
|
||||||
bx = *in++;
|
bx = *in++;
|
||||||
|
|
||||||
@ -395,18 +406,27 @@ size_t TEMPLATE2(P4NDEC, USIZE)(unsigned char *__restrict in, size_t n, uint_t *
|
|||||||
}
|
}
|
||||||
#if USIZE > 8
|
#if USIZE > 8
|
||||||
else {
|
else {
|
||||||
uint_t ex[P4D_MAX+32],*pex=ex;
|
uint_t ex[P4D_MAX+64];
|
||||||
b &= 0x3f;
|
b &= 0x3f;
|
||||||
bx = *ip++;
|
bx = *ip++;
|
||||||
|
|
||||||
ip = TEMPLATE2(BITUNPACK, USIZE)(ip, n, op, b);
|
ip = TEMPLATE2(BITUNPACK, USIZE)(ip, CSIZE, op, b);
|
||||||
ip = TEMPLATE2(vbdec, USIZE)(ip, bx, ex);
|
ip = TEMPLATE2(vbdec, USIZE)(ip, bx, ex);
|
||||||
#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) {
|
||||||
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);
|
op[ip[i ]] |= ex[i ] << b;
|
||||||
for(;i != bx; i++) ST(0);
|
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;
|
||||||
ip += bx;
|
ip += bx;
|
||||||
#ifdef BITUNDD
|
#ifdef BITUNDD
|
||||||
TEMPLATE2(BITUNDD, USIZE)(op, n, start);
|
TEMPLATE2(BITUNDD, USIZE)(op, CSIZE, start);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user