We can't use AV_FRAME_SIDE_DATA_FLAG_REPLACE here because the side data already in the frame should have priority over the global one, so just ensure we don't copy any if it already exists. Fixes ticket #11468.
Unified · Split
| @@ -788,10 +788,14 @@ static int packet_decode(DecoderPriv *dp, AVPacket *pkt, AVFrame *frame) · 787 unmodified lines | |||
| 788 | 788 | ||
| 789 | frame->time_base = dec->pkt_timebase; | 789 | frame->time_base = dec->pkt_timebase; |
| 790 | 790 | ||
| 791 | ret = clone_side_data(&frame->side_data, &frame->nb_side_data, | 791 | for (int i = 0; i < dec->nb_decoded_side_data; i++) { |
| 792 | dec->decoded_side_data, dec->nb_decoded_side_data, 0); | 792 | const AVFrameSideData *src = dec->decoded_side_data[i]; |
| 793 | if (ret < 0) | 793 | if (av_frame_side_data_get(frame->side_data, frame->nb_side_data, src->type)) |
| 794 | return ret; | 794 | continue; |
| 795 | ret = av_frame_side_data_clone(&frame->side_data, &frame->nb_side_data, src, 0); | ||
| 796 | if (ret < 0) | ||
| 797 | return ret; | ||
| 798 | } | ||
| 795 | 799 | ||
| 796 | if (dec->codec_type == AVMEDIA_TYPE_AUDIO) { | 800 | if (dec->codec_type == AVMEDIA_TYPE_AUDIO) { |
| 797 | dp->dec.samples_decoded += frame->nb_samples; | 801 | dp->dec.samples_decoded += frame->nb_samples; |