1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Remove "libmpeg2" bitstream reader

Using the libmpeg2 reader causes errors in a multitude of places,
including MPEG and H264 codecs.  As the advantage of this reader
is questionable, removing it seems the sensible course of action,
especially considering the simplifications this allows elsewhere
with the bit cache size increasing from 17 to 25 bits as minimum.

Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
Mans Rullgard 2011-01-23 01:18:13 +00:00
parent 2b39962eb6
commit 938f72e199

View File

@ -39,12 +39,11 @@
# define ALT_BITSTREAM_READER # define ALT_BITSTREAM_READER
#endif #endif
#if !defined(LIBMPEG2_BITSTREAM_READER) && !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER) #if !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER)
# if ARCH_ARM && !HAVE_FAST_UNALIGNED # if ARCH_ARM && !HAVE_FAST_UNALIGNED
# define A32_BITSTREAM_READER # define A32_BITSTREAM_READER
# else # else
# define ALT_BITSTREAM_READER # define ALT_BITSTREAM_READER
//#define LIBMPEG2_BITSTREAM_READER
//#define A32_BITSTREAM_READER //#define A32_BITSTREAM_READER
# endif # endif
#endif #endif
@ -55,10 +54,6 @@ typedef struct GetBitContext {
const uint8_t *buffer, *buffer_end; const uint8_t *buffer, *buffer_end;
#ifdef ALT_BITSTREAM_READER #ifdef ALT_BITSTREAM_READER
int index; int index;
#elif defined LIBMPEG2_BITSTREAM_READER
uint8_t *buffer_ptr;
uint32_t cache;
int bit_count;
#elif defined A32_BITSTREAM_READER #elif defined A32_BITSTREAM_READER
uint32_t *buffer_ptr; uint32_t *buffer_ptr;
uint32_t cache0; uint32_t cache0;
@ -189,66 +184,6 @@ static inline void skip_bits_long(GetBitContext *s, int n){
s->index += n; s->index += n;
} }
#elif defined LIBMPEG2_BITSTREAM_READER
//libmpeg2 like reader
# define MIN_CACHE_BITS 17
# define OPEN_READER(name, gb)\
int name##_bit_count=(gb)->bit_count;\
int name##_cache= (gb)->cache;\
uint8_t * name##_buffer_ptr=(gb)->buffer_ptr;\
# define CLOSE_READER(name, gb)\
(gb)->bit_count= name##_bit_count;\
(gb)->cache= name##_cache;\
(gb)->buffer_ptr= name##_buffer_ptr;\
# define UPDATE_CACHE(name, gb)\
if(name##_bit_count >= 0){\
name##_cache+= AV_RB16(name##_buffer_ptr) << name##_bit_count; \
name##_buffer_ptr+=2;\
name##_bit_count-= 16;\
}\
# define SKIP_CACHE(name, gb, num)\
name##_cache <<= (num);\
# define SKIP_COUNTER(name, gb, num)\
name##_bit_count += (num);\
# define SKIP_BITS(name, gb, num)\
{\
SKIP_CACHE(name, gb, num)\
SKIP_COUNTER(name, gb, num)\
}\
# define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
# define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
# define SHOW_UBITS(name, gb, num)\
NEG_USR32(name##_cache, num)
# define SHOW_SBITS(name, gb, num)\
NEG_SSR32(name##_cache, num)
# define GET_CACHE(name, gb)\
((uint32_t)name##_cache)
static inline int get_bits_count(const GetBitContext *s){
return (s->buffer_ptr - s->buffer)*8 - 16 + s->bit_count;
}
static inline void skip_bits_long(GetBitContext *s, int n){
OPEN_READER(re, s)
re_bit_count += n;
re_buffer_ptr += 2*(re_bit_count>>4);
re_bit_count &= 15;
re_cache = ((re_buffer_ptr[-2]<<8) + re_buffer_ptr[-1]) << (16+re_bit_count);
UPDATE_CACHE(re, s)
CLOSE_READER(re, s)
}
#elif defined A32_BITSTREAM_READER #elif defined A32_BITSTREAM_READER
# define MIN_CACHE_BITS 32 # define MIN_CACHE_BITS 32
@ -356,8 +291,7 @@ static inline int get_sbits(GetBitContext *s, int n){
} }
/** /**
* reads 1-17 bits. * Read 1-25 bits.
* Note, the alt bitstream reader can read up to 25 bits, but the libmpeg2 reader can't
*/ */
static inline unsigned int get_bits(GetBitContext *s, int n){ static inline unsigned int get_bits(GetBitContext *s, int n){
register int tmp; register int tmp;
@ -370,8 +304,7 @@ static inline unsigned int get_bits(GetBitContext *s, int n){
} }
/** /**
* shows 1-17 bits. * Shows 1-25 bits.
* Note, the alt bitstream reader can read up to 25 bits, but the libmpeg2 reader can't
*/ */
static inline unsigned int show_bits(GetBitContext *s, int n){ static inline unsigned int show_bits(GetBitContext *s, int n){
register int tmp; register int tmp;
@ -484,10 +417,6 @@ static inline void init_get_bits(GetBitContext *s,
s->buffer_end= buffer + buffer_size; s->buffer_end= buffer + buffer_size;
#ifdef ALT_BITSTREAM_READER #ifdef ALT_BITSTREAM_READER
s->index=0; s->index=0;
#elif defined LIBMPEG2_BITSTREAM_READER
s->buffer_ptr = (uint8_t*)((intptr_t)buffer&(~1));
s->bit_count = 16 + 8*((intptr_t)buffer&1);
skip_bits_long(s, 0);
#elif defined A32_BITSTREAM_READER #elif defined A32_BITSTREAM_READER
s->buffer_ptr = (uint32_t*)((intptr_t)buffer&(~3)); s->buffer_ptr = (uint32_t*)((intptr_t)buffer&(~3));
s->bit_count = 32 + 8*((intptr_t)buffer&3); s->bit_count = 32 + 8*((intptr_t)buffer&3);