Mercurial > libavcodec.hg
changeset 3629:2ab6ec6259b1 libavcodec
move align_get_bits() to .h to avoid conflicts between different bitstream readers in different codecs
add a skip_bits_long() which can skip by any amount in any direction (several codecs contain half working hacks to do that)
author | michael |
---|---|
date | Sat, 26 Aug 2006 10:26:14 +0000 |
parents | ce878aa023fe |
children | 8e284a5ec5e1 |
files | bitstream.c bitstream.h |
diffstat | 2 files changed, 27 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/bitstream.c Sat Aug 26 09:34:02 2006 +0000 +++ b/bitstream.c Sat Aug 26 10:26:14 2006 +0000 @@ -73,12 +73,6 @@ } } -void align_get_bits(GetBitContext *s) -{ - int n= (-get_bits_count(s)) & 7; - if(n) skip_bits(s, n); -} - int check_marker(GetBitContext *s, const char *msg) { int bit= get_bits1(s);
--- a/bitstream.h Sat Aug 26 09:34:02 2006 +0000 +++ b/bitstream.h Sat Aug 26 10:26:14 2006 +0000 @@ -444,6 +444,11 @@ static inline int get_bits_count(GetBitContext *s){ return s->index; } + +static inline void skip_bits_long(GetBitContext *s, int n){ + s->index + n; +} + #elif defined LIBMPEG2_BITSTREAM_READER //libmpeg2 like reader @@ -572,6 +577,22 @@ return ((uint8_t*)s->buffer_ptr - s->buffer)*8 - 32 + s->bit_count; } +static inline void skip_bits_long(GetBitContext *s, int n){ + OPEN_READER(re, s) + re_bit_count += n; + re_buffer_ptr += s->bit_count>>5; + re_bit_count &= 31; + if(re_bit_count<=0){ + re_bit_count += 32; + re_buffer_ptr--; + } + re_cache0= + re_cache1= 0; + UPDATE_CACHE(re, s) + re_cache1= 0; + CLOSE_READER(re, s) +} + #endif /** @@ -720,8 +741,13 @@ #endif } +static void align_get_bits(GetBitContext *s) +{ + int n= (-get_bits_count(s)) & 7; + if(n) skip_bits(s, n); +} + int check_marker(GetBitContext *s, const char *msg); -void align_get_bits(GetBitContext *s); int init_vlc(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size,