diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-09-30 02:39:55 +0200 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-12-07 16:15:02 -0500 |
commit | 41540b36a19d326e778268e910aff4217b20eb97 (patch) | |
tree | c97113430eb08fcc5ea32477428f7de84ebcd1cf | |
parent | b57c1da81e4f9d46af6ad9f69e6e2255d5b8aaff (diff) | |
download | ffmpeg-41540b36a19d326e778268e910aff4217b20eb97.tar.gz |
bitstream: add get_bits64() to support reading more than 32 bits at once
Also remove a duplicate function in the MPEG-TS demuxer.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
-rw-r--r-- | libavcodec/get_bits.h | 18 | ||||
-rw-r--r-- | libavformat/mpegts.c | 13 |
2 files changed, 18 insertions, 13 deletions
diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h index f91441c120..c56a2c2d10 100644 --- a/libavcodec/get_bits.h +++ b/libavcodec/get_bits.h @@ -313,6 +313,24 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n) } } +/* + * Read 0-64 bits. + */ +static inline uint64_t get_bits64(GetBitContext *s, int n) +{ + if (n <= 32) { + return get_bits_long(s, n); + } else { +#ifdef BITSTREAM_READER_LE + uint64_t ret = get_bits_long(s, 32); + return ret | (uint64_t)get_bits_long(s, n - 32) << 32; +#else + uint64_t ret = (uint64_t)get_bits_long(s, n - 32) << 32; + return ret | get_bits_long(s, 32); +#endif + } +} + /** * Read 0-32 bits as a signed integer. */ diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 4aabcd7e60..7c4d447ddc 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -665,19 +665,6 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt) pes->flags = 0; } -static uint64_t get_bits64(GetBitContext *gb, int bits) -{ - uint64_t ret = 0; - while (bits > 17) { - ret <<= 17; - ret |= get_bits(gb, 17); - bits -= 17; - } - ret <<= bits; - ret |= get_bits(gb, bits); - return ret; -} - static int read_sl_header(PESContext *pes, SLConfigDescr *sl, const uint8_t *buf, int buf_size) { GetBitContext gb; |