diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/bitstream.h')
-rw-r--r-- | src/libffmpeg/libavcodec/bitstream.h | 132 |
1 files changed, 59 insertions, 73 deletions
diff --git a/src/libffmpeg/libavcodec/bitstream.h b/src/libffmpeg/libavcodec/bitstream.h index 0182b630b..4a3d55d19 100644 --- a/src/libffmpeg/libavcodec/bitstream.h +++ b/src/libffmpeg/libavcodec/bitstream.h @@ -13,7 +13,7 @@ //#define LIBMPEG2_BITSTREAM_READER //#define A32_BITSTREAM_READER #define LIBMPEG2_BITSTREAM_READER_HACK //add BERO - + extern const uint8_t ff_reverse[256]; #if defined(ARCH_X86) || defined(ARCH_X86_64) @@ -146,7 +146,7 @@ typedef struct RL_VLC_ELEM { # ifdef __GNUC__ static inline uint32_t unaligned32(const void *v) { struct Unaligned { - uint32_t i; + uint32_t i; } __attribute__((packed)); return ((const struct Unaligned *) v)->i; @@ -173,7 +173,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) #endif // printf("put_bits=%d %x\n", n, value); assert(n == 32 || value < (1U << n)); - + bit_buf = s->bit_buf; bit_left = s->bit_left; @@ -183,7 +183,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) bit_buf = (bit_buf<<n) | value; bit_left-=n; } else { - bit_buf<<=bit_left; + bit_buf<<=bit_left; bit_buf |= value >> (n - bit_left); #ifdef UNALIGNED_STORES_ARE_BAD if (3 & (intptr_t) s->buf_ptr) { @@ -196,7 +196,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) *(uint32_t *)s->buf_ptr = be2me_32(bit_buf); //printf("bitbuf = %08x\n", bit_buf); s->buf_ptr+=4; - bit_left+=32 - n; + bit_left+=32 - n; bit_buf = value; } @@ -212,28 +212,28 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) # ifdef ALIGNED_BITSTREAM_WRITER # if defined(ARCH_X86) || defined(ARCH_X86_64) asm volatile( - "movl %0, %%ecx \n\t" - "xorl %%eax, %%eax \n\t" - "shrdl %%cl, %1, %%eax \n\t" - "shrl %%cl, %1 \n\t" - "movl %0, %%ecx \n\t" - "shrl $3, %%ecx \n\t" - "andl $0xFFFFFFFC, %%ecx \n\t" - "bswapl %1 \n\t" - "orl %1, (%2, %%ecx) \n\t" - "bswapl %%eax \n\t" - "addl %3, %0 \n\t" - "movl %%eax, 4(%2, %%ecx) \n\t" - : "=&r" (s->index), "=&r" (value) - : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n)) - : "%eax", "%ecx" + "movl %0, %%ecx \n\t" + "xorl %%eax, %%eax \n\t" + "shrdl %%cl, %1, %%eax \n\t" + "shrl %%cl, %1 \n\t" + "movl %0, %%ecx \n\t" + "shrl $3, %%ecx \n\t" + "andl $0xFFFFFFFC, %%ecx \n\t" + "bswapl %1 \n\t" + "orl %1, (%2, %%ecx) \n\t" + "bswapl %%eax \n\t" + "addl %3, %0 \n\t" + "movl %%eax, 4(%2, %%ecx) \n\t" + : "=&r" (s->index), "=&r" (value) + : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n)) + : "%eax", "%ecx" ); # else int index= s->index; uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5); - - value<<= 32-n; - + + value<<= 32-n; + ptr[0] |= be2me_32(value>>(index&31)); ptr[1] = be2me_32(value<<(32-(index&31))); //if(n>24) printf("%d %d\n", n, value); @@ -243,25 +243,25 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) # else //ALIGNED_BITSTREAM_WRITER # if defined(ARCH_X86) || defined(ARCH_X86_64) asm volatile( - "movl $7, %%ecx \n\t" - "andl %0, %%ecx \n\t" - "addl %3, %%ecx \n\t" - "negl %%ecx \n\t" - "shll %%cl, %1 \n\t" - "bswapl %1 \n\t" - "movl %0, %%ecx \n\t" - "shrl $3, %%ecx \n\t" - "orl %1, (%%ecx, %2) \n\t" - "addl %3, %0 \n\t" - "movl $0, 4(%%ecx, %2) \n\t" - : "=&r" (s->index), "=&r" (value) - : "r" (s->buf), "r" (n), "0" (s->index), "1" (value) - : "%ecx" + "movl $7, %%ecx \n\t" + "andl %0, %%ecx \n\t" + "addl %3, %%ecx \n\t" + "negl %%ecx \n\t" + "shll %%cl, %1 \n\t" + "bswapl %1 \n\t" + "movl %0, %%ecx \n\t" + "shrl $3, %%ecx \n\t" + "orl %1, (%%ecx, %2) \n\t" + "addl %3, %0 \n\t" + "movl $0, 4(%%ecx, %2) \n\t" + : "=&r" (s->index), "=&r" (value) + : "r" (s->buf), "r" (n), "0" (s->index), "1" (value) + : "%ecx" ); # else int index= s->index; uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3)); - + ptr[0] |= be2me_32(value<<(32-n-(index&7) )); ptr[1] = 0; //if(n>24) printf("%d %d\n", n, value); @@ -276,9 +276,9 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) static inline uint8_t* pbBufPtr(PutBitContext *s) { #ifdef ALT_BITSTREAM_WRITER - return s->buf + (s->index>>3); + return s->buf + (s->index>>3); #else - return s->buf_ptr; + return s->buf_ptr; #endif } @@ -290,11 +290,11 @@ static inline void skip_put_bytes(PutBitContext *s, int n){ assert((put_bits_count(s)&7)==0); #ifdef ALT_BITSTREAM_WRITER FIXME may need some cleaning of the buffer - s->index += n<<3; + s->index += n<<3; #else assert(s->bit_left==32); - s->buf_ptr += n; -#endif + s->buf_ptr += n; +#endif } /** @@ -308,7 +308,7 @@ static inline void skip_put_bits(PutBitContext *s, int n){ s->bit_left -= n; s->buf_ptr-= s->bit_left>>5; s->bit_left &= 31; -#endif +#endif } /** @@ -366,10 +366,10 @@ for examples see get_bits, show_bits, skip_bits, get_vlc static inline int unaligned32_be(const void *v) { #ifdef CONFIG_ALIGN - const uint8_t *p=v; - return (((p[0]<<8) | p[1])<<16) | (p[2]<<8) | (p[3]); + const uint8_t *p=v; + return (((p[0]<<8) | p[1])<<16) | (p[2]<<8) | (p[3]); #else - return be2me_32( unaligned32(v)); //original + return be2me_32( unaligned32(v)); //original #endif } @@ -528,8 +528,8 @@ static inline int get_bits_count(GetBitContext *s){ #if defined(ARCH_X86) || defined(ARCH_X86_64) # define SKIP_CACHE(name, gb, num)\ asm(\ - "shldl %2, %1, %0 \n\t"\ - "shll %2, %1 \n\t"\ + "shldl %2, %1, %0 \n\t"\ + "shll %2, %1 \n\t"\ : "+r" (name##_cache0), "+r" (name##_cache1)\ : "Ic" ((uint8_t)num)\ ); @@ -569,9 +569,9 @@ static inline int get_bits_count(GetBitContext *s){ /** * read mpeg1 dc style vlc (sign bit + mantisse with no MSB). - * if MSB not set it is negative + * if MSB not set it is negative * @param n length in bits - * @author BERO + * @author BERO */ static inline int get_xbits(GetBitContext *s, int n){ register int tmp; @@ -790,34 +790,20 @@ void free_vlc(VLC *vlc); SKIP_BITS(name, gb, n)\ } -// deprecated, dont use get_vlc for new code, use get_vlc2 instead or use GET_VLC directly -static inline int get_vlc(GetBitContext *s, VLC *vlc) -{ - int code; - VLC_TYPE (*table)[2]= vlc->table; - - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - - GET_VLC(code, re, s, table, vlc->bits, 3) - - CLOSE_READER(re, s) - return code; -} /** * parses a vlc code, faster then get_vlc() - * @param bits is the number of bits which will be read at once, must be + * @param bits is the number of bits which will be read at once, must be * identical to nb_bits in init_vlc() * @param max_depth is the number of times bits bits must be readed to completly - * read the longest vlc code + * read the longest vlc code * = (max_vlc_length + bits - 1) / bits */ static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth) { int code; - + OPEN_READER(re, s) UPDATE_CACHE(re, s) @@ -833,7 +819,7 @@ static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], #include "avcodec.h" static inline void print_bin(int bits, int n){ int i; - + for(i=n-1; i>=0; i--){ av_log(NULL, AV_LOG_DEBUG, "%d", (bits>>i)&1); } @@ -843,7 +829,7 @@ static inline void print_bin(int bits, int n){ static inline int get_bits_trace(GetBitContext *s, int n, char *file, const char *func, int line){ int r= get_bits(s, n); - + print_bin(r, n); av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%d\n", r, n, r, get_bits_count(s)-n, file, func, line); return r; @@ -854,16 +840,16 @@ static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits int r= get_vlc2(s, table, bits, max_depth); int len= get_bits_count(s) - pos; int bits2= show>>(24-len); - + print_bin(bits2, len); - + av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%d\n", bits2, len, r, pos, file, func, line); return r; } static inline int get_xbits_trace(GetBitContext *s, int n, char *file, const char *func, int line){ int show= show_bits(s, n); int r= get_xbits(s, n); - + print_bin(show, n); av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%d\n", show, n, r, get_bits_count(s)-n, file, func, line); return r; |