mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-09 14:14:39 +02:00
get_bits: add get_bits_le()
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
4e10d87f38
commit
48f2750de8
@ -139,27 +139,34 @@ typedef struct RL_VLC_ELEM {
|
|||||||
|
|
||||||
#define CLOSE_READER(name, gb) (gb)->index = name ## _index
|
#define CLOSE_READER(name, gb) (gb)->index = name ## _index
|
||||||
|
|
||||||
|
# ifdef LONG_BITSTREAM_READER
|
||||||
|
|
||||||
|
# define UPDATE_CACHE_LE(name, gb) name ## _cache = \
|
||||||
|
AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
|
||||||
|
|
||||||
|
# define UPDATE_CACHE_BE(name, gb) name ## _cache = \
|
||||||
|
AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# define UPDATE_CACHE_LE(name, gb) name ## _cache = \
|
||||||
|
AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
|
||||||
|
|
||||||
|
# define UPDATE_CACHE_BE(name, gb) name ## _cache = \
|
||||||
|
AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
|
|
||||||
# ifdef LONG_BITSTREAM_READER
|
# define UPDATE_CACHE(name, gb) UPDATE_CACHE_LE(name, gb)
|
||||||
# define UPDATE_CACHE(name, gb) name ## _cache = \
|
|
||||||
AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
|
|
||||||
# else
|
|
||||||
# define UPDATE_CACHE(name, gb) name ## _cache = \
|
|
||||||
AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define SKIP_CACHE(name, gb, num) name ## _cache >>= (num)
|
# define SKIP_CACHE(name, gb, num) name ## _cache >>= (num)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# ifdef LONG_BITSTREAM_READER
|
# define UPDATE_CACHE(name, gb) UPDATE_CACHE_BE(name, gb)
|
||||||
# define UPDATE_CACHE(name, gb) name ## _cache = \
|
|
||||||
AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7))
|
|
||||||
# else
|
|
||||||
# define UPDATE_CACHE(name, gb) name ## _cache = \
|
|
||||||
AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# define SKIP_CACHE(name, gb, num) name ## _cache <<= (num)
|
# define SKIP_CACHE(name, gb, num) name ## _cache <<= (num)
|
||||||
|
|
||||||
@ -180,12 +187,18 @@ typedef struct RL_VLC_ELEM {
|
|||||||
|
|
||||||
#define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
|
#define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
|
||||||
|
|
||||||
|
#define SHOW_UBITS_LE(name, gb, num) zero_extend(name ## _cache, num)
|
||||||
|
#define SHOW_SBITS_LE(name, gb, num) sign_extend(name ## _cache, num)
|
||||||
|
|
||||||
|
#define SHOW_UBITS_BE(name, gb, num) NEG_USR32(name ## _cache, num)
|
||||||
|
#define SHOW_SBITS_BE(name, gb, num) NEG_SSR32(name ## _cache, num)
|
||||||
|
|
||||||
#ifdef BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
# define SHOW_UBITS(name, gb, num) zero_extend(name ## _cache, num)
|
# define SHOW_UBITS(name, gb, num) SHOW_UBITS_LE(name, gb, num)
|
||||||
# define SHOW_SBITS(name, gb, num) sign_extend(name ## _cache, num)
|
# define SHOW_SBITS(name, gb, num) SHOW_SBITS_LE(name, gb, num)
|
||||||
#else
|
#else
|
||||||
# define SHOW_UBITS(name, gb, num) NEG_USR32(name ## _cache, num)
|
# define SHOW_UBITS(name, gb, num) SHOW_UBITS_BE(name, gb, num)
|
||||||
# define SHOW_SBITS(name, gb, num) NEG_SSR32(name ## _cache, num)
|
# define SHOW_SBITS(name, gb, num) SHOW_SBITS_BE(name, gb, num)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GET_CACHE(name, gb) ((uint32_t) name ## _cache)
|
#define GET_CACHE(name, gb) ((uint32_t) name ## _cache)
|
||||||
@ -250,6 +263,18 @@ static inline unsigned int get_bits(GetBitContext *s, int n)
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned int get_bits_le(GetBitContext *s, int n)
|
||||||
|
{
|
||||||
|
register int tmp;
|
||||||
|
OPEN_READER(re, s);
|
||||||
|
av_assert2(n>0 && n<=25);
|
||||||
|
UPDATE_CACHE_LE(re, s);
|
||||||
|
tmp = SHOW_UBITS_LE(re, s, n);
|
||||||
|
LAST_SKIP_BITS(re, s, n);
|
||||||
|
CLOSE_READER(re, s);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show 1-25 bits.
|
* Show 1-25 bits.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user