diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2006-08-26 10:26:14 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-08-26 10:26:14 +0000 |
commit | 5a7bd28335d502d90c727f69a50e6f251c305e72 (patch) | |
tree | bb490c9bb4cc71148723e82e4b0bd86b541ce78c /libavcodec/bitstream.h | |
parent | 727c236a6b07ac4426d5c5e3e564c563c890bb7c (diff) | |
download | ffmpeg-5a7bd28335d502d90c727f69a50e6f251c305e72.tar.gz |
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)
Originally committed as revision 6093 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/bitstream.h')
-rw-r--r-- | libavcodec/bitstream.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h index 13a563bb90..4c789e4a6a 100644 --- a/libavcodec/bitstream.h +++ b/libavcodec/bitstream.h @@ -444,6 +444,11 @@ static inline int unaligned32_le(const void *v) 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 @@ static inline int get_bits_count(GetBitContext *s){ 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 @@ static inline void init_get_bits(GetBitContext *s, #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, |