From 603334e86fe9ec2a4c6a1c55e8c6134bc3f080eb Mon Sep 17 00:00:00 2001 From: James Almer Date: Wed, 26 Feb 2025 13:34:57 -0300 Subject: [PATCH] avcodec/decode: inject missing global side data to output frames ff_decode_frame_props() injects global side data passed by the caller (Usually coming from the container) but ignores the global side data the decoder gathered from the bitstream itself. This commit amends this. Signed-off-by: James Almer --- libavcodec/decode.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index cac7e620d2..c5a577f4f1 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1570,6 +1570,15 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) if (ret < 0) return ret; + for (int i = 0; i < avctx->nb_decoded_side_data; i++) { + const AVFrameSideData *src = avctx->decoded_side_data[i]; + if (av_frame_get_side_data(frame, src->type)) + continue; + ret = av_frame_side_data_clone(&frame->side_data, &frame->nb_side_data, src, 0); + if (ret < 0) + return ret; + } + if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { const AVPacket *pkt = avctx->internal->last_pkt_props;