diff --git a/libavformat/mov.c b/libavformat/mov.c index 8f1c5df3c9..55b0950b5e 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10580,6 +10580,20 @@ static int mov_read_header(AVFormatContext *s) MOVStreamContext *sc = st->priv_data; uint32_t dvdsub_clut[FF_DVDCLUT_CLUT_LEN] = {0}; fix_timescale(mov, sc); + + /* Set the primary extradata based on the first Sample. */ + if (sc->stsc_count && sc->extradata_size && !sc->iamf) { + sc->last_stsd_index = sc->stsc_data[0].id - 1; + av_freep(&st->codecpar->extradata); + st->codecpar->extradata_size = sc->extradata_size[sc->last_stsd_index]; + if (sc->extradata_size[sc->last_stsd_index]) { + st->codecpar->extradata = av_mallocz(sc->extradata_size[sc->last_stsd_index] + AV_INPUT_BUFFER_PADDING_SIZE); + if (!st->codecpar->extradata) + return AVERROR(ENOMEM); + memcpy(st->codecpar->extradata, sc->extradata[sc->last_stsd_index], sc->extradata_size[sc->last_stsd_index]); + } + } + if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && st->codecpar->codec_id == AV_CODEC_ID_AAC) { sti->skip_samples = sc->start_pad; diff --git a/tests/ref/fate/h264_redundant_pps-side_data b/tests/ref/fate/h264_redundant_pps-side_data index 8633792d8f..1f4684bf5b 100644 --- a/tests/ref/fate/h264_redundant_pps-side_data +++ b/tests/ref/fate/h264_redundant_pps-side_data @@ -1,12 +1,12 @@ -a35cca13c3f91d1a279bf576b8264d05 *tests/data/fate/h264_redundant_pps-side_data.nut -596153 tests/data/fate/h264_redundant_pps-side_data.nut -#extradata 0: 34, 0x851f08e4 +92fe70291f72acf94ba56b426bbaccb0 *tests/data/fate/h264_redundant_pps-side_data.nut +596100 tests/data/fate/h264_redundant_pps-side_data.nut +#extradata 0: 34, 0x850408e3 #tb 0: 1/48000 #media_type 0: video #codec_id 0: h264 #dimensions 0: 1920x1080 #sar 0: 0/1 -0, -2002, 0, 2002, 247959, 0xdb721881, S=1, New Extradata, 34, 0x850408e3 +0, -2002, 0, 2002, 247959, 0xdb721881 0, 0, 4004, 2002, 43356, 0xa366eb79, F=0x0 0, 2002, 2002, 2002, 11423, 0x9c0a86fa, F=0x0 0, 4004, 8008, 2002, 50801, 0xfbfe860d, F=0x0