This avoids an AVFrame allocation per decoded frame. Signed-off-by: James Almer <jamr...@gmail.com> --- ist->filter_frame is safe to use here since send_frame_to_filters() also unrefs it immediately after using it. But if this is deemed ugly/evil, I'll just add a new AVFrame to InputStream.
fftools/ffmpeg_hw.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fftools/ffmpeg_hw.c b/fftools/ffmpeg_hw.c index 14e702bd92..4201e44c43 100644 --- a/fftools/ffmpeg_hw.c +++ b/fftools/ffmpeg_hw.c @@ -500,7 +500,7 @@ int hw_device_setup_for_encode(OutputStream *ost) static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) { InputStream *ist = avctx->opaque; - AVFrame *output = NULL; + AVFrame *output = ist->filter_frame; enum AVPixelFormat output_format = ist->hwaccel_output_format; int err; @@ -509,10 +509,6 @@ static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) return 0; } - output = av_frame_alloc(); - if (!output) - return AVERROR(ENOMEM); - output->format = output_format; err = av_hwframe_transfer_data(output, input, 0); @@ -524,18 +520,16 @@ static int hwaccel_retrieve_data(AVCodecContext *avctx, AVFrame *input) err = av_frame_copy_props(output, input); if (err < 0) { - av_frame_unref(output); goto fail; } av_frame_unref(input); av_frame_move_ref(input, output); - av_frame_free(&output); return 0; fail: - av_frame_free(&output); + av_frame_unref(output); return err; } -- 2.33.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".