diff mbox series

[FFmpeg-devel,v7,11/14] ffmpeg: pass first video AVFrame's side data to encoder

Message ID 20240229164307.3535613-12-jeebjp@gmail.com
State New
Headers show
Series [FFmpeg-devel,v7,01/14] avutil/frame: split side data list wiping out to non-AVFrame function | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Jan Ekström Feb. 29, 2024, 4:42 p.m. UTC
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 | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Anton Khirnov March 5, 2024, 11:10 a.m. UTC | #1
Quoting Jan Ekström (2024-02-29 17:42:58)
> 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 | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
> index bdba50df03..e39ba05b3b 100644
> --- a/fftools/ffmpeg_enc.c
> +++ b/fftools/ffmpeg_enc.c
> @@ -245,6 +245,16 @@ int enc_open(void *opaque, const AVFrame *frame)
>          enc_ctx->colorspace             = frame->colorspace;
>          enc_ctx->chroma_sample_location = frame->chroma_location;
>  
> +        ret = avcodec_configure_side_data(
> +            enc_ctx,
> +            (const AVFrameSideData **)frame->side_data, frame->nb_side_data,
> +            AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES);

I'm not sure this makes sense in general.

The side data in AVCodecContext is supposed to be 'static', i.e.
applying to the whole stream. Many side data types do not make sense as
global side data (e.g. closed captions). Or it could be that the side
data is not actually static, but ffmpeg CLI will now always claim that
it is.
diff mbox series

Patch

diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index bdba50df03..e39ba05b3b 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -245,6 +245,16 @@  int enc_open(void *opaque, const AVFrame *frame)
         enc_ctx->colorspace             = frame->colorspace;
         enc_ctx->chroma_sample_location = frame->chroma_location;
 
+        ret = avcodec_configure_side_data(
+            enc_ctx,
+            (const AVFrameSideData **)frame->side_data, 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;
+        }
+
         if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) ||
             (frame->flags & AV_FRAME_FLAG_INTERLACED)
 #if FFMPEG_OPT_TOP