mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
parent
efdbf37255
commit
a594678e3d
285 changed files with 12724 additions and 1671 deletions
|
@ -226,32 +226,34 @@ static inline int get_bits_count(const GetBitContext *s)
|
|||
}
|
||||
|
||||
#if CACHED_BITSTREAM_READER
|
||||
static inline void refill_32(GetBitContext *s, int is_le)
|
||||
static inline void refill_32(GetBitContext *s)
|
||||
{
|
||||
#if !UNCHECKED_BITSTREAM_READER
|
||||
if (s->index >> 3 >= s->buffer_end - s->buffer)
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (is_le)
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
s->cache = (uint64_t)AV_RL32(s->buffer + (s->index >> 3)) << s->bits_left | s->cache;
|
||||
else
|
||||
#else
|
||||
s->cache = s->cache | (uint64_t)AV_RB32(s->buffer + (s->index >> 3)) << (32 - s->bits_left);
|
||||
#endif
|
||||
s->index += 32;
|
||||
s->bits_left += 32;
|
||||
}
|
||||
|
||||
static inline void refill_64(GetBitContext *s, int is_le)
|
||||
static inline void refill_64(GetBitContext *s)
|
||||
{
|
||||
#if !UNCHECKED_BITSTREAM_READER
|
||||
if (s->index >> 3 >= s->buffer_end - s->buffer)
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (is_le)
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
s->cache = AV_RL64(s->buffer + (s->index >> 3));
|
||||
else
|
||||
#else
|
||||
s->cache = AV_RB64(s->buffer + (s->index >> 3));
|
||||
#endif
|
||||
s->index += 64;
|
||||
s->bits_left = 64;
|
||||
}
|
||||
|
@ -378,16 +380,12 @@ static inline int get_sbits(GetBitContext *s, int n)
|
|||
*/
|
||||
static inline unsigned int get_bits(GetBitContext *s, int n)
|
||||
{
|
||||
register unsigned int tmp;
|
||||
register int tmp;
|
||||
#if CACHED_BITSTREAM_READER
|
||||
|
||||
av_assert2(n>0 && n<=32);
|
||||
if (n > s->bits_left) {
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
refill_32(s, 1);
|
||||
#else
|
||||
refill_32(s, 0);
|
||||
#endif
|
||||
refill_32(s);
|
||||
if (s->bits_left < 32)
|
||||
s->bits_left = n;
|
||||
}
|
||||
|
@ -405,7 +403,6 @@ static inline unsigned int get_bits(GetBitContext *s, int n)
|
|||
LAST_SKIP_BITS(re, s, n);
|
||||
CLOSE_READER(re, s);
|
||||
#endif
|
||||
av_assert2(tmp < UINT64_C(1) << n);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
@ -422,7 +419,7 @@ static inline unsigned int get_bits_le(GetBitContext *s, int n)
|
|||
#if CACHED_BITSTREAM_READER
|
||||
av_assert2(n>0 && n<=32);
|
||||
if (n > s->bits_left) {
|
||||
refill_32(s, 1);
|
||||
refill_32(s);
|
||||
if (s->bits_left < 32)
|
||||
s->bits_left = n;
|
||||
}
|
||||
|
@ -445,14 +442,10 @@ static inline unsigned int get_bits_le(GetBitContext *s, int n)
|
|||
*/
|
||||
static inline unsigned int show_bits(GetBitContext *s, int n)
|
||||
{
|
||||
register unsigned int tmp;
|
||||
register int tmp;
|
||||
#if CACHED_BITSTREAM_READER
|
||||
if (n > s->bits_left)
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
refill_32(s, 1);
|
||||
#else
|
||||
refill_32(s, 0);
|
||||
#endif
|
||||
refill_32(s);
|
||||
|
||||
tmp = show_val(s, n);
|
||||
#else
|
||||
|
@ -480,11 +473,7 @@ static inline void skip_bits(GetBitContext *s, int n)
|
|||
n -= skip;
|
||||
s->index += skip;
|
||||
}
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
refill_64(s, 1);
|
||||
#else
|
||||
refill_64(s, 0);
|
||||
#endif
|
||||
refill_64(s);
|
||||
if (n)
|
||||
skip_remaining(s, n);
|
||||
}
|
||||
|
@ -499,11 +488,7 @@ static inline unsigned int get_bits1(GetBitContext *s)
|
|||
{
|
||||
#if CACHED_BITSTREAM_READER
|
||||
if (!s->bits_left)
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
refill_64(s, 1);
|
||||
#else
|
||||
refill_64(s, 0);
|
||||
#endif
|
||||
refill_64(s);
|
||||
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
return get_val(s, 1, 1);
|
||||
|
@ -619,8 +604,16 @@ static inline int check_marker(void *logctx, GetBitContext *s, const char *msg)
|
|||
return bit;
|
||||
}
|
||||
|
||||
static inline int init_get_bits_xe(GetBitContext *s, const uint8_t *buffer,
|
||||
int bit_size, int is_le)
|
||||
/**
|
||||
* Initialize GetBitContext.
|
||||
* @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes
|
||||
* larger than the actual read bits because some optimized bitstream
|
||||
* readers read 32 or 64 bit at once and could read over the end
|
||||
* @param bit_size the size of the buffer in bits
|
||||
* @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow.
|
||||
*/
|
||||
static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer,
|
||||
int bit_size)
|
||||
{
|
||||
int buffer_size;
|
||||
int ret = 0;
|
||||
|
@ -640,32 +633,12 @@ static inline int init_get_bits_xe(GetBitContext *s, const uint8_t *buffer,
|
|||
s->index = 0;
|
||||
|
||||
#if CACHED_BITSTREAM_READER
|
||||
s->cache = 0;
|
||||
s->bits_left = 0;
|
||||
refill_64(s, is_le);
|
||||
refill_64(s);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize GetBitContext.
|
||||
* @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes
|
||||
* larger than the actual read bits because some optimized bitstream
|
||||
* readers read 32 or 64 bit at once and could read over the end
|
||||
* @param bit_size the size of the buffer in bits
|
||||
* @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow.
|
||||
*/
|
||||
static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer,
|
||||
int bit_size)
|
||||
{
|
||||
#ifdef BITSTREAM_READER_LE
|
||||
return init_get_bits_xe(s, buffer, bit_size, 1);
|
||||
#else
|
||||
return init_get_bits_xe(s, buffer, bit_size, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize GetBitContext.
|
||||
* @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes
|
||||
|
@ -682,14 +655,6 @@ static inline int init_get_bits8(GetBitContext *s, const uint8_t *buffer,
|
|||
return init_get_bits(s, buffer, byte_size * 8);
|
||||
}
|
||||
|
||||
static inline int init_get_bits8_le(GetBitContext *s, const uint8_t *buffer,
|
||||
int byte_size)
|
||||
{
|
||||
if (byte_size > INT_MAX / 8 || byte_size < 0)
|
||||
byte_size = -1;
|
||||
return init_get_bits_xe(s, buffer, byte_size * 8, 1);
|
||||
}
|
||||
|
||||
static inline const uint8_t *align_get_bits(GetBitContext *s)
|
||||
{
|
||||
int n = -get_bits_count(s) & 7;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue