[FFmpeg-devel] [PATCH] decode: don't treat hwaccel->alloc_frame as always failing

James Almer jamrial at gmail.com
Sun May 17 06:49:05 EEST 2020


On 5/16/2020 8:41 PM, comex wrote:
> Fixes regression caused by a1133db30ef07896afd96f067e5c51531a4e85ab.
> 
> On my Mac, the bug seems to make `mpv --hwdec=auto` always fail with:
> 
> [ffmpeg/video] h264: get_buffer() failed
> [ffmpeg] Assertion src->f->buf[0] failed at src/libavcodec/h264_picture.c:70
> 
> Signed-off-by: comex <comexk at gmail.com>
> ---
>  libavcodec/decode.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index 48a61d5419..3fdfb551e3 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -1889,7 +1889,8 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
>      if (hwaccel) {
>          if (hwaccel->alloc_frame) {
>              ret = hwaccel->alloc_frame(avctx, frame);
> -            goto fail;
> +            if (ret < 0)
> +                goto fail;

This is meant to skip the get_buffer2() call. The old goto end removed
in the commit you quoted ensured that was the case, but it was mistaken
for a failure path.

Either an end label is re-added immediately after the
ff_attach_decode_data() call and used here, or the videotoolbox hwaccel
is changed to not require an AVHWAccel.alloc_frame() implementation to
being with.

>          }
>      } else
>          avctx->sw_pix_fmt = avctx->pix_fmt;
> 



More information about the ffmpeg-devel mailing list