mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-17 21:14:47 +00:00
avcodec/decode: clean-up if get_hw_frames_parameters fails
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. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
parent
bb57b78013
commit
44a0a0c050
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user