Message ID | 20230901203828.275197-11-jeebjp@gmail.com |
---|---|
State | New |
Headers | show |
Series | encoder AVCodecContext configuration side data | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On 9/1/2023 5:38 PM, Jan Ekström wrote: > This enables further configuration of output based on the results > of input decoding and filtering in a similar manner as the color > information. > --- > fftools/ffmpeg_enc.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c > index f28884e50c..0d022700cf 100644 > --- a/fftools/ffmpeg_enc.c > +++ b/fftools/ffmpeg_enc.c > @@ -356,6 +356,19 @@ int enc_open(OutputStream *ost, AVFrame *frame) > enc_ctx->colorspace = frame->colorspace; > enc_ctx->chroma_sample_location = frame->chroma_location; > > + ret = av_frame_side_data_set_extend( > + &enc_ctx->frame_sd_set, > + (const AVFrameSideDataSet){ > + .sd = frame->side_data, > + .nb_sd = frame->nb_side_data > + }, > + AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES); > + if (ret < 0) { > + av_log(NULL, AV_LOG_ERROR, "failed to configure video encoder: %s!\n", > + av_err2str(ret)); > + return ret; > + } Following what i suggested in my last email, this would instead be a loop adding all the frame->side_data entries. > + > // Field order: autodetection > if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && > ost->top_field_first >= 0)
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index f28884e50c..0d022700cf 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -356,6 +356,19 @@ int enc_open(OutputStream *ost, AVFrame *frame) enc_ctx->colorspace = frame->colorspace; enc_ctx->chroma_sample_location = frame->chroma_location; + ret = av_frame_side_data_set_extend( + &enc_ctx->frame_sd_set, + (const AVFrameSideDataSet){ + .sd = frame->side_data, + .nb_sd = frame->nb_side_data + }, + AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "failed to configure video encoder: %s!\n", + av_err2str(ret)); + return ret; + } + // Field order: autodetection if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && ost->top_field_first >= 0)