[FFmpeg-devel] [PATCH] avcodec/decode: clean-up if get_hw_frames_parameters fails
Zhao Zhili
quinkblack at foxmail.com
Wed Oct 30 15:34:58 EET 2024
> On Oct 30, 2024, at 21:19, Thomas Guillem via ffmpeg-devel <ffmpeg-devel at ffmpeg.org> wrote:
>
> Happy monthly anniversary to my not very interesting patch.
>
> FYI, OpenSuse applied it for their ffmpeg build...
LGTM and applied, thanks.
>
> On Mon, Oct 14, 2024, at 10:54, Thomas Guillem via ffmpeg-devel wrote:
>> 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".
>> _______________________________________________
>> 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".
> _______________________________________________
> 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