[ffmpeg] branch release/7.0 updated (bdc8c505f4 -> 67641670cc)
This is an automated email from the git hooks/post-receive script. Git pushed a change to branch release/7.0 in repository ffmpeg. from bdc8c505f4 avcodec/libsvtav1: rename aq_mode for v4.0.0 new f1cbd81e9e fate/mov: add an IAMF+video muxing test new 3157e62866 avformat/mov: add an offset to IAMF streams new 9434a8349d avformat/mov: fix setting iamf stream id offsets new 67641670cc avformat/mov: fix cases where we discard iamf packets from enabled streams The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: libavformat/iamf_reader.c | 15 +- libavformat/iamf_reader.h | 2 +- libavformat/iamfdec.c | 2 +- libavformat/isom.h | 1 + libavformat/mov.c | 51 +++++- libavformat/version.h | 2 +- tests/fate/mov.mak | 28 ++- ...4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-first} | 203 ++++++++++++++------- ...p4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-last} | 95 ++++++++-- .../{audio_element-7_1_4 => audio_element-7_1_4-2} | 2 +- 10 files changed, 297 insertions(+), 104 deletions(-) copy tests/ref/fate/{mov-mp4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-first} (75%) rename tests/ref/fate/{mov-mp4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-last} (86%) copy tests/streamgroups/{audio_element-7_1_4 => audio_element-7_1_4-2} (73%)
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch release/7.0 in repository ffmpeg. commit f1cbd81e9e97085d9d8c01e42c77e4183c21e9ce Author: James Almer <jamrial@gmail.com> AuthorDate: Wed Jul 31 22:57:58 2024 -0300 Commit: James Almer <jamrial@gmail.com> CommitDate: Fri Feb 27 12:15:22 2026 -0300 fate/mov: add an IAMF+video muxing test Signed-off-by: James Almer <jamrial@gmail.com> (cherry picked from commit eb3cc508d85e8113cbc66fbec09d29e94ec3fd44) --- tests/fate/mov.mak | 28 ++- ...4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-first} | 203 ++++++++++++++------- ...p4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-last} | 95 ++++++++-- .../{audio_element-7_1_4 => audio_element-7_1_4-2} | 2 +- 4 files changed, 235 insertions(+), 93 deletions(-) diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index b54fe19620..ffa7afdd3e 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -237,15 +237,31 @@ fate-mov-mp4-iamf-5_1_4: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filter -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" \ "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition" -FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, FLAC, MOV, WAV_DEMUXER PCM_S16LE_DECODER ARESAMPLE_FILTER) += fate-mov-mp4-iamf-7_1_4 -fate-mov-mp4-iamf-7_1_4: tests/data/asynth-44100-12.wav tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4 tests/data/streamgroups/mix_presentation-7_1_4 -fate-mov-mp4-iamf-7_1_4: SRC = $(TARGET_PATH)/tests/data/asynth-44100-12.wav -fate-mov-mp4-iamf-7_1_4: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filters \ +# Test muxing an IAMF track alongside a video one, with video as the first track. +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG4 FLAC, MOV, WAV_DEMUXER RAWVIDEO_DEMUXER PCM_S16LE_DECODER ARESAMPLE_FILTER) += fate-mov-mp4-iamf-7_1_4-video-first +fate-mov-mp4-iamf-7_1_4-video-first: tests/data/asynth-44100-12.wav tests/data/vsynth1.yuv tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4-2 tests/data/streamgroups/mix_presentation-7_1_4 +fate-mov-mp4-iamf-7_1_4-video-first: SRC = $(TARGET_PATH)/tests/data/asynth-44100-12.wav +fate-mov-mp4-iamf-7_1_4-video-first: SRC2 = $(TARGET_PATH)/tests/data/vsynth1.yuv +fate-mov-mp4-iamf-7_1_4-video-first: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filters \ + -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_7_1_4 \ + -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-7_1_4-2 \ + -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-7_1_4 \ + -streamid 0:1 -streamid 1:2 -streamid 2:3 -streamid 3:4 -streamid 4:5 -streamid 5:6 -streamid 6:7 -streamid 7:8 -map 1:v:0 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -c:v mpeg4 -t 1" "-c:a copy -c:v copy -map 0" \ + "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition:stream=index,id" \ + "-f rawvideo -s 352x288 -pix_fmt yuv420p -i $(SRC2)" + +# Test muxing an IAMF track alongside a video one, with video as the last track. Also, use stream ids as track ids. +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, MPEG4 FLAC, MOV, WAV_DEMUXER RAWVIDEO_DEMUXER PCM_S16LE_DECODER ARESAMPLE_FILTER) += fate-mov-mp4-iamf-7_1_4-video-last +fate-mov-mp4-iamf-7_1_4-video-last: tests/data/asynth-44100-12.wav tests/data/vsynth1.yuv tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4 tests/data/streamgroups/mix_presentation-7_1_4 +fate-mov-mp4-iamf-7_1_4-video-last: SRC = $(TARGET_PATH)/tests/data/asynth-44100-12.wav +fate-mov-mp4-iamf-7_1_4-video-last: SRC2 = $(TARGET_PATH)/tests/data/vsynth1.yuv +fate-mov-mp4-iamf-7_1_4-video-last: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filters \ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_7_1_4 \ -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-7_1_4 \ -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-7_1_4 \ - -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -streamid 6:6 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" \ - "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition" + -streamid 0:1 -streamid 1:2 -streamid 2:3 -streamid 3:4 -streamid 4:5 -streamid 5:6 -streamid 6:7 -streamid 7:8 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -map 1:v:0 -use_stream_ids_as_track_ids true -c:a flac -c:v mpeg4 -t 1" "-c:a copy -c:v copy -map 0" \ + "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition:stream=index,id" \ + "-f rawvideo -s 352x288 -pix_fmt yuv420p -i $(SRC2)" FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, FLAC, MOV, WAV_DEMUXER PCM_S16LE_DECODER ARESAMPLE_FILTER) += fate-mov-mp4-iamf-ambisonic_1 fate-mov-mp4-iamf-ambisonic_1: tests/data/asynth-44100-4.wav tests/data/filtergraphs/iamf_ambisonic_1 tests/data/streamgroups/audio_element-ambisonic_1 tests/data/streamgroups/mix_presentation-ambisonic_1 diff --git a/tests/ref/fate/mov-mp4-iamf-7_1_4 b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-first similarity index 75% copy from tests/ref/fate/mov-mp4-iamf-7_1_4 copy to tests/ref/fate/mov-mp4-iamf-7_1_4-video-first index 0641cb0c3c..707691ff29 100644 --- a/tests/ref/fate/mov-mp4-iamf-7_1_4 +++ b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-first @@ -1,17 +1,18 @@ -d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 -100588 tests/data/fate/mov-mp4-iamf-7_1_4.mp4 -#extradata 0: 34, 0xafa70d5e +f92a589b00c2ba98b78ae77e6edffa23 *tests/data/fate/mov-mp4-iamf-7_1_4-video-first.mp4 +416657 tests/data/fate/mov-mp4-iamf-7_1_4-video-first.mp4 +#extradata 0: 30, 0x47ab0576 #extradata 1: 34, 0xafa70d5e -#extradata 2: 34, 0xaf7b0d5c +#extradata 2: 34, 0xafa70d5e #extradata 3: 34, 0xaf7b0d5c -#extradata 4: 34, 0xafa70d5e +#extradata 4: 34, 0xaf7b0d5c #extradata 5: 34, 0xafa70d5e #extradata 6: 34, 0xafa70d5e -#tb 0: 1/44100 -#media_type 0: audio -#codec_id 0: flac -#sample_rate 0: 44100 -#channel_layout_name 0: stereo +#extradata 7: 34, 0xafa70d5e +#tb 0: 1/12800 +#media_type 0: video +#codec_id 0: mpeg4 +#dimensions 0: 352x288 +#sar 0: 1/1 #tb 1: 1/44100 #media_type 1: audio #codec_id 1: flac @@ -21,7 +22,7 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 #media_type 2: audio #codec_id 2: flac #sample_rate 2: 44100 -#channel_layout_name 2: mono +#channel_layout_name 2: stereo #tb 3: 1/44100 #media_type 3: audio #codec_id 3: flac @@ -31,7 +32,7 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 #media_type 4: audio #codec_id 4: flac #sample_rate 4: 44100 -#channel_layout_name 4: stereo +#channel_layout_name 4: mono #tb 5: 1/44100 #media_type 5: audio #codec_id 5: flac @@ -42,76 +43,106 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 #codec_id 6: flac #sample_rate 6: 44100 #channel_layout_name 6: stereo -0, 0, 0, 4608, 1399, 0x6e89566e +#tb 7: 1/44100 +#media_type 7: audio +#codec_id 7: flac +#sample_rate 7: 44100 +#channel_layout_name 7: stereo +0, 0, 0, 512, 42002, 0xef0e5124 1, 0, 0, 4608, 1399, 0x6e89566e -2, 0, 0, 4608, 1396, 0x0dcb5677 +2, 0, 0, 4608, 1399, 0x6e89566e 3, 0, 0, 4608, 1396, 0x0dcb5677 -4, 0, 0, 4608, 1399, 0x6e89566e +4, 0, 0, 4608, 1396, 0x0dcb5677 5, 0, 0, 4608, 1399, 0x6e89566e 6, 0, 0, 4608, 1399, 0x6e89566e -0, 4608, 4608, 4608, 1442, 0x6c3c5b13 +7, 0, 0, 4608, 1399, 0x6e89566e +0, 512, 512, 512, 52619, 0xc794e830, F=0x0 +0, 1024, 1024, 512, 51242, 0xf2f6be7f, F=0x0 1, 4608, 4608, 4608, 1442, 0x6c3c5b13 -2, 4608, 4608, 4608, 1439, 0xc46b5ac5 +2, 4608, 4608, 4608, 1442, 0x6c3c5b13 3, 4608, 4608, 4608, 1439, 0xc46b5ac5 -4, 4608, 4608, 4608, 1442, 0x6c3c5b13 +4, 4608, 4608, 4608, 1439, 0xc46b5ac5 5, 4608, 4608, 4608, 1442, 0x6c3c5b13 6, 4608, 4608, 4608, 1442, 0x6c3c5b13 -0, 9216, 9216, 4608, 1380, 0xc497571b +7, 4608, 4608, 4608, 1442, 0x6c3c5b13 +0, 1536, 1536, 512, 49320, 0xe87a921f, F=0x0 +0, 2048, 2048, 512, 22461, 0xc858a20b, F=0x0 +0, 2560, 2560, 512, 16731, 0x04beb863, F=0x0 1, 9216, 9216, 4608, 1380, 0xc497571b -2, 9216, 9216, 4608, 1377, 0x5b2a55fe +2, 9216, 9216, 4608, 1380, 0xc497571b 3, 9216, 9216, 4608, 1377, 0x5b2a55fe -4, 9216, 9216, 4608, 1380, 0xc497571b +4, 9216, 9216, 4608, 1377, 0x5b2a55fe 5, 9216, 9216, 4608, 1380, 0xc497571b 6, 9216, 9216, 4608, 1380, 0xc497571b -0, 13824, 13824, 4608, 1383, 0x48e9510f +7, 9216, 9216, 4608, 1380, 0xc497571b +0, 3072, 3072, 512, 9983, 0x091aa8e8, F=0x0 +0, 3584, 3584, 512, 6991, 0xa0385313, F=0x0 1, 13824, 13824, 4608, 1383, 0x48e9510f -2, 13824, 13824, 4608, 1380, 0x045550d3 +2, 13824, 13824, 4608, 1383, 0x48e9510f 3, 13824, 13824, 4608, 1380, 0x045550d3 -4, 13824, 13824, 4608, 1383, 0x48e9510f +4, 13824, 13824, 4608, 1380, 0x045550d3 5, 13824, 13824, 4608, 1383, 0x48e9510f 6, 13824, 13824, 4608, 1383, 0x48e9510f -0, 18432, 18432, 4608, 1572, 0x9a514719 +7, 13824, 13824, 4608, 1383, 0x48e9510f +0, 4096, 4096, 512, 5825, 0x3c97cfbc, F=0x0 +0, 4608, 4608, 512, 4331, 0xbaf5f982, F=0x0 +0, 5120, 5120, 512, 2541, 0xe018c3cb, F=0x0 1, 18432, 18432, 4608, 1572, 0x9a514719 -2, 18432, 18432, 4608, 1568, 0xa2bc45f4 +2, 18432, 18432, 4608, 1572, 0x9a514719 3, 18432, 18432, 4608, 1568, 0xa2bc45f4 -4, 18432, 18432, 4608, 1572, 0x9a514719 +4, 18432, 18432, 4608, 1568, 0xa2bc45f4 5, 18432, 18432, 4608, 1572, 0x9a514719 6, 18432, 18432, 4608, 1572, 0x9a514719 -0, 23040, 23040, 4608, 1391, 0x74ac5014 +7, 18432, 18432, 4608, 1572, 0x9a514719 +0, 5632, 5632, 512, 2655, 0xf98af7a1, F=0x0 +0, 6144, 6144, 512, 13464, 0x33e5196f +0, 6656, 6656, 512, 2587, 0x90e198aa, F=0x0 1, 23040, 23040, 4608, 1391, 0x74ac5014 -2, 23040, 23040, 4608, 1388, 0x96c85007 +2, 23040, 23040, 4608, 1391, 0x74ac5014 3, 23040, 23040, 4608, 1388, 0x96c85007 -4, 23040, 23040, 4608, 1391, 0x74ac5014 +4, 23040, 23040, 4608, 1388, 0x96c85007 5, 23040, 23040, 4608, 1391, 0x74ac5014 6, 23040, 23040, 4608, 1391, 0x74ac5014 -0, 27648, 27648, 4608, 1422, 0x2f9d47c5 +7, 23040, 23040, 4608, 1391, 0x74ac5014 +0, 7168, 7168, 512, 2313, 0x698c429b, F=0x0 +0, 7680, 7680, 512, 2123, 0x63a3f034, F=0x0 1, 27648, 27648, 4608, 1422, 0x2f9d47c5 -2, 27648, 27648, 4608, 1419, 0x4d4d466a +2, 27648, 27648, 4608, 1422, 0x2f9d47c5 3, 27648, 27648, 4608, 1419, 0x4d4d466a -4, 27648, 27648, 4608, 1422, 0x2f9d47c5 +4, 27648, 27648, 4608, 1419, 0x4d4d466a 5, 27648, 27648, 4608, 1422, 0x2f9d47c5 6, 27648, 27648, 4608, 1422, 0x2f9d47c5 -0, 32256, 32256, 4608, 1768, 0x2a044b99 +7, 27648, 27648, 4608, 1422, 0x2f9d47c5 +0, 8192, 8192, 512, 2222, 0x442b233d, F=0x0 +0, 8704, 8704, 512, 2332, 0x24c75b04, F=0x0 +0, 9216, 9216, 512, 2302, 0xa0fa2ee7, F=0x0 1, 32256, 32256, 4608, 1768, 0x2a044b99 -2, 32256, 32256, 4608, 1765, 0xacb84b24 +2, 32256, 32256, 4608, 1768, 0x2a044b99 3, 32256, 32256, 4608, 1765, 0xacb84b24 -4, 32256, 32256, 4608, 1768, 0x2a044b99 +4, 32256, 32256, 4608, 1765, 0xacb84b24 5, 32256, 32256, 4608, 1768, 0x2a044b99 6, 32256, 32256, 4608, 1768, 0x2a044b99 -0, 36864, 36864, 4608, 1534, 0xb0b35a3f +7, 32256, 32256, 4608, 1768, 0x2a044b99 +0, 9728, 9728, 512, 1740, 0xdf772eb3, F=0x0 +0, 10240, 10240, 512, 1994, 0x8830ad23, F=0x0 1, 36864, 36864, 4608, 1534, 0xb0b35a3f -2, 36864, 36864, 4608, 1531, 0x996458aa +2, 36864, 36864, 4608, 1534, 0xb0b35a3f 3, 36864, 36864, 4608, 1531, 0x996458aa -4, 36864, 36864, 4608, 1534, 0xb0b35a3f +4, 36864, 36864, 4608, 1531, 0x996458aa 5, 36864, 36864, 4608, 1534, 0xb0b35a3f 6, 36864, 36864, 4608, 1534, 0xb0b35a3f -0, 41472, 41472, 2628, 926, 0xc26a5eae +7, 36864, 36864, 4608, 1534, 0xb0b35a3f +0, 10752, 10752, 512, 1884, 0x2c567db6, F=0x0 +0, 11264, 11264, 512, 1880, 0x72237c52, F=0x0 +0, 11776, 11776, 512, 1970, 0x60708ff8, F=0x0 1, 41472, 41472, 2628, 926, 0xc26a5eae -2, 41472, 41472, 2628, 923, 0xa7225edf +2, 41472, 41472, 2628, 926, 0xc26a5eae 3, 41472, 41472, 2628, 923, 0xa7225edf -4, 41472, 41472, 2628, 926, 0xc26a5eae +4, 41472, 41472, 2628, 923, 0xa7225edf 5, 41472, 41472, 2628, 926, 0xc26a5eae 6, 41472, 41472, 2628, 926, 0xc26a5eae +7, 41472, 41472, 2628, 926, 0xc26a5eae +0, 12288, 12288, 512, 11659, 0x6bcb830e [STREAM_GROUP] index=0 id=0x1 @@ -177,8 +208,8 @@ TAG:language=und TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] -index=0 -id=0x0 +index=1 +id=0x2 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -199,8 +230,8 @@ DISPOSITION:dependent=0 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=1 -id=0x1 +index=2 +id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -221,8 +252,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=2 -id=0x2 +index=3 +id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -243,8 +274,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=3 -id=0x3 +index=4 +id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -265,8 +296,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=4 -id=0x4 +index=5 +id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -287,8 +318,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=5 -id=0x5 +index=6 +id=0x7 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -309,8 +340,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=6 -id=0x6 +index=7 +id=0x8 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -427,8 +458,8 @@ TAG:language=und TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] -index=0 -id=0x0 +index=1 +id=0x2 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -449,8 +480,8 @@ DISPOSITION:dependent=0 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=1 -id=0x1 +index=2 +id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -471,8 +502,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=2 -id=0x2 +index=3 +id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -493,8 +524,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=3 -id=0x3 +index=4 +id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -515,8 +546,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=4 -id=0x4 +index=5 +id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -537,8 +568,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=5 -id=0x5 +index=6 +id=0x7 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -559,8 +590,8 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=6 -id=0x6 +index=7 +id=0x8 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -581,3 +612,35 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [/STREAM_GROUP] +[STREAM] +index=0 +id=0x1 +[/STREAM] +[STREAM] +index=1 +id=0x2 +[/STREAM] +[STREAM] +index=2 +id=0x3 +[/STREAM] +[STREAM] +index=3 +id=0x4 +[/STREAM] +[STREAM] +index=4 +id=0x5 +[/STREAM] +[STREAM] +index=5 +id=0x6 +[/STREAM] +[STREAM] +index=6 +id=0x7 +[/STREAM] +[STREAM] +index=7 +id=0x8 +[/STREAM] diff --git a/tests/ref/fate/mov-mp4-iamf-7_1_4 b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last similarity index 87% rename from tests/ref/fate/mov-mp4-iamf-7_1_4 rename to tests/ref/fate/mov-mp4-iamf-7_1_4-video-last index 0641cb0c3c..4f70fedf5b 100644 --- a/tests/ref/fate/mov-mp4-iamf-7_1_4 +++ b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last @@ -1,5 +1,5 @@ -d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 -100588 tests/data/fate/mov-mp4-iamf-7_1_4.mp4 +d398cd7938efbe3dc570b407fe543a31 *tests/data/fate/mov-mp4-iamf-7_1_4-video-last.mp4 +416629 tests/data/fate/mov-mp4-iamf-7_1_4-video-last.mp4 #extradata 0: 34, 0xafa70d5e #extradata 1: 34, 0xafa70d5e #extradata 2: 34, 0xaf7b0d5c @@ -7,6 +7,7 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 #extradata 4: 34, 0xafa70d5e #extradata 5: 34, 0xafa70d5e #extradata 6: 34, 0xafa70d5e +#extradata 7: 30, 0x47ab0576 #tb 0: 1/44100 #media_type 0: audio #codec_id 0: flac @@ -42,6 +43,11 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 #codec_id 6: flac #sample_rate 6: 44100 #channel_layout_name 6: stereo +#tb 7: 1/12800 +#media_type 7: video +#codec_id 7: mpeg4 +#dimensions 7: 352x288 +#sar 7: 1/1 0, 0, 0, 4608, 1399, 0x6e89566e 1, 0, 0, 4608, 1399, 0x6e89566e 2, 0, 0, 4608, 1396, 0x0dcb5677 @@ -49,6 +55,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 0, 0, 4608, 1399, 0x6e89566e 5, 0, 0, 4608, 1399, 0x6e89566e 6, 0, 0, 4608, 1399, 0x6e89566e +7, 0, 0, 512, 42002, 0xef0e5124 +7, 512, 512, 512, 52619, 0xc794e830, F=0x0 +7, 1024, 1024, 512, 51242, 0xf2f6be7f, F=0x0 0, 4608, 4608, 4608, 1442, 0x6c3c5b13 1, 4608, 4608, 4608, 1442, 0x6c3c5b13 2, 4608, 4608, 4608, 1439, 0xc46b5ac5 @@ -56,6 +65,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 4608, 4608, 4608, 1442, 0x6c3c5b13 5, 4608, 4608, 4608, 1442, 0x6c3c5b13 6, 4608, 4608, 4608, 1442, 0x6c3c5b13 +7, 1536, 1536, 512, 49320, 0xe87a921f, F=0x0 +7, 2048, 2048, 512, 22461, 0xc858a20b, F=0x0 +7, 2560, 2560, 512, 16731, 0x04beb863, F=0x0 0, 9216, 9216, 4608, 1380, 0xc497571b 1, 9216, 9216, 4608, 1380, 0xc497571b 2, 9216, 9216, 4608, 1377, 0x5b2a55fe @@ -63,6 +75,8 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 9216, 9216, 4608, 1380, 0xc497571b 5, 9216, 9216, 4608, 1380, 0xc497571b 6, 9216, 9216, 4608, 1380, 0xc497571b +7, 3072, 3072, 512, 9983, 0x091aa8e8, F=0x0 +7, 3584, 3584, 512, 6991, 0xa0385313, F=0x0 0, 13824, 13824, 4608, 1383, 0x48e9510f 1, 13824, 13824, 4608, 1383, 0x48e9510f 2, 13824, 13824, 4608, 1380, 0x045550d3 @@ -70,6 +84,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 13824, 13824, 4608, 1383, 0x48e9510f 5, 13824, 13824, 4608, 1383, 0x48e9510f 6, 13824, 13824, 4608, 1383, 0x48e9510f +7, 4096, 4096, 512, 5825, 0x3c97cfbc, F=0x0 +7, 4608, 4608, 512, 4331, 0xbaf5f982, F=0x0 +7, 5120, 5120, 512, 2541, 0xe018c3cb, F=0x0 0, 18432, 18432, 4608, 1572, 0x9a514719 1, 18432, 18432, 4608, 1572, 0x9a514719 2, 18432, 18432, 4608, 1568, 0xa2bc45f4 @@ -77,6 +94,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 18432, 18432, 4608, 1572, 0x9a514719 5, 18432, 18432, 4608, 1572, 0x9a514719 6, 18432, 18432, 4608, 1572, 0x9a514719 +7, 5632, 5632, 512, 2655, 0xf98af7a1, F=0x0 +7, 6144, 6144, 512, 13464, 0x33e5196f +7, 6656, 6656, 512, 2587, 0x90e198aa, F=0x0 0, 23040, 23040, 4608, 1391, 0x74ac5014 1, 23040, 23040, 4608, 1391, 0x74ac5014 2, 23040, 23040, 4608, 1388, 0x96c85007 @@ -84,6 +104,8 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 23040, 23040, 4608, 1391, 0x74ac5014 5, 23040, 23040, 4608, 1391, 0x74ac5014 6, 23040, 23040, 4608, 1391, 0x74ac5014 +7, 7168, 7168, 512, 2313, 0x698c429b, F=0x0 +7, 7680, 7680, 512, 2123, 0x63a3f034, F=0x0 0, 27648, 27648, 4608, 1422, 0x2f9d47c5 1, 27648, 27648, 4608, 1422, 0x2f9d47c5 2, 27648, 27648, 4608, 1419, 0x4d4d466a @@ -91,6 +113,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 27648, 27648, 4608, 1422, 0x2f9d47c5 5, 27648, 27648, 4608, 1422, 0x2f9d47c5 6, 27648, 27648, 4608, 1422, 0x2f9d47c5 +7, 8192, 8192, 512, 2222, 0x442b233d, F=0x0 +7, 8704, 8704, 512, 2332, 0x24c75b04, F=0x0 +7, 9216, 9216, 512, 2302, 0xa0fa2ee7, F=0x0 0, 32256, 32256, 4608, 1768, 0x2a044b99 1, 32256, 32256, 4608, 1768, 0x2a044b99 2, 32256, 32256, 4608, 1765, 0xacb84b24 @@ -98,6 +123,8 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 32256, 32256, 4608, 1768, 0x2a044b99 5, 32256, 32256, 4608, 1768, 0x2a044b99 6, 32256, 32256, 4608, 1768, 0x2a044b99 +7, 9728, 9728, 512, 1740, 0xdf772eb3, F=0x0 +7, 10240, 10240, 512, 1994, 0x8830ad23, F=0x0 0, 36864, 36864, 4608, 1534, 0xb0b35a3f 1, 36864, 36864, 4608, 1534, 0xb0b35a3f 2, 36864, 36864, 4608, 1531, 0x996458aa @@ -105,6 +132,9 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 36864, 36864, 4608, 1534, 0xb0b35a3f 5, 36864, 36864, 4608, 1534, 0xb0b35a3f 6, 36864, 36864, 4608, 1534, 0xb0b35a3f +7, 10752, 10752, 512, 1884, 0x2c567db6, F=0x0 +7, 11264, 11264, 512, 1880, 0x72237c52, F=0x0 +7, 11776, 11776, 512, 1970, 0x60708ff8, F=0x0 0, 41472, 41472, 2628, 926, 0xc26a5eae 1, 41472, 41472, 2628, 926, 0xc26a5eae 2, 41472, 41472, 2628, 923, 0xa7225edf @@ -112,6 +142,7 @@ d9ef5d14bbd37c5a06c1494cacdb8f29 *tests/data/fate/mov-mp4-iamf-7_1_4.mp4 4, 41472, 41472, 2628, 926, 0xc26a5eae 5, 41472, 41472, 2628, 926, 0xc26a5eae 6, 41472, 41472, 2628, 926, 0xc26a5eae +7, 12288, 12288, 512, 11659, 0x6bcb830e [STREAM_GROUP] index=0 id=0x1 @@ -178,7 +209,7 @@ TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] index=0 -id=0x0 +id=0x1 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -200,7 +231,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x1 +id=0x2 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -222,7 +253,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=2 -id=0x2 +id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -244,7 +275,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=3 -id=0x3 +id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -266,7 +297,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=4 -id=0x4 +id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -288,7 +319,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=5 -id=0x5 +id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -310,7 +341,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=6 -id=0x6 +id=0x7 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -428,7 +459,7 @@ TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] index=0 -id=0x0 +id=0x1 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -450,7 +481,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x1 +id=0x2 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -472,7 +503,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=2 -id=0x2 +id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -494,7 +525,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=3 -id=0x3 +id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -516,7 +547,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=4 -id=0x4 +id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -538,7 +569,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=5 -id=0x5 +id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -560,7 +591,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=6 -id=0x6 +id=0x7 DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -581,3 +612,35 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [/STREAM_GROUP] +[STREAM] +index=0 +id=0x1 +[/STREAM] +[STREAM] +index=1 +id=0x2 +[/STREAM] +[STREAM] +index=2 +id=0x3 +[/STREAM] +[STREAM] +index=3 +id=0x4 +[/STREAM] +[STREAM] +index=4 +id=0x5 +[/STREAM] +[STREAM] +index=5 +id=0x6 +[/STREAM] +[STREAM] +index=6 +id=0x7 +[/STREAM] +[STREAM] +index=7 +id=0x8 +[/STREAM] diff --git a/tests/streamgroups/audio_element-7_1_4 b/tests/streamgroups/audio_element-7_1_4-2 similarity index 73% copy from tests/streamgroups/audio_element-7_1_4 copy to tests/streamgroups/audio_element-7_1_4-2 index 67acd1ebfc..324ab5562d 100644 --- a/tests/streamgroups/audio_element-7_1_4 +++ b/tests/streamgroups/audio_element-7_1_4-2 @@ -1,4 +1,4 @@ -type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3:st=4:st=5:st=6:default_w=10, +type=iamf_audio_element:id=1:st=1:st=2:st=3:st=4:st=5:st=6:st=7:default_w=10, demixing=dmixp_mode=1:parameter_id=998,recon_gain=parameter_id=101, layer=ch_layout=stereo, layer=ch_layout=3.1.2,
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch release/7.0 in repository ffmpeg. commit 3157e62866c2c20bcefa30236a73eff50a05ab92 Author: James Almer <jamrial@gmail.com> AuthorDate: Fri Dec 20 12:57:48 2024 -0300 Commit: James Almer <jamrial@gmail.com> CommitDate: Fri Feb 27 12:17:16 2026 -0300 avformat/mov: add an offset to IAMF streams Using audio_substream_id for AVStream ids is not ideal give that in containers like mp4, the IAMF structure is opaque to the outside and other streams may share such id values. Signed-off-by: James Almer <jamrial@gmail.com> (cherry picked from commit a8f23745074acd8a1934e3653caebd5a0ba05c6f) --- libavformat/iamf_reader.c | 12 ++++---- libavformat/iamf_reader.h | 2 +- libavformat/iamfdec.c | 2 +- libavformat/isom.h | 1 + libavformat/mov.c | 29 ++++++++++++++++++- libavformat/version.h | 2 +- tests/ref/fate/mov-mp4-iamf-7_1_4-video-last | 42 ++++++++++++++-------------- 7 files changed, 59 insertions(+), 31 deletions(-) diff --git a/libavformat/iamf_reader.c b/libavformat/iamf_reader.c index 02e8b694d7..6b6360d314 100644 --- a/libavformat/iamf_reader.c +++ b/libavformat/iamf_reader.c @@ -30,10 +30,10 @@ #include "iamf_parse.h" #include "iamf_reader.h" -static AVStream *find_stream_by_id(AVFormatContext *s, int id) +static AVStream *find_stream_by_id(AVFormatContext *s, int id, int stream_id_offset) { for (int i = 0; i < s->nb_streams; i++) - if (s->streams[i]->id == id) + if (s->streams[i]->id == id + stream_id_offset) return s->streams[i]; av_log(s, AV_LOG_ERROR, "Invalid stream id %d\n", id); @@ -44,7 +44,7 @@ static int audio_frame_obu(AVFormatContext *s, const IAMFDemuxContext *c, AVIOContext *pb, AVPacket *pkt, int len, enum IAMF_OBU_Type type, unsigned skip_samples, unsigned discard_padding, - int id_in_bitstream) + int stream_id_offset, int id_in_bitstream) { AVStream *st; int ret, audio_substream_id; @@ -58,7 +58,7 @@ static int audio_frame_obu(AVFormatContext *s, const IAMFDemuxContext *c, } else audio_substream_id = type - IAMF_OBU_IA_AUDIO_FRAME_ID0; - st = find_stream_by_id(s, audio_substream_id); + st = find_stream_by_id(s, audio_substream_id, stream_id_offset); if (!st) return AVERROR_INVALIDDATA; @@ -276,7 +276,7 @@ fail: } int ff_iamf_read_packet(AVFormatContext *s, IAMFDemuxContext *c, - AVIOContext *pb, int max_size, AVPacket *pkt) + AVIOContext *pb, int max_size, int stream_id_offset, AVPacket *pkt) { int read = 0; @@ -306,7 +306,7 @@ int ff_iamf_read_packet(AVFormatContext *s, IAMFDemuxContext *c, read += len; if (type >= IAMF_OBU_IA_AUDIO_FRAME && type <= IAMF_OBU_IA_AUDIO_FRAME_ID17) { ret = audio_frame_obu(s, c, pb, pkt, obu_size, type, - skip_samples, discard_padding, + skip_samples, discard_padding, stream_id_offset, type == IAMF_OBU_IA_AUDIO_FRAME); if (ret < 0) return ret; diff --git a/libavformat/iamf_reader.h b/libavformat/iamf_reader.h index ecb92d485a..279739cde9 100644 --- a/libavformat/iamf_reader.h +++ b/libavformat/iamf_reader.h @@ -42,7 +42,7 @@ typedef struct IAMFDemuxContext { } IAMFDemuxContext; int ff_iamf_read_packet(AVFormatContext *s, IAMFDemuxContext *c, - AVIOContext *pb, int max_size, AVPacket *pkt); + AVIOContext *pb, int max_size, int stream_id_offset, AVPacket *pkt); void ff_iamf_read_deinit(IAMFDemuxContext *c); diff --git a/libavformat/iamfdec.c b/libavformat/iamfdec.c index ad47c5e5f7..08d12f59d3 100644 --- a/libavformat/iamfdec.c +++ b/libavformat/iamfdec.c @@ -165,7 +165,7 @@ static int iamf_read_packet(AVFormatContext *s, AVPacket *pkt) IAMFDemuxContext *const c = s->priv_data; int ret; - ret = ff_iamf_read_packet(s, c, s->pb, INT_MAX, pkt); + ret = ff_iamf_read_packet(s, c, s->pb, INT_MAX, 0, pkt); if (ret < 0) return ret; diff --git a/libavformat/isom.h b/libavformat/isom.h index b7ccc9994b..bdb7555d9c 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -267,6 +267,7 @@ typedef struct MOVStreamContext { } cenc; struct IAMFDemuxContext *iamf; + int iamf_stream_offset; } MOVStreamContext; typedef struct HEIFItem { diff --git a/libavformat/mov.c b/libavformat/mov.c index 68b46184e4..f2f1bb96e6 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -9551,6 +9551,30 @@ static int mov_parse_tiles(AVFormatContext *s) return 0; } +static void fix_stream_ids(AVFormatContext *s) +{ + int highest_id = 0; + + for (int i = 0; i < s->nb_streams; i++) { + const AVStream *st = s->streams[i]; + const MOVStreamContext *sc = st->priv_data; + if (!sc->iamf) + highest_id = FFMAX(highest_id, st->id); + } + highest_id += !highest_id; + for (int i = 0; highest_id > 1 && i < s->nb_stream_groups; i++) { + AVStreamGroup *stg = s->stream_groups[i]; + if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT) + continue; + for (int j = 0; j < stg->nb_streams; j++) { + AVStream *st = stg->streams[j]; + MOVStreamContext *sc = st->priv_data; + st->id += highest_id; + sc->iamf_stream_offset = highest_id; + } + } +} + static int mov_read_header(AVFormatContext *s) { MOVContext *mov = s->priv_data; @@ -9812,6 +9836,9 @@ static int mov_read_header(AVFormatContext *s) break; } } + + fix_stream_ids(s); + ff_configure_buffers_for_index(s, AV_TIME_BASE); for (i = 0; i < mov->frag_index.nb_items; i++) @@ -10101,7 +10128,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) pos = pkt->pos; flags = pkt->flags; duration = pkt->duration; while (!ret && size > 0) { - ret = ff_iamf_read_packet(s, sc->iamf, sc->pb, size, pkt); + ret = ff_iamf_read_packet(s, sc->iamf, sc->pb, size, sc->iamf_stream_offset, pkt); if (ret < 0) { if (should_retry(sc->pb, ret)) mov_current_sample_dec(sc); diff --git a/libavformat/version.h b/libavformat/version.h index a7c80dc564..b32ddb3617 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFORMAT_VERSION_MINOR 1 -#define LIBAVFORMAT_VERSION_MICRO 100 +#define LIBAVFORMAT_VERSION_MICRO 101 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last index 4f70fedf5b..e4b690e9a3 100644 --- a/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last +++ b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-last @@ -209,7 +209,7 @@ TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] index=0 -id=0x1 +id=0x9 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -231,7 +231,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x2 +id=0xa DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -253,7 +253,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=2 -id=0x3 +id=0xb DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -275,7 +275,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=3 -id=0x4 +id=0xc DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -297,7 +297,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=4 -id=0x5 +id=0xd DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -319,7 +319,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=5 -id=0x6 +id=0xe DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -341,7 +341,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=6 -id=0x7 +id=0xf DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -459,7 +459,7 @@ TAG:handler_name=SoundHandler TAG:vendor_id=[0][0][0][0] [STREAM] index=0 -id=0x1 +id=0x9 DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -481,7 +481,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x2 +id=0xa DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -503,7 +503,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=2 -id=0x3 +id=0xb DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -525,7 +525,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=3 -id=0x4 +id=0xc DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -547,7 +547,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=4 -id=0x5 +id=0xd DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -569,7 +569,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=5 -id=0x6 +id=0xe DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -591,7 +591,7 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=6 -id=0x7 +id=0xf DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 @@ -614,31 +614,31 @@ DISPOSITION:still_image=0 [/STREAM_GROUP] [STREAM] index=0 -id=0x1 +id=0x9 [/STREAM] [STREAM] index=1 -id=0x2 +id=0xa [/STREAM] [STREAM] index=2 -id=0x3 +id=0xb [/STREAM] [STREAM] index=3 -id=0x4 +id=0xc [/STREAM] [STREAM] index=4 -id=0x5 +id=0xd [/STREAM] [STREAM] index=5 -id=0x6 +id=0xe [/STREAM] [STREAM] index=6 -id=0x7 +id=0xf [/STREAM] [STREAM] index=7
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch release/7.0 in repository ffmpeg. commit 9434a8349de3ffd34236ca80df0ca2cf8273681c Author: James Almer <jamrial@gmail.com> AuthorDate: Fri Feb 27 10:38:14 2026 -0300 Commit: James Almer <jamrial@gmail.com> CommitDate: Fri Feb 27 12:21:09 2026 -0300 avformat/mov: fix setting iamf stream id offsets If we were to add the highest id of a non iamf stream as offset to iamf stream ids, and one of the latter was 0, then an id overlap would ocurr. Signed-off-by: James Almer <jamrial@gmail.com> (cherry picked from commit 51aef95ba156b7848eca5445f0f59b091c3b1004) --- libavformat/mov.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index f2f1bb96e6..b638ca0654 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -9553,7 +9553,7 @@ static int mov_parse_tiles(AVFormatContext *s) static void fix_stream_ids(AVFormatContext *s) { - int highest_id = 0; + int highest_id = 0, lowest_iamf_id = INT_MAX; for (int i = 0; i < s->nb_streams; i++) { const AVStream *st = s->streams[i]; @@ -9561,7 +9561,21 @@ static void fix_stream_ids(AVFormatContext *s) if (!sc->iamf) highest_id = FFMAX(highest_id, st->id); } - highest_id += !highest_id; + + for (int i = 0; i < s->nb_stream_groups; i++) { + AVStreamGroup *stg = s->stream_groups[i]; + if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT) + continue; + for (int j = 0; j < stg->nb_streams; j++) { + AVStream *st = stg->streams[j]; + lowest_iamf_id = FFMIN(lowest_iamf_id, st->id); + } + } + + if (highest_id < lowest_iamf_id) + return; + + highest_id += !lowest_iamf_id; for (int i = 0; highest_id > 1 && i < s->nb_stream_groups; i++) { AVStreamGroup *stg = s->stream_groups[i]; if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT)
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch release/7.0 in repository ffmpeg. commit 67641670cc5f46375f70d128203f941f0d3370b2 Author: James Almer <jamrial@gmail.com> AuthorDate: Fri Feb 27 10:41:31 2026 -0300 Commit: James Almer <jamrial@gmail.com> CommitDate: Fri Feb 27 12:27:55 2026 -0300 avformat/mov: fix cases where we discard iamf packets from enabled streams Given the entire iamf struct is inside a single Track, if the first iamf stream (which is the one sharing the index and id from the Track) was to be disabled, then packets from every iamf stream would be discarded. Fix this by actually going through the entire iamf Sample and discarding those from the disabled streams only. Signed-off-by: James Almer <jamrial@gmail.com> (cherry picked from commit 16ee3d8d99a2f2e83a2559e958e19ede813b29f8) --- libavformat/iamf_reader.c | 3 +++ libavformat/mov.c | 8 +++++++- libavformat/version.h | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_reader.c b/libavformat/iamf_reader.c index 6b6360d314..d83bd1a006 100644 --- a/libavformat/iamf_reader.c +++ b/libavformat/iamf_reader.c @@ -94,6 +94,9 @@ static int audio_frame_obu(AVFormatContext *s, const IAMFDemuxContext *c, memcpy(side_data, c->recon, c->recon_size); } + if (st->discard == AVDISCARD_ALL) + pkt->flags |= AV_PKT_FLAG_DISCARD; + pkt->stream_index = st->index; return 0; } diff --git a/libavformat/mov.c b/libavformat/mov.c index b638ca0654..1dd8bef4e4 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -10114,7 +10114,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) sample->size = FFMIN(sample->size, (mov->next_root_atom - sample->pos)); } - if (st->discard != AVDISCARD_ALL) { + if (st->discard != AVDISCARD_ALL || sc->iamf) { int64_t ret64 = avio_seek(sc->pb, sample->pos, SEEK_SET); if (ret64 != sample->pos) { av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%"PRIx64": partial file\n", @@ -10149,6 +10149,12 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; } size -= ret; + + if (pkt->flags & AV_PKT_FLAG_DISCARD) { + av_packet_unref(pkt); + ret = 0; + continue; + } pkt->pts = pts; pkt->dts = dts; pkt->pos = pos; pkt->flags |= flags; pkt->duration = duration; diff --git a/libavformat/version.h b/libavformat/version.h index b32ddb3617..b3c03a373b 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFORMAT_VERSION_MINOR 1 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MICRO 102 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \
participants (2)
-
ffmpeg-git -
James Almer