[FFmpeg-devel] [PATCH] avcodec/decode: clean-up if get_hw_frames_parameters fails
Thomas Guillem
thomas at gllm.fr
Mon Oct 14 11:54:29 EEST 2024
Ping.
On Mon, Oct 7, 2024, at 17:43, Thomas Guillem via ffmpeg-devel wrote:
> Fixes the following assert:
>
> [00007f1df83d17e0] vaapi generic error:
> avcodec_get_hw_frames_parameters failed: -22
> Assertion p_dst->hwaccel_threadsafe || (!dst->hwaccel &&
> !dst->internal->hwaccel_priv_data) failed at
> libavcodec/pthread_frame.c:349
>
> Reproduced from VLC with VAAPI, when fallbacking from hw to sw.
> ---
> libavcodec/decode.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index c331bb8596..3380cb27cf 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -19,6 +19,7 @@
> */
>
> #include <stdint.h>
> +#include <stdbool.h>
> #include <string.h>
>
> #include "config.h"
> @@ -1173,6 +1174,7 @@ int
> avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
> const AVCodecHWConfigInternal *hw_config;
> const FFHWAccel *hwa;
> int i, ret;
> + bool clean_priv_data = false;
>
> for (i = 0;; i++) {
> hw_config = ffcodec(avctx->codec)->hw_configs[i];
> @@ -1197,6 +1199,7 @@ int
> avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
> av_buffer_unref(&frames_ref);
> return AVERROR(ENOMEM);
> }
> + clean_priv_data = true;
> }
>
> ret = hwa->frame_params(avctx, frames_ref);
> @@ -1217,6 +1220,8 @@ int
> avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
>
> *out_frames_ref = frames_ref;
> } else {
> + if (clean_priv_data)
> + av_freep(&avctx->internal->hwaccel_priv_data);
> av_buffer_unref(&frames_ref);
> }
> return ret;
> --
> 2.45.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list