[FFmpeg-devel] [PATCH 38/42] avcodec/codec_internal: Remove FF_CODEC_CAP_ALLOCATE_PROGRESS

Anton Khirnov anton at khirnov.net
Wed Oct 25 16:38:23 EEST 2023


Quoting Andreas Rheinhardt (2023-09-19 21:57:30)
> Before commit f025b8e110b36c1cdb4fb56c4cd57aeca1767b5b,
> every frame-threaded decoder used ThreadFrames, even when
> they did not have any inter-frame dependencies at all.
> In order to distinguish those decoders that need the AVBuffer
> for progress communication from those that do not (to avoid
> the allocation for the latter), the former decoders were marked
> with the FF_CODEC_CAP_ALLOCATE_PROGRESS internal codec cap.
> 
> Yet distinguishing these two can be done in a more natural way:
> Don't use ThreadFrames when not needed and split ff_thread_get_buffer()
> into a core function that calls the user's get_buffer2 callback
> and a wrapper around it that also allocates the progress AVBuffer.
> This has been done in 02220b88fc38ef9dd4f2d519f5d3e4151258b60c
> and since that commit the ALLOCATE_PROGRESS cap was nearly redundant.
> 
> The only exception was WebP and VP8. WebP can contain VP8
> and uses the VP8 decoder directly (i.e. they share the same
> AVCodecContext). Both decoders are frame-threaded and VP8
> has inter-frame dependencies (in general, not in valid WebP)
> and therefore the ALLOCATE_PROGRESS cap. In order to avoid
> allocating progress in case of a frame-threaded WebP decoder
> the cap and the check for the cap has been kept in place.
> 
> Yet now the VP8 decoder has been switched to use ProgressFrames
> and therefore there is just no reason any more for this check
> and the cap. This commit therefore removes both.
> 
> Also change the value of FF_CODEC_CAP_USES_PROGRESSFRAMES
> to leave no gaps.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
>  doc/multithreading.txt      |  8 ++++----
>  libavcodec/codec_internal.h |  7 +------
>  libavcodec/ffv1dec.c        |  3 +--
>  libavcodec/h264dec.c        |  2 +-
>  libavcodec/hevcdec.c        |  2 +-
>  libavcodec/mpeg4videodec.c  |  3 +--
>  libavcodec/pngdec.c         |  3 +--
>  libavcodec/pthread_frame.c  | 12 +++++-------
>  libavcodec/rv30.c           |  1 -
>  libavcodec/rv40.c           |  1 -
>  libavcodec/tests/avcodec.c  |  7 +------
>  11 files changed, 16 insertions(+), 33 deletions(-)

LGTM

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list