[FFmpeg-devel] [PATCH] avformat/aviobuf: fix broken logic in ffio_ensure_seekback()

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Wed Sep 16 22:49:19 EEST 2020


Paul B Mahol:
> This removes big CPU overhead for demuxing chained ogg streams.
> 
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavformat/aviobuf.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
> index a77517d712..88cc0b4030 100644
> --- a/libavformat/aviobuf.c
> +++ b/libavformat/aviobuf.c
> @@ -999,8 +999,6 @@ int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
>      int filled = s->buf_end - s->buffer;
>      ptrdiff_t checksum_ptr_offset = s->checksum_ptr ? s->checksum_ptr - s->buffer : -1;
>  
> -    buf_size += s->buf_ptr - s->buffer + max_buffer_size;
> -
>      if (buf_size < filled || s->seekable || !s->read_packet)
>          return 0;
>      av_assert0(!s->write_flag);
> 
This will make the buffer smaller (even very small) if not enough data
is in the buffer (and if it is unseekable). There are several users of
this function that use quite small numbers and if the buffer got shrunk,
future I/O operations will be really slow.

- Andreas


More information about the ffmpeg-devel mailing list