From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id BF17D4F52C for ; Fri, 27 Feb 2026 15:27:07 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'Mf4TEOEEYj2VUzq4UljPnXiug6e0X2m8g8OlY4fZn5c=', expected b'+9CH1SQDY/Bm7GpsqWC7/f0fR8uaSkapmxB23BcV5QQ=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1772205989; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=Mf4TEOEEYj2VUzq4UljPnXiug6e0X2m8g8OlY4fZn5c=; b=LpPs+Cm51bHzrCxZojwxfk1uCvope+jtzRaKR0hcxfdcOBcS4ZsyLPTR782STsraoI0Zg AXgxDcwd/SfcR8XPSeDgXeLLlsBZdyJkqGjitICxfwMz22D37Dn/9yp9QVoToYTn8ZllqJ2 9Dd2SkcPcwc7LqG7yzEdkxyYgTMoc6vItOLNI4LIlTi3StfK2y8KrTgFeXHX1mWjy16B3zW vu21w6+epqdQwy4LPFkOUei7BdNWqPAcoPUOygw7nIM0MLlRYN4LvCg9eac2Ztb727O5SzX zP5pjf5+JWZT4e7KHCQ1rKTUD9cnYZWtZAmu2xMl632ibBxWyFyHEK+VP//g== Received: from [172.18.0.3] (unknown [172.18.0.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 21A2D6913FC; Fri, 27 Feb 2026 17:26:29 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1772205971; b=Tc4cAHzMlFROHBuqzQ5hxQqRKsUUJxqJuYOxAgjwfhJavrcUi6pXSRXg5xh/7aZprMM6k JPrz4Q6cbazFp/xEIlwnHrsZ+Jp2oVELNoRoY/XmUx6cKkn+ESLtG28frCyF4sHpNTqpuo8 sQmKaRAq47Y+8ABoVXOIuX2MHu4kLTJHtMduzN8DzoLhITBZCkV8ynFcyVYlYw0eYTbDXz7 afncZ3fSjT7zGxhUmQ3NPnyReH/7khMUcMe8TBFe3/PE3uDGvXW/oRIUBPofFvkMTEi1wsV ne0unzVTlp1EJ0xwFuowy4Kx4AyAJhWb2rgZzW7N53dEQSEji62dfvcl/64Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1772205971; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=1oMPM2DN2EolajzQuUL3zqfAqffKmYVbIgRXVDZYvb4=; b=oqTMj9krq6OsmwOmnC5Xb+Yr9zPcKMAc2gPziHt77gC2iozfi5kWOk7Y4UrQTPdA8Wa6t TZyot064SUCSMNQ125m1dqfJzvngyRSoc86HSUPcmCKFL6khrE4YPAelbmdZSv/GAqo5d5z c0TCIAeRyqhHWKqfzXTgSeMmeoiVG1I3r6t/GtfnTeldmMzIysgw2K/mBBNnQSWKFDQmBq/ s0r/11e7taqwtunndASdKUuifSYFNI5b/6SdMLTHaE7eExGWaHFuZf8wJSixkwo1FyqpCAm fe7pCcKJG1+H1pctbGqISdeJbxcMoyROh7QdEknXQB8ziIOv7tzardHgWF7Q== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1772205964; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=+9CH1SQDY/Bm7GpsqWC7/f0fR8uaSkapmxB23BcV5QQ=; b=4ywyguAucOC8wNHPGs+9zDR9cfaGzVG8fJ7n2j1SiObYkv4OX9yKIfru0XD3/p9VBaPYC VRwbswKr+iWZ9rmMDUWaotM3m8DSqE4104jDXSjmkvIAM3M6clAiQh6k6hpNNq2Dh3xiz4O FIZdRX6xDv4vdVVRvuZHh/JVSGhTmWrUv9myoX1ihlBn9RpBe4B7PyTqDFPpn8SoYMgpkOD 6t4B9wyMaf65i/sahC+N5GF/5KdcV+rmaUwcXzqKv4vRChfIpLWaopaK/TpklZfTNmvt1Nq xcpeBGXC+2ST7DRGSQ+CLCkbDPCb0avtGN8rGDnrW5u6p1rQEsCcF8191Psg== MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Feb 2026 15:25:56 -0000 Message-ID: <177220596425.25.1859633137034059117@29965ddac10e> Message-ID-Hash: LCMRBG3565DMRRP7RSYLY2J7AWRYA7RX X-Message-ID-Hash: LCMRBG3565DMRRP7RSYLY2J7AWRYA7RX X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PR] [release/7.0] Backport IAMF in mp4 fixes (PR #22314) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: James Almer via ffmpeg-devel Cc: James Almer Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #22314 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22314 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/22314.patch >>From f1cbd81e9e97085d9d8c01e42c77e4183c21e9ce Mon Sep 17 00:00:00 2001 From: James Almer Date: Wed, 31 Jul 2024 22:57:58 -0300 Subject: [PATCH 1/4] fate/mov: add an IAMF+video muxing test Signed-off-by: James Almer (cherry picked from commit eb3cc508d85e8113cbc66fbec09d29e94ec3fd44) --- tests/fate/mov.mak | 28 +- tests/ref/fate/mov-mp4-iamf-7_1_4-video-first | 646 ++++++++++++++++++ ...mf-7_1_4 => mov-mp4-iamf-7_1_4-video-last} | 175 +++-- tests/streamgroups/audio_element-7_1_4-2 | 6 + 4 files changed, 793 insertions(+), 62 deletions(-) create mode 100644 tests/ref/fate/mov-mp4-iamf-7_1_4-video-first rename tests/ref/fate/{mov-mp4-iamf-7_1_4 => mov-mp4-iamf-7_1_4-video-last} (87%) create mode 100644 tests/streamgroups/audio_element-7_1_4-2 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-video-first b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-first new file mode 100644 index 0000000000..707691ff29 --- /dev/null +++ b/tests/ref/fate/mov-mp4-iamf-7_1_4-video-first @@ -0,0 +1,646 @@ +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, 0xafa70d5e +#extradata 3: 34, 0xaf7b0d5c +#extradata 4: 34, 0xaf7b0d5c +#extradata 5: 34, 0xafa70d5e +#extradata 6: 34, 0xafa70d5e +#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 +#sample_rate 1: 44100 +#channel_layout_name 1: stereo +#tb 2: 1/44100 +#media_type 2: audio +#codec_id 2: flac +#sample_rate 2: 44100 +#channel_layout_name 2: stereo +#tb 3: 1/44100 +#media_type 3: audio +#codec_id 3: flac +#sample_rate 3: 44100 +#channel_layout_name 3: mono +#tb 4: 1/44100 +#media_type 4: audio +#codec_id 4: flac +#sample_rate 4: 44100 +#channel_layout_name 4: mono +#tb 5: 1/44100 +#media_type 5: audio +#codec_id 5: flac +#sample_rate 5: 44100 +#channel_layout_name 5: stereo +#tb 6: 1/44100 +#media_type 6: audio +#codec_id 6: flac +#sample_rate 6: 44100 +#channel_layout_name 6: stereo +#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, 1399, 0x6e89566e +3, 0, 0, 4608, 1396, 0x0dcb5677 +4, 0, 0, 4608, 1396, 0x0dcb5677 +5, 0, 0, 4608, 1399, 0x6e89566e +6, 0, 0, 4608, 1399, 0x6e89566e +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, 1442, 0x6c3c5b13 +3, 4608, 4608, 4608, 1439, 0xc46b5ac5 +4, 4608, 4608, 4608, 1439, 0xc46b5ac5 +5, 4608, 4608, 4608, 1442, 0x6c3c5b13 +6, 4608, 4608, 4608, 1442, 0x6c3c5b13 +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, 1380, 0xc497571b +3, 9216, 9216, 4608, 1377, 0x5b2a55fe +4, 9216, 9216, 4608, 1377, 0x5b2a55fe +5, 9216, 9216, 4608, 1380, 0xc497571b +6, 9216, 9216, 4608, 1380, 0xc497571b +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, 1383, 0x48e9510f +3, 13824, 13824, 4608, 1380, 0x045550d3 +4, 13824, 13824, 4608, 1380, 0x045550d3 +5, 13824, 13824, 4608, 1383, 0x48e9510f +6, 13824, 13824, 4608, 1383, 0x48e9510f +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, 1572, 0x9a514719 +3, 18432, 18432, 4608, 1568, 0xa2bc45f4 +4, 18432, 18432, 4608, 1568, 0xa2bc45f4 +5, 18432, 18432, 4608, 1572, 0x9a514719 +6, 18432, 18432, 4608, 1572, 0x9a514719 +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, 1391, 0x74ac5014 +3, 23040, 23040, 4608, 1388, 0x96c85007 +4, 23040, 23040, 4608, 1388, 0x96c85007 +5, 23040, 23040, 4608, 1391, 0x74ac5014 +6, 23040, 23040, 4608, 1391, 0x74ac5014 +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, 1422, 0x2f9d47c5 +3, 27648, 27648, 4608, 1419, 0x4d4d466a +4, 27648, 27648, 4608, 1419, 0x4d4d466a +5, 27648, 27648, 4608, 1422, 0x2f9d47c5 +6, 27648, 27648, 4608, 1422, 0x2f9d47c5 +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, 1768, 0x2a044b99 +3, 32256, 32256, 4608, 1765, 0xacb84b24 +4, 32256, 32256, 4608, 1765, 0xacb84b24 +5, 32256, 32256, 4608, 1768, 0x2a044b99 +6, 32256, 32256, 4608, 1768, 0x2a044b99 +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, 1534, 0xb0b35a3f +3, 36864, 36864, 4608, 1531, 0x996458aa +4, 36864, 36864, 4608, 1531, 0x996458aa +5, 36864, 36864, 4608, 1534, 0xb0b35a3f +6, 36864, 36864, 4608, 1534, 0xb0b35a3f +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, 926, 0xc26a5eae +3, 41472, 41472, 2628, 923, 0xa7225edf +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 +nb_streams=7 +type=IAMF Audio Element +[COMPONENT] +nb_layers=4 +audio_element_type=0 +default_w=10 +[SUBCOMPONENT] +channel_layout=stereo +output_gain_flags=0 +output_gain=0/1 +[/SUBCOMPONENT] +[SUBCOMPONENT] +channel_layout=3.1.2 +output_gain_flags=0 +output_gain=0/1 +[/SUBCOMPONENT] +[SUBCOMPONENT] +channel_layout=7.1.2 +output_gain_flags=0 +output_gain=0/1 +[/SUBCOMPONENT] +[SUBCOMPONENT] +channel_layout=7.1.4 +output_gain_flags=0 +output_gain=0/1 +[/SUBCOMPONENT] +[SUBCOMPONENT] +name=demixing_info +nb_subblocks=1 +type=1 +parameter_id=998 +parameter_rate=44100 +duration=4608 +constant_subblock_duration=4608 +[PIECE] +subblock_duration=4608 +dmixp_mode=1 +[/PIECE] +[/SUBCOMPONENT] +[/COMPONENT] +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +TAG:language=und +TAG:handler_name=SoundHandler +TAG:vendor_id=[0][0][0][0] +[STREAM] +index=1 +id=0x2 +DISPOSITION:default=1 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=2 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=3 +id=0x4 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=4 +id=0x5 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=5 +id=0x6 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=6 +id=0x7 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=7 +id=0x8 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[/STREAM_GROUP] +[STREAM_GROUP] +index=1 +id=0x2 +nb_streams=7 +type=IAMF Mix Presentation +[COMPONENT] +nb_submixes=1 +[SUBCOMPONENT] +en-us=Mix_Presentation +[/SUBCOMPONENT] +[SUBCOMPONENT] +nb_elements=1 +nb_layouts=4 +default_mix_gain=256/256 +[PIECE] +stream_id=1 +default_mix_gain=0/256 +headphones_rendering_mode=0 +[SUBPIECE] +en-us=Scalable_Submix +[/SUBPIECE] +[SUBPIECE] +name=element_mix_config +nb_subblocks=0 +type=0 +parameter_id=100 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/SUBPIECE] +[/PIECE] +[PIECE] +name=output_mix_config +nb_subblocks=0 +type=0 +parameter_id=100 +parameter_rate=48000 +duration=0 +constant_subblock_duration=0 +[/PIECE] +[PIECE] +sound_system=stereo +integrated_loudness=256/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[PIECE] +sound_system=3.1.2 +integrated_loudness=0/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[PIECE] +sound_system=7.1.2 +integrated_loudness=0/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[PIECE] +sound_system=7.1.4 +integrated_loudness=0/256 +digital_peak=0/256 +true_peak=0/1 +dialogue_anchored_loudness=0/1 +album_anchored_loudness=0/1 +[/PIECE] +[/SUBCOMPONENT] +[/COMPONENT] +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +TAG:language=und +TAG:handler_name=SoundHandler +TAG:vendor_id=[0][0][0][0] +[STREAM] +index=1 +id=0x2 +DISPOSITION:default=1 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=0 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=2 +id=0x3 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=3 +id=0x4 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=4 +id=0x5 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=5 +id=0x6 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=6 +id=0x7 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] +[STREAM] +index=7 +id=0x8 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +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,28 +231,6 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x1 -DISPOSITION:default=0 -DISPOSITION:dub=0 -DISPOSITION:original=0 -DISPOSITION:comment=0 -DISPOSITION:lyrics=0 -DISPOSITION:karaoke=0 -DISPOSITION:forced=0 -DISPOSITION:hearing_impaired=0 -DISPOSITION:visual_impaired=0 -DISPOSITION:clean_effects=0 -DISPOSITION:attached_pic=0 -DISPOSITION:timed_thumbnails=0 -DISPOSITION:non_diegetic=0 -DISPOSITION:captions=0 -DISPOSITION:descriptions=0 -DISPOSITION:metadata=0 -DISPOSITION:dependent=1 -DISPOSITION:still_image=0 -[/STREAM] -[STREAM] -index=2 id=0x2 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -243,7 +252,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=3 +index=2 id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -265,7 +274,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=4 +index=3 id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -287,7 +296,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=5 +index=4 id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -309,7 +318,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=6 +index=5 id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -330,6 +339,28 @@ DISPOSITION:metadata=0 DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] +[STREAM] +index=6 +id=0x7 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +DISPOSITION:dependent=1 +DISPOSITION:still_image=0 +[/STREAM] [/STREAM_GROUP] [STREAM_GROUP] index=1 @@ -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,28 +481,6 @@ DISPOSITION:still_image=0 [/STREAM] [STREAM] index=1 -id=0x1 -DISPOSITION:default=0 -DISPOSITION:dub=0 -DISPOSITION:original=0 -DISPOSITION:comment=0 -DISPOSITION:lyrics=0 -DISPOSITION:karaoke=0 -DISPOSITION:forced=0 -DISPOSITION:hearing_impaired=0 -DISPOSITION:visual_impaired=0 -DISPOSITION:clean_effects=0 -DISPOSITION:attached_pic=0 -DISPOSITION:timed_thumbnails=0 -DISPOSITION:non_diegetic=0 -DISPOSITION:captions=0 -DISPOSITION:descriptions=0 -DISPOSITION:metadata=0 -DISPOSITION:dependent=1 -DISPOSITION:still_image=0 -[/STREAM] -[STREAM] -index=2 id=0x2 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -493,7 +502,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=3 +index=2 id=0x3 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -515,7 +524,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=4 +index=3 id=0x4 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -537,7 +546,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=5 +index=4 id=0x5 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -559,7 +568,7 @@ DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] [STREAM] -index=6 +index=5 id=0x6 DISPOSITION:default=0 DISPOSITION:dub=0 @@ -580,4 +589,58 @@ DISPOSITION:metadata=0 DISPOSITION:dependent=1 DISPOSITION:still_image=0 [/STREAM] +[STREAM] +index=6 +id=0x7 +DISPOSITION:default=0 +DISPOSITION:dub=0 +DISPOSITION:original=0 +DISPOSITION:comment=0 +DISPOSITION:lyrics=0 +DISPOSITION:karaoke=0 +DISPOSITION:forced=0 +DISPOSITION:hearing_impaired=0 +DISPOSITION:visual_impaired=0 +DISPOSITION:clean_effects=0 +DISPOSITION:attached_pic=0 +DISPOSITION:timed_thumbnails=0 +DISPOSITION:non_diegetic=0 +DISPOSITION:captions=0 +DISPOSITION:descriptions=0 +DISPOSITION:metadata=0 +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-2 b/tests/streamgroups/audio_element-7_1_4-2 new file mode 100644 index 0000000000..324ab5562d --- /dev/null +++ b/tests/streamgroups/audio_element-7_1_4-2 @@ -0,0 +1,6 @@ +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, +layer=ch_layout=7.1.2, +layer=ch_layout=7.1.4, -- 2.52.0 >>From 3157e62866c2c20bcefa30236a73eff50a05ab92 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 20 Dec 2024 12:57:48 -0300 Subject: [PATCH 2/4] 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 (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 -- 2.52.0 >>From 9434a8349de3ffd34236ca80df0ca2cf8273681c Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 27 Feb 2026 10:38:14 -0300 Subject: [PATCH 3/4] 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 (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) -- 2.52.0 >>From 85166b3d5e861f2cd4fa270c57234d848346efb9 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 27 Feb 2026 10:41:31 -0300 Subject: [PATCH 4/4] 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 (cherry picked from commit 16ee3d8d99a2f2e83a2559e958e19ede813b29f8) --- libavformat/iamf_reader.c | 3 +++ libavformat/mov.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) 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; -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org