[FFmpeg-devel] [PATCH 1/3] avcodec/get_bits: add cached bitstream reader
Ronald S. Bultje
rsbultje at gmail.com
Fri Jul 7 23:25:55 EEST 2017
Hi,
On Fri, Jul 7, 2017 at 2:48 PM, Paul B Mahol <onemda at gmail.com> wrote:
> typedef struct GetBitContext {
> const uint8_t *buffer, *buffer_end;
> +#ifdef CACHED_BITSTREAM_READER
> + uint64_t cache;
> + unsigned bits_left;
> +#endif
>
Can you post some stats (from relevant systems, ideally, e.g. 32-bit binary
on x86, or 32-bit arm) on how a 32bit cache performs compared to a 64bit
cache on systems with HAVE_FAST_64BIT=0?
> +static inline void refill_32(GetBitContext *s)
>
[..]
> +#ifdef BITSTREAM_READER_LE
> + s->cache = (uint64_t)AV_RL32(s->buffer + (s->index >> 3)) <<
> s->cache | s->cache;
>
As said on IRC: middle s->cache should be s->bits_left.
Overall very nice improvement, I would in particular not be surprised if
this is generally faster for almost all users, except those using the
lower-level macros (things like SHOW_BITS() etc.) in the old interface. If
that's true, it may be positive to enable this by default and disable only
for those using the low-level interface.
(I'm assuming the low-level interface no longer works with the cached
reader, so can we prevent users from accessing these macros unless
cached=1?)
Ronald
More information about the ffmpeg-devel
mailing list