From 6f2cb0923c5a14a6bc2a616ac253ad0d872afd25 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 23 Mar 2024 13:53:27 +0100 Subject: [PATCH] fftools/ffmpeg_enc: move decoded_side_data setup out of video-only block Nothing about this code is video-specific. --- fftools/ffmpeg_enc.c | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index bcd88c7d3e..9397818acb 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -187,6 +187,27 @@ int enc_open(void *opaque, const AVFrame *frame) if (frame) { av_assert0(frame->opaque_ref); fd = (FrameData*)frame->opaque_ref->data; + + for (int i = 0; i < frame->nb_side_data; i++) { + const AVSideDataDescriptor *desc = av_frame_side_data_desc(frame->side_data[i]->type); + + if (!(desc->props & AV_SIDE_DATA_PROP_GLOBAL)) + continue; + + ret = av_frame_side_data_clone(&enc_ctx->decoded_side_data, + &enc_ctx->nb_decoded_side_data, + frame->side_data[i], + AV_FRAME_SIDE_DATA_FLAG_UNIQUE); + if (ret < 0) { + av_frame_side_data_free( + &enc_ctx->decoded_side_data, + &enc_ctx->nb_decoded_side_data); + av_log(NULL, AV_LOG_ERROR, + "failed to configure video encoder: %s!\n", + av_err2str(ret)); + return ret; + } + } } ret = set_encoder_id(of, ost); @@ -246,26 +267,6 @@ int enc_open(void *opaque, const AVFrame *frame) enc_ctx->colorspace = frame->colorspace; enc_ctx->chroma_sample_location = frame->chroma_location; - for (int i = 0; i < frame->nb_side_data; i++) { - const AVSideDataDescriptor *desc = av_frame_side_data_desc(frame->side_data[i]->type); - - if (!(desc->props & AV_SIDE_DATA_PROP_GLOBAL)) - continue; - - ret = av_frame_side_data_clone( - &enc_ctx->decoded_side_data, &enc_ctx->nb_decoded_side_data, - frame->side_data[i], AV_FRAME_SIDE_DATA_FLAG_UNIQUE); - if (ret < 0) { - av_frame_side_data_free( - &enc_ctx->decoded_side_data, - &enc_ctx->nb_decoded_side_data); - av_log(NULL, AV_LOG_ERROR, - "failed to configure video encoder: %s!\n", - av_err2str(ret)); - return ret; - } - } - if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) || (frame->flags & AV_FRAME_FLAG_INTERLACED) #if FFMPEG_OPT_TOP