On 10/06/16 09:41, Anton Khirnov wrote: > Quoting Diego Biurrun (2016-06-09 17:11:44) >> From: Alexandra Hájková <alexan...@khirnov.net> >> >> The new bit reader features a simpler API and an implementation without >> stacks of nested macros. Performance is the same or better, especially >> for mezzanine formats and 64-bit platforms. >> --- >> Changelog | 1 + >> libavcodec/bitstream.h | 380 >> +++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 381 insertions(+) >> create mode 100644 libavcodec/bitstream.h >> >> diff --git a/Changelog b/Changelog >> index a2a9d46..6977397 100644 >> --- a/Changelog >> +++ b/Changelog >> @@ -57,6 +57,7 @@ version <next>: >> - Generic OpenMAX IL encoder with support for Raspberry Pi >> - MMAL-accelerated MPEG-2 and VC-1 decoding >> - G.729 raw demuxer >> +- new bitstream reading framework >> >> >> version 11: >> diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h >> new file mode 100644 >> index 0000000..539b721 >> --- /dev/null >> +++ b/libavcodec/bitstream.h >> +static inline void refill_64(BitstreamContext *bc) >> +{ >> + if (av_unlikely(bc->ptr >= bc->buffer_end || !bc->buffer)) > > Why should the second condition ever be true?
!bc->buffer can go away indeed. >> +/* Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB). >> + * If MSB not set it is negative. */ >> +static inline int bitstream_read_xbits(BitstreamContext *bc, unsigned >> length) >> +{ >> + int32_t cache = bitstream_peek(bc, 32); >> + int sign = ~cache >> 31; >> + skip_remaining(bc, length); > > This used to be bitstream_skip() in the previous versions of the patch. > It is not immediately obvious to me why the change is correct. > Same for read_vlc(). bitstream_skip is a skip_remaining + a refill. bitstream_peek is guarantees you do not have to refill (again). lu _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel