From 35a43d5c437935e518c4f5f1da9948d3e6b93ec0 Mon Sep 17 00:00:00 2001 From: ktrajkovski Date: Fri, 5 Jul 2024 08:37:18 -0700 Subject: [PATCH] Add support for IAMF audio in MP4 Extractors. A new IAMF type can now be recognized as an audio sample entry. A new mime type was created. PiperOrigin-RevId: 649658865 --- .../androidx/media3/common/MimeTypes.java | 1 + .../androidx/media3/extractor/mp4/Atom.java | 6 + .../media3/extractor/mp4/AtomParsers.java | 22 +- ...agmentedMp4ExtractorParameterizedTest.java | 9 + .../mp4/Mp4ExtractorParameterizedTest.java | 5 + .../mp4/sample_fragmented_iamf.mp4.0.dump | 520 ++++++++++++++++++ .../mp4/sample_fragmented_iamf.mp4.1.dump | 356 ++++++++++++ .../mp4/sample_fragmented_iamf.mp4.2.dump | 188 +++++++ .../mp4/sample_fragmented_iamf.mp4.3.dump | 24 + ...le_fragmented_iamf.mp4.unknown_length.dump | 520 ++++++++++++++++++ .../extractordumps/mp4/sample_iamf.mp4.0.dump | 274 +++++++++ .../extractordumps/mp4/sample_iamf.mp4.1.dump | 194 +++++++ .../extractordumps/mp4/sample_iamf.mp4.2.dump | 110 ++++ .../extractordumps/mp4/sample_iamf.mp4.3.dump | 26 + ...ding_within_gop_sample_dependencies.0.dump | 274 +++++++++ ...ding_within_gop_sample_dependencies.1.dump | 194 +++++++ ...ding_within_gop_sample_dependencies.2.dump | 110 ++++ ...ding_within_gop_sample_dependencies.3.dump | 26 + ...op_sample_dependencies.unknown_length.dump | 274 +++++++++ .../mp4/sample_iamf.mp4.unknown_length.dump | 274 +++++++++ .../media/mp4/sample_fragmented_iamf.mp4 | Bin 0 -> 34259 bytes .../src/test/assets/media/mp4/sample_iamf.mp4 | Bin 0 -> 33182 bytes 22 files changed, 3406 insertions(+), 1 deletion(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/mp4/sample_fragmented_iamf.mp4 create mode 100644 libraries/test_data/src/test/assets/media/mp4/sample_iamf.mp4 diff --git a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java index 4953137ee5..bd52589ea8 100644 --- a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java +++ b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java @@ -100,6 +100,7 @@ public final class MimeTypes { public static final String AUDIO_OGG = BASE_TYPE_AUDIO + "/ogg"; public static final String AUDIO_WAV = BASE_TYPE_AUDIO + "/wav"; public static final String AUDIO_MIDI = BASE_TYPE_AUDIO + "/midi"; + @UnstableApi public static final String AUDIO_IAMF = BASE_TYPE_AUDIO + "/iamf"; @UnstableApi public static final String AUDIO_EXOPLAYER_MIDI = BASE_TYPE_AUDIO + "/x-exoplayer-midi"; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java index 1caf10a314..6f1478d9b6 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java @@ -431,6 +431,12 @@ import java.util.List; @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_mdcv = 0x6d646376; + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_iamf = 0x69616d66; + + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_iacb = 0x69616362; + public final int type; public Atom(int type) { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java index 883f0c4ded..46fb1e36ce 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java @@ -1017,7 +1017,8 @@ import java.util.Objects; || childAtomType == Atom.TYPE_alaw || childAtomType == Atom.TYPE_ulaw || childAtomType == Atom.TYPE_Opus - || childAtomType == Atom.TYPE_fLaC) { + || childAtomType == Atom.TYPE_fLaC + || childAtomType == Atom.TYPE_iamf) { parseAudioSampleEntry( stsd, childAtomType, @@ -1775,6 +1776,8 @@ import java.util.Objects; mimeType = MimeTypes.AUDIO_FLAC; } else if (atomType == Atom.TYPE_mlpa) { mimeType = MimeTypes.AUDIO_TRUEHD; + } else if (atomType == Atom.TYPE_iamf) { + mimeType = MimeTypes.AUDIO_IAMF; } @Nullable List initializationData = null; @@ -1914,6 +1917,23 @@ import java.util.Objects; sampleRate = audioSpecificConfig.first; channelCount = audioSpecificConfig.second; initializationData = ImmutableList.of(initializationDataBytes); + } else if (childAtomType == Atom.TYPE_iacb) { + parent.setPosition( + childPosition + Atom.HEADER_SIZE + 1); // header and configuration version + int configObusSize = 0; + for (int i = 0; i <= 4; i++) { + int currentByte = parent.readUnsignedByte(); + configObusSize |= (currentByte & 0x7F) << (i * 7); + if ((currentByte & 0x80) == 0) { + break; + } + } + if (configObusSize < 0) { + throw ParserException.createForUnsupportedContainerFeature("OBU too large."); + } + byte[] initializationDataBytes = new byte[configObusSize]; + parent.readBytes(initializationDataBytes, /* offset= */ 0, configObusSize); + initializationData = ImmutableList.of(initializationDataBytes); } childPosition += childAtomSize; } diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorParameterizedTest.java index 5ffda621f9..95997d991f 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorParameterizedTest.java @@ -196,6 +196,15 @@ public final class FragmentedMp4ExtractorParameterizedTest { simulationConfig); } + @Test + public void sampleWithIamfTrack() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory( + /* closedCaptionFormats= */ ImmutableList.of(), subtitlesParsedDuringExtraction), + "media/mp4/sample_fragmented_iamf.mp4", + simulationConfig); + } + private static ExtractorFactory getExtractorFactory( List closedCaptionFormats, boolean subtitlesParsedDuringExtraction) { SubtitleParser.Factory subtitleParserFactory; diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java index bb781370f9..668d5a4595 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java @@ -208,6 +208,11 @@ public final class Mp4ExtractorParameterizedTest { assertExtractorBehavior("media/mp4/bt601.mov"); } + @Test + public void mp4sampleWithIamfTrack() throws Exception { + assertExtractorBehavior("media/mp4/sample_iamf.mp4"); + } + private void assertExtractorBehavior(String file) throws IOException { ExtractorAsserts.AssertionConfig.Builder assertionConfigBuilder = new ExtractorAsserts.AssertionConfig.Builder(); diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump new file mode 100644 index 0000000000..8b1fd6f6db --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.0.dump @@ -0,0 +1,520 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=776]] + getPosition(1) = [[timeUs=0, position=776]] + getPosition(250000) = [[timeUs=0, position=776]] + getPosition(500000) = [[timeUs=0, position=776]] +numberOfTracks = 1 +track 0: + total output bytes = 33375 + sample count = 125 + format 0: + id = 1 + sampleMimeType = audio/iamf + channelCount = 0 + sampleRate = 0 + language = und + initializationData: + data = length 119, hash 5B2D6971 + sample 0: + time = 0 + flags = 1 + data = length 267, hash 256F07 + sample 1: + time = 4000 + flags = 1 + data = length 267, hash AFD55288 + sample 2: + time = 8000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 3: + time = 12000 + flags = 1 + data = length 267, hash C0531D07 + sample 4: + time = 16000 + flags = 1 + data = length 267, hash 1577888 + sample 5: + time = 20000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 6: + time = 24000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 7: + time = 28000 + flags = 1 + data = length 267, hash 76F19E88 + sample 8: + time = 32000 + flags = 1 + data = length 267, hash 30995F07 + sample 9: + time = 36000 + flags = 1 + data = length 267, hash 7D567907 + sample 10: + time = 40000 + flags = 1 + data = length 267, hash 70A3C488 + sample 11: + time = 44000 + flags = 1 + data = length 267, hash 390DF07 + sample 12: + time = 48000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 13: + time = 52000 + flags = 1 + data = length 267, hash B4476F07 + sample 14: + time = 56000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 15: + time = 60000 + flags = 1 + data = length 267, hash B39D507 + sample 16: + time = 64000 + flags = 1 + data = length 267, hash 873EEF07 + sample 17: + time = 68000 + flags = 1 + data = length 267, hash D3DEE088 + sample 18: + time = 72000 + flags = 1 + data = length 267, hash D07F8307 + sample 19: + time = 76000 + flags = 1 + data = length 267, hash 5A366F07 + sample 20: + time = 80000 + flags = 1 + data = length 267, hash F9190688 + sample 21: + time = 84000 + flags = 1 + data = length 267, hash 69FD3107 + sample 22: + time = 88000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 23: + time = 92000 + flags = 1 + data = length 267, hash 226B2C88 + sample 24: + time = 96000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 25: + time = 100000 + flags = 1 + data = length 267, hash 256F07 + sample 26: + time = 104000 + flags = 1 + data = length 267, hash AFD55288 + sample 27: + time = 108000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 28: + time = 112000 + flags = 1 + data = length 267, hash C0531D07 + sample 29: + time = 116000 + flags = 1 + data = length 267, hash 1577888 + sample 30: + time = 120000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 31: + time = 124000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 32: + time = 128000 + flags = 1 + data = length 267, hash 76F19E88 + sample 33: + time = 132000 + flags = 1 + data = length 267, hash 30995F07 + sample 34: + time = 136000 + flags = 1 + data = length 267, hash 7D567907 + sample 35: + time = 140000 + flags = 1 + data = length 267, hash 70A3C488 + sample 36: + time = 144000 + flags = 1 + data = length 267, hash 390DF07 + sample 37: + time = 148000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 38: + time = 152000 + flags = 1 + data = length 267, hash B4476F07 + sample 39: + time = 156000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 40: + time = 160000 + flags = 1 + data = length 267, hash B39D507 + sample 41: + time = 164000 + flags = 1 + data = length 267, hash 873EEF07 + sample 42: + time = 168000 + flags = 1 + data = length 267, hash D3DEE088 + sample 43: + time = 172000 + flags = 1 + data = length 267, hash D07F8307 + sample 44: + time = 176000 + flags = 1 + data = length 267, hash 5A366F07 + sample 45: + time = 180000 + flags = 1 + data = length 267, hash F9190688 + sample 46: + time = 184000 + flags = 1 + data = length 267, hash 69FD3107 + sample 47: + time = 188000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 48: + time = 192000 + flags = 1 + data = length 267, hash 226B2C88 + sample 49: + time = 196000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 50: + time = 200000 + flags = 1 + data = length 267, hash 256F07 + sample 51: + time = 204000 + flags = 1 + data = length 267, hash AFD55288 + sample 52: + time = 208000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 53: + time = 212000 + flags = 1 + data = length 267, hash C0531D07 + sample 54: + time = 216000 + flags = 1 + data = length 267, hash 1577888 + sample 55: + time = 220000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 56: + time = 224000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 57: + time = 228000 + flags = 1 + data = length 267, hash 76F19E88 + sample 58: + time = 232000 + flags = 1 + data = length 267, hash 30995F07 + sample 59: + time = 236000 + flags = 1 + data = length 267, hash 7D567907 + sample 60: + time = 240000 + flags = 1 + data = length 267, hash 70A3C488 + sample 61: + time = 244000 + flags = 1 + data = length 267, hash 390DF07 + sample 62: + time = 248000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 63: + time = 252000 + flags = 1 + data = length 267, hash B4476F07 + sample 64: + time = 256000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 65: + time = 260000 + flags = 1 + data = length 267, hash B39D507 + sample 66: + time = 264000 + flags = 1 + data = length 267, hash 873EEF07 + sample 67: + time = 268000 + flags = 1 + data = length 267, hash D3DEE088 + sample 68: + time = 272000 + flags = 1 + data = length 267, hash D07F8307 + sample 69: + time = 276000 + flags = 1 + data = length 267, hash 5A366F07 + sample 70: + time = 280000 + flags = 1 + data = length 267, hash F9190688 + sample 71: + time = 284000 + flags = 1 + data = length 267, hash 69FD3107 + sample 72: + time = 288000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 73: + time = 292000 + flags = 1 + data = length 267, hash 226B2C88 + sample 74: + time = 296000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 75: + time = 300000 + flags = 1 + data = length 267, hash 256F07 + sample 76: + time = 304000 + flags = 1 + data = length 267, hash AFD55288 + sample 77: + time = 308000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 78: + time = 312000 + flags = 1 + data = length 267, hash C0531D07 + sample 79: + time = 316000 + flags = 1 + data = length 267, hash 1577888 + sample 80: + time = 320000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 81: + time = 324000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 82: + time = 328000 + flags = 1 + data = length 267, hash 76F19E88 + sample 83: + time = 332000 + flags = 1 + data = length 267, hash 30995F07 + sample 84: + time = 336000 + flags = 1 + data = length 267, hash 7D567907 + sample 85: + time = 340000 + flags = 1 + data = length 267, hash 70A3C488 + sample 86: + time = 344000 + flags = 1 + data = length 267, hash 390DF07 + sample 87: + time = 348000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 88: + time = 352000 + flags = 1 + data = length 267, hash B4476F07 + sample 89: + time = 356000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 90: + time = 360000 + flags = 1 + data = length 267, hash B39D507 + sample 91: + time = 364000 + flags = 1 + data = length 267, hash 873EEF07 + sample 92: + time = 368000 + flags = 1 + data = length 267, hash D3DEE088 + sample 93: + time = 372000 + flags = 1 + data = length 267, hash D07F8307 + sample 94: + time = 376000 + flags = 1 + data = length 267, hash 5A366F07 + sample 95: + time = 380000 + flags = 1 + data = length 267, hash F9190688 + sample 96: + time = 384000 + flags = 1 + data = length 267, hash 69FD3107 + sample 97: + time = 388000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 98: + time = 392000 + flags = 1 + data = length 267, hash 226B2C88 + sample 99: + time = 396000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 100: + time = 400000 + flags = 1 + data = length 267, hash 256F07 + sample 101: + time = 404000 + flags = 1 + data = length 267, hash AFD55288 + sample 102: + time = 408000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 103: + time = 412000 + flags = 1 + data = length 267, hash C0531D07 + sample 104: + time = 416000 + flags = 1 + data = length 267, hash 1577888 + sample 105: + time = 420000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 106: + time = 424000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 107: + time = 428000 + flags = 1 + data = length 267, hash 76F19E88 + sample 108: + time = 432000 + flags = 1 + data = length 267, hash 30995F07 + sample 109: + time = 436000 + flags = 1 + data = length 267, hash 7D567907 + sample 110: + time = 440000 + flags = 1 + data = length 267, hash 70A3C488 + sample 111: + time = 444000 + flags = 1 + data = length 267, hash 390DF07 + sample 112: + time = 448000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 113: + time = 452000 + flags = 1 + data = length 267, hash B4476F07 + sample 114: + time = 456000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 115: + time = 460000 + flags = 1 + data = length 267, hash B39D507 + sample 116: + time = 464000 + flags = 1 + data = length 267, hash 873EEF07 + sample 117: + time = 468000 + flags = 1 + data = length 267, hash D3DEE088 + sample 118: + time = 472000 + flags = 1 + data = length 267, hash D07F8307 + sample 119: + time = 476000 + flags = 1 + data = length 267, hash 5A366F07 + sample 120: + time = 480000 + flags = 1 + data = length 267, hash F9190688 + sample 121: + time = 484000 + flags = 1 + data = length 267, hash 69FD3107 + sample 122: + time = 488000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 123: + time = 492000 + flags = 1 + data = length 267, hash 226B2C88 + sample 124: + time = 496000 + flags = 1 + data = length 267, hash B7B2DF07 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump new file mode 100644 index 0000000000..995f8738c8 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.1.dump @@ -0,0 +1,356 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=776]] + getPosition(1) = [[timeUs=0, position=776]] + getPosition(250000) = [[timeUs=0, position=776]] + getPosition(500000) = [[timeUs=0, position=776]] +numberOfTracks = 1 +track 0: + total output bytes = 22428 + sample count = 84 + format 0: + id = 1 + sampleMimeType = audio/iamf + channelCount = 0 + sampleRate = 0 + language = und + initializationData: + data = length 119, hash 5B2D6971 + sample 0: + time = 164000 + flags = 1 + data = length 267, hash 873EEF07 + sample 1: + time = 168000 + flags = 1 + data = length 267, hash D3DEE088 + sample 2: + time = 172000 + flags = 1 + data = length 267, hash D07F8307 + sample 3: + time = 176000 + flags = 1 + data = length 267, hash 5A366F07 + sample 4: + time = 180000 + flags = 1 + data = length 267, hash F9190688 + sample 5: + time = 184000 + flags = 1 + data = length 267, hash 69FD3107 + sample 6: + time = 188000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 7: + time = 192000 + flags = 1 + data = length 267, hash 226B2C88 + sample 8: + time = 196000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 9: + time = 200000 + flags = 1 + data = length 267, hash 256F07 + sample 10: + time = 204000 + flags = 1 + data = length 267, hash AFD55288 + sample 11: + time = 208000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 12: + time = 212000 + flags = 1 + data = length 267, hash C0531D07 + sample 13: + time = 216000 + flags = 1 + data = length 267, hash 1577888 + sample 14: + time = 220000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 15: + time = 224000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 16: + time = 228000 + flags = 1 + data = length 267, hash 76F19E88 + sample 17: + time = 232000 + flags = 1 + data = length 267, hash 30995F07 + sample 18: + time = 236000 + flags = 1 + data = length 267, hash 7D567907 + sample 19: + time = 240000 + flags = 1 + data = length 267, hash 70A3C488 + sample 20: + time = 244000 + flags = 1 + data = length 267, hash 390DF07 + sample 21: + time = 248000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 22: + time = 252000 + flags = 1 + data = length 267, hash B4476F07 + sample 23: + time = 256000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 24: + time = 260000 + flags = 1 + data = length 267, hash B39D507 + sample 25: + time = 264000 + flags = 1 + data = length 267, hash 873EEF07 + sample 26: + time = 268000 + flags = 1 + data = length 267, hash D3DEE088 + sample 27: + time = 272000 + flags = 1 + data = length 267, hash D07F8307 + sample 28: + time = 276000 + flags = 1 + data = length 267, hash 5A366F07 + sample 29: + time = 280000 + flags = 1 + data = length 267, hash F9190688 + sample 30: + time = 284000 + flags = 1 + data = length 267, hash 69FD3107 + sample 31: + time = 288000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 32: + time = 292000 + flags = 1 + data = length 267, hash 226B2C88 + sample 33: + time = 296000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 34: + time = 300000 + flags = 1 + data = length 267, hash 256F07 + sample 35: + time = 304000 + flags = 1 + data = length 267, hash AFD55288 + sample 36: + time = 308000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 37: + time = 312000 + flags = 1 + data = length 267, hash C0531D07 + sample 38: + time = 316000 + flags = 1 + data = length 267, hash 1577888 + sample 39: + time = 320000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 40: + time = 324000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 41: + time = 328000 + flags = 1 + data = length 267, hash 76F19E88 + sample 42: + time = 332000 + flags = 1 + data = length 267, hash 30995F07 + sample 43: + time = 336000 + flags = 1 + data = length 267, hash 7D567907 + sample 44: + time = 340000 + flags = 1 + data = length 267, hash 70A3C488 + sample 45: + time = 344000 + flags = 1 + data = length 267, hash 390DF07 + sample 46: + time = 348000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 47: + time = 352000 + flags = 1 + data = length 267, hash B4476F07 + sample 48: + time = 356000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 49: + time = 360000 + flags = 1 + data = length 267, hash B39D507 + sample 50: + time = 364000 + flags = 1 + data = length 267, hash 873EEF07 + sample 51: + time = 368000 + flags = 1 + data = length 267, hash D3DEE088 + sample 52: + time = 372000 + flags = 1 + data = length 267, hash D07F8307 + sample 53: + time = 376000 + flags = 1 + data = length 267, hash 5A366F07 + sample 54: + time = 380000 + flags = 1 + data = length 267, hash F9190688 + sample 55: + time = 384000 + flags = 1 + data = length 267, hash 69FD3107 + sample 56: + time = 388000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 57: + time = 392000 + flags = 1 + data = length 267, hash 226B2C88 + sample 58: + time = 396000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 59: + time = 400000 + flags = 1 + data = length 267, hash 256F07 + sample 60: + time = 404000 + flags = 1 + data = length 267, hash AFD55288 + sample 61: + time = 408000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 62: + time = 412000 + flags = 1 + data = length 267, hash C0531D07 + sample 63: + time = 416000 + flags = 1 + data = length 267, hash 1577888 + sample 64: + time = 420000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 65: + time = 424000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 66: + time = 428000 + flags = 1 + data = length 267, hash 76F19E88 + sample 67: + time = 432000 + flags = 1 + data = length 267, hash 30995F07 + sample 68: + time = 436000 + flags = 1 + data = length 267, hash 7D567907 + sample 69: + time = 440000 + flags = 1 + data = length 267, hash 70A3C488 + sample 70: + time = 444000 + flags = 1 + data = length 267, hash 390DF07 + sample 71: + time = 448000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 72: + time = 452000 + flags = 1 + data = length 267, hash B4476F07 + sample 73: + time = 456000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 74: + time = 460000 + flags = 1 + data = length 267, hash B39D507 + sample 75: + time = 464000 + flags = 1 + data = length 267, hash 873EEF07 + sample 76: + time = 468000 + flags = 1 + data = length 267, hash D3DEE088 + sample 77: + time = 472000 + flags = 1 + data = length 267, hash D07F8307 + sample 78: + time = 476000 + flags = 1 + data = length 267, hash 5A366F07 + sample 79: + time = 480000 + flags = 1 + data = length 267, hash F9190688 + sample 80: + time = 484000 + flags = 1 + data = length 267, hash 69FD3107 + sample 81: + time = 488000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 82: + time = 492000 + flags = 1 + data = length 267, hash 226B2C88 + sample 83: + time = 496000 + flags = 1 + data = length 267, hash B7B2DF07 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump new file mode 100644 index 0000000000..ad7bcabc3d --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.2.dump @@ -0,0 +1,188 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=776]] + getPosition(1) = [[timeUs=0, position=776]] + getPosition(250000) = [[timeUs=0, position=776]] + getPosition(500000) = [[timeUs=0, position=776]] +numberOfTracks = 1 +track 0: + total output bytes = 11214 + sample count = 42 + format 0: + id = 1 + sampleMimeType = audio/iamf + channelCount = 0 + sampleRate = 0 + language = und + initializationData: + data = length 119, hash 5B2D6971 + sample 0: + time = 332000 + flags = 1 + data = length 267, hash 30995F07 + sample 1: + time = 336000 + flags = 1 + data = length 267, hash 7D567907 + sample 2: + time = 340000 + flags = 1 + data = length 267, hash 70A3C488 + sample 3: + time = 344000 + flags = 1 + data = length 267, hash 390DF07 + sample 4: + time = 348000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 5: + time = 352000 + flags = 1 + data = length 267, hash B4476F07 + sample 6: + time = 356000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 7: + time = 360000 + flags = 1 + data = length 267, hash B39D507 + sample 8: + time = 364000 + flags = 1 + data = length 267, hash 873EEF07 + sample 9: + time = 368000 + flags = 1 + data = length 267, hash D3DEE088 + sample 10: + time = 372000 + flags = 1 + data = length 267, hash D07F8307 + sample 11: + time = 376000 + flags = 1 + data = length 267, hash 5A366F07 + sample 12: + time = 380000 + flags = 1 + data = length 267, hash F9190688 + sample 13: + time = 384000 + flags = 1 + data = length 267, hash 69FD3107 + sample 14: + time = 388000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 15: + time = 392000 + flags = 1 + data = length 267, hash 226B2C88 + sample 16: + time = 396000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 17: + time = 400000 + flags = 1 + data = length 267, hash 256F07 + sample 18: + time = 404000 + flags = 1 + data = length 267, hash AFD55288 + sample 19: + time = 408000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 20: + time = 412000 + flags = 1 + data = length 267, hash C0531D07 + sample 21: + time = 416000 + flags = 1 + data = length 267, hash 1577888 + sample 22: + time = 420000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 23: + time = 424000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 24: + time = 428000 + flags = 1 + data = length 267, hash 76F19E88 + sample 25: + time = 432000 + flags = 1 + data = length 267, hash 30995F07 + sample 26: + time = 436000 + flags = 1 + data = length 267, hash 7D567907 + sample 27: + time = 440000 + flags = 1 + data = length 267, hash 70A3C488 + sample 28: + time = 444000 + flags = 1 + data = length 267, hash 390DF07 + sample 29: + time = 448000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 30: + time = 452000 + flags = 1 + data = length 267, hash B4476F07 + sample 31: + time = 456000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 32: + time = 460000 + flags = 1 + data = length 267, hash B39D507 + sample 33: + time = 464000 + flags = 1 + data = length 267, hash 873EEF07 + sample 34: + time = 468000 + flags = 1 + data = length 267, hash D3DEE088 + sample 35: + time = 472000 + flags = 1 + data = length 267, hash D07F8307 + sample 36: + time = 476000 + flags = 1 + data = length 267, hash 5A366F07 + sample 37: + time = 480000 + flags = 1 + data = length 267, hash F9190688 + sample 38: + time = 484000 + flags = 1 + data = length 267, hash 69FD3107 + sample 39: + time = 488000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 40: + time = 492000 + flags = 1 + data = length 267, hash 226B2C88 + sample 41: + time = 496000 + flags = 1 + data = length 267, hash B7B2DF07 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump new file mode 100644 index 0000000000..4874194301 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.3.dump @@ -0,0 +1,24 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=776]] + getPosition(1) = [[timeUs=0, position=776]] + getPosition(250000) = [[timeUs=0, position=776]] + getPosition(500000) = [[timeUs=0, position=776]] +numberOfTracks = 1 +track 0: + total output bytes = 267 + sample count = 1 + format 0: + id = 1 + sampleMimeType = audio/iamf + channelCount = 0 + sampleRate = 0 + language = und + initializationData: + data = length 119, hash 5B2D6971 + sample 0: + time = 496000 + flags = 1 + data = length 267, hash B7B2DF07 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump new file mode 100644 index 0000000000..8b1fd6f6db --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_iamf.mp4.unknown_length.dump @@ -0,0 +1,520 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=776]] + getPosition(1) = [[timeUs=0, position=776]] + getPosition(250000) = [[timeUs=0, position=776]] + getPosition(500000) = [[timeUs=0, position=776]] +numberOfTracks = 1 +track 0: + total output bytes = 33375 + sample count = 125 + format 0: + id = 1 + sampleMimeType = audio/iamf + channelCount = 0 + sampleRate = 0 + language = und + initializationData: + data = length 119, hash 5B2D6971 + sample 0: + time = 0 + flags = 1 + data = length 267, hash 256F07 + sample 1: + time = 4000 + flags = 1 + data = length 267, hash AFD55288 + sample 2: + time = 8000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 3: + time = 12000 + flags = 1 + data = length 267, hash C0531D07 + sample 4: + time = 16000 + flags = 1 + data = length 267, hash 1577888 + sample 5: + time = 20000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 6: + time = 24000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 7: + time = 28000 + flags = 1 + data = length 267, hash 76F19E88 + sample 8: + time = 32000 + flags = 1 + data = length 267, hash 30995F07 + sample 9: + time = 36000 + flags = 1 + data = length 267, hash 7D567907 + sample 10: + time = 40000 + flags = 1 + data = length 267, hash 70A3C488 + sample 11: + time = 44000 + flags = 1 + data = length 267, hash 390DF07 + sample 12: + time = 48000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 13: + time = 52000 + flags = 1 + data = length 267, hash B4476F07 + sample 14: + time = 56000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 15: + time = 60000 + flags = 1 + data = length 267, hash B39D507 + sample 16: + time = 64000 + flags = 1 + data = length 267, hash 873EEF07 + sample 17: + time = 68000 + flags = 1 + data = length 267, hash D3DEE088 + sample 18: + time = 72000 + flags = 1 + data = length 267, hash D07F8307 + sample 19: + time = 76000 + flags = 1 + data = length 267, hash 5A366F07 + sample 20: + time = 80000 + flags = 1 + data = length 267, hash F9190688 + sample 21: + time = 84000 + flags = 1 + data = length 267, hash 69FD3107 + sample 22: + time = 88000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 23: + time = 92000 + flags = 1 + data = length 267, hash 226B2C88 + sample 24: + time = 96000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 25: + time = 100000 + flags = 1 + data = length 267, hash 256F07 + sample 26: + time = 104000 + flags = 1 + data = length 267, hash AFD55288 + sample 27: + time = 108000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 28: + time = 112000 + flags = 1 + data = length 267, hash C0531D07 + sample 29: + time = 116000 + flags = 1 + data = length 267, hash 1577888 + sample 30: + time = 120000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 31: + time = 124000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 32: + time = 128000 + flags = 1 + data = length 267, hash 76F19E88 + sample 33: + time = 132000 + flags = 1 + data = length 267, hash 30995F07 + sample 34: + time = 136000 + flags = 1 + data = length 267, hash 7D567907 + sample 35: + time = 140000 + flags = 1 + data = length 267, hash 70A3C488 + sample 36: + time = 144000 + flags = 1 + data = length 267, hash 390DF07 + sample 37: + time = 148000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 38: + time = 152000 + flags = 1 + data = length 267, hash B4476F07 + sample 39: + time = 156000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 40: + time = 160000 + flags = 1 + data = length 267, hash B39D507 + sample 41: + time = 164000 + flags = 1 + data = length 267, hash 873EEF07 + sample 42: + time = 168000 + flags = 1 + data = length 267, hash D3DEE088 + sample 43: + time = 172000 + flags = 1 + data = length 267, hash D07F8307 + sample 44: + time = 176000 + flags = 1 + data = length 267, hash 5A366F07 + sample 45: + time = 180000 + flags = 1 + data = length 267, hash F9190688 + sample 46: + time = 184000 + flags = 1 + data = length 267, hash 69FD3107 + sample 47: + time = 188000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 48: + time = 192000 + flags = 1 + data = length 267, hash 226B2C88 + sample 49: + time = 196000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 50: + time = 200000 + flags = 1 + data = length 267, hash 256F07 + sample 51: + time = 204000 + flags = 1 + data = length 267, hash AFD55288 + sample 52: + time = 208000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 53: + time = 212000 + flags = 1 + data = length 267, hash C0531D07 + sample 54: + time = 216000 + flags = 1 + data = length 267, hash 1577888 + sample 55: + time = 220000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 56: + time = 224000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 57: + time = 228000 + flags = 1 + data = length 267, hash 76F19E88 + sample 58: + time = 232000 + flags = 1 + data = length 267, hash 30995F07 + sample 59: + time = 236000 + flags = 1 + data = length 267, hash 7D567907 + sample 60: + time = 240000 + flags = 1 + data = length 267, hash 70A3C488 + sample 61: + time = 244000 + flags = 1 + data = length 267, hash 390DF07 + sample 62: + time = 248000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 63: + time = 252000 + flags = 1 + data = length 267, hash B4476F07 + sample 64: + time = 256000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 65: + time = 260000 + flags = 1 + data = length 267, hash B39D507 + sample 66: + time = 264000 + flags = 1 + data = length 267, hash 873EEF07 + sample 67: + time = 268000 + flags = 1 + data = length 267, hash D3DEE088 + sample 68: + time = 272000 + flags = 1 + data = length 267, hash D07F8307 + sample 69: + time = 276000 + flags = 1 + data = length 267, hash 5A366F07 + sample 70: + time = 280000 + flags = 1 + data = length 267, hash F9190688 + sample 71: + time = 284000 + flags = 1 + data = length 267, hash 69FD3107 + sample 72: + time = 288000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 73: + time = 292000 + flags = 1 + data = length 267, hash 226B2C88 + sample 74: + time = 296000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 75: + time = 300000 + flags = 1 + data = length 267, hash 256F07 + sample 76: + time = 304000 + flags = 1 + data = length 267, hash AFD55288 + sample 77: + time = 308000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 78: + time = 312000 + flags = 1 + data = length 267, hash C0531D07 + sample 79: + time = 316000 + flags = 1 + data = length 267, hash 1577888 + sample 80: + time = 320000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 81: + time = 324000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 82: + time = 328000 + flags = 1 + data = length 267, hash 76F19E88 + sample 83: + time = 332000 + flags = 1 + data = length 267, hash 30995F07 + sample 84: + time = 336000 + flags = 1 + data = length 267, hash 7D567907 + sample 85: + time = 340000 + flags = 1 + data = length 267, hash 70A3C488 + sample 86: + time = 344000 + flags = 1 + data = length 267, hash 390DF07 + sample 87: + time = 348000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 88: + time = 352000 + flags = 1 + data = length 267, hash B4476F07 + sample 89: + time = 356000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 90: + time = 360000 + flags = 1 + data = length 267, hash B39D507 + sample 91: + time = 364000 + flags = 1 + data = length 267, hash 873EEF07 + sample 92: + time = 368000 + flags = 1 + data = length 267, hash D3DEE088 + sample 93: + time = 372000 + flags = 1 + data = length 267, hash D07F8307 + sample 94: + time = 376000 + flags = 1 + data = length 267, hash 5A366F07 + sample 95: + time = 380000 + flags = 1 + data = length 267, hash F9190688 + sample 96: + time = 384000 + flags = 1 + data = length 267, hash 69FD3107 + sample 97: + time = 388000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 98: + time = 392000 + flags = 1 + data = length 267, hash 226B2C88 + sample 99: + time = 396000 + flags = 1 + data = length 267, hash B7B2DF07 + sample 100: + time = 400000 + flags = 1 + data = length 267, hash 256F07 + sample 101: + time = 404000 + flags = 1 + data = length 267, hash AFD55288 + sample 102: + time = 408000 + flags = 1 + data = length 267, hash 8AAA5F07 + sample 103: + time = 412000 + flags = 1 + data = length 267, hash C0531D07 + sample 104: + time = 416000 + flags = 1 + data = length 267, hash 1577888 + sample 105: + time = 420000 + flags = 1 + data = length 267, hash 5DA1DF07 + sample 106: + time = 424000 + flags = 1 + data = length 267, hash F4B8CB07 + sample 107: + time = 428000 + flags = 1 + data = length 267, hash 76F19E88 + sample 108: + time = 432000 + flags = 1 + data = length 267, hash 30995F07 + sample 109: + time = 436000 + flags = 1 + data = length 267, hash 7D567907 + sample 110: + time = 440000 + flags = 1 + data = length 267, hash 70A3C488 + sample 111: + time = 444000 + flags = 1 + data = length 267, hash 390DF07 + sample 112: + time = 448000 + flags = 1 + data = length 267, hash 3A2C2707 + sample 113: + time = 452000 + flags = 1 + data = length 267, hash B4476F07 + sample 114: + time = 456000 + flags = 1 + data = length 267, hash 52BCBA88 + sample 115: + time = 460000 + flags = 1 + data = length 267, hash B39D507 + sample 116: + time = 464000 + flags = 1 + data = length 267, hash 873EEF07 + sample 117: + time = 468000 + flags = 1 + data = length 267, hash D3DEE088 + sample 118: + time = 472000 + flags = 1 + data = length 267, hash D07F8307 + sample 119: + time = 476000 + flags = 1 + data = length 267, hash 5A366F07 + sample 120: + time = 480000 + flags = 1 + data = length 267, hash F9190688 + sample 121: + time = 484000 + flags = 1 + data = length 267, hash 69FD3107 + sample 122: + time = 488000 + flags = 1 + data = length 267, hash 2D2DEF07 + sample 123: + time = 492000 + flags = 1 + data = length 267, hash 226B2C88 + sample 124: + time = 496000 + flags = 1 + data = length 267, hash B7B2DF07 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump new file mode 100644 index 0000000000..46cc65b5e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.0.dump @@ -0,0 +1,274 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 32189 + sample count = 63 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 0 + flags = 1 + data = length 515, hash 62FEAC14 + sample 1: + time = 8000 + flags = 1 + data = length 515, hash 80016693 + sample 2: + time = 16000 + flags = 1 + data = length 515, hash 664B2214 + sample 3: + time = 24000 + flags = 1 + data = length 515, hash FB2E5414 + sample 4: + time = 32000 + flags = 1 + data = length 515, hash 2F3C293 + sample 5: + time = 40000 + flags = 1 + data = length 515, hash 5A066E14 + sample 6: + time = 48000 + flags = 1 + data = length 515, hash 5A778093 + sample 7: + time = 56000 + flags = 1 + data = length 515, hash 39085A14 + sample 8: + time = 64000 + flags = 1 + data = length 515, hash DE21BA14 + sample 9: + time = 72000 + flags = 1 + data = length 515, hash 7339DC93 + sample 10: + time = 80000 + flags = 1 + data = length 515, hash 1CA80214 + sample 11: + time = 88000 + flags = 1 + data = length 515, hash F29D0614 + sample 12: + time = 96000 + flags = 1 + data = length 515, hash DCDC3893 + sample 13: + time = 104000 + flags = 1 + data = length 515, hash D2917C14 + sample 14: + time = 112000 + flags = 1 + data = length 515, hash 62EE8014 + sample 15: + time = 120000 + flags = 1 + data = length 515, hash 975E9493 + sample 16: + time = 128000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 17: + time = 136000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 18: + time = 144000 + flags = 1 + data = length 515, hash A2C0F093 + sample 19: + time = 152000 + flags = 1 + data = length 515, hash 7A081414 + sample 20: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 21: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 22: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 23: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 24: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 25: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 26: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 27: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 28: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 29: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 30: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 31: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 32: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 33: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 34: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 35: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 36: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 37: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 38: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 39: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 40: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 41: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 42: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 43: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 44: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 45: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 46: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 47: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 48: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 49: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 50: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 51: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 52: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 53: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 54: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 55: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 56: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 57: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 58: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 59: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 60: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 61: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 62: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump new file mode 100644 index 0000000000..5479565496 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.1.dump @@ -0,0 +1,194 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 21889 + sample count = 43 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 1: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 2: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 3: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 4: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 5: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 6: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 7: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 8: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 9: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 10: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 11: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 12: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 13: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 14: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 15: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 16: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 17: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 18: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 19: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 20: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 21: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 22: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 23: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 24: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 25: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 26: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 27: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 28: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 29: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 30: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 31: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 32: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 33: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 34: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 35: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 36: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 37: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 38: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 39: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 40: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 41: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 42: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump new file mode 100644 index 0000000000..5c0e168ddb --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.2.dump @@ -0,0 +1,110 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 11074 + sample count = 22 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 1: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 2: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 3: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 4: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 5: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 6: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 7: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 8: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 9: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 10: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 11: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 12: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 13: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 14: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 15: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 16: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 17: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 18: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 19: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 20: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 21: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump new file mode 100644 index 0000000000..f22af5e847 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.3.dump @@ -0,0 +1,26 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 259 + sample count = 1 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 0000000000..46cc65b5e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,274 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 32189 + sample count = 63 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 0 + flags = 1 + data = length 515, hash 62FEAC14 + sample 1: + time = 8000 + flags = 1 + data = length 515, hash 80016693 + sample 2: + time = 16000 + flags = 1 + data = length 515, hash 664B2214 + sample 3: + time = 24000 + flags = 1 + data = length 515, hash FB2E5414 + sample 4: + time = 32000 + flags = 1 + data = length 515, hash 2F3C293 + sample 5: + time = 40000 + flags = 1 + data = length 515, hash 5A066E14 + sample 6: + time = 48000 + flags = 1 + data = length 515, hash 5A778093 + sample 7: + time = 56000 + flags = 1 + data = length 515, hash 39085A14 + sample 8: + time = 64000 + flags = 1 + data = length 515, hash DE21BA14 + sample 9: + time = 72000 + flags = 1 + data = length 515, hash 7339DC93 + sample 10: + time = 80000 + flags = 1 + data = length 515, hash 1CA80214 + sample 11: + time = 88000 + flags = 1 + data = length 515, hash F29D0614 + sample 12: + time = 96000 + flags = 1 + data = length 515, hash DCDC3893 + sample 13: + time = 104000 + flags = 1 + data = length 515, hash D2917C14 + sample 14: + time = 112000 + flags = 1 + data = length 515, hash 62EE8014 + sample 15: + time = 120000 + flags = 1 + data = length 515, hash 975E9493 + sample 16: + time = 128000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 17: + time = 136000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 18: + time = 144000 + flags = 1 + data = length 515, hash A2C0F093 + sample 19: + time = 152000 + flags = 1 + data = length 515, hash 7A081414 + sample 20: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 21: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 22: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 23: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 24: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 25: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 26: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 27: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 28: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 29: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 30: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 31: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 32: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 33: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 34: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 35: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 36: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 37: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 38: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 39: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 40: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 41: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 42: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 43: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 44: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 45: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 46: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 47: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 48: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 49: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 50: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 51: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 52: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 53: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 54: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 55: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 56: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 57: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 58: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 59: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 60: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 61: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 62: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 0000000000..5479565496 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,194 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 21889 + sample count = 43 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 1: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 2: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 3: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 4: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 5: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 6: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 7: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 8: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 9: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 10: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 11: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 12: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 13: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 14: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 15: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 16: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 17: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 18: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 19: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 20: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 21: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 22: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 23: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 24: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 25: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 26: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 27: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 28: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 29: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 30: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 31: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 32: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 33: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 34: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 35: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 36: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 37: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 38: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 39: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 40: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 41: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 42: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 0000000000..5c0e168ddb --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,110 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 11074 + sample count = 22 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 1: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 2: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 3: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 4: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 5: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 6: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 7: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 8: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 9: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 10: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 11: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 12: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 13: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 14: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 15: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 16: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 17: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 18: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 19: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 20: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 21: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 0000000000..f22af5e847 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,26 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 259 + sample count = 1 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 0000000000..46cc65b5e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,274 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 32189 + sample count = 63 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 0 + flags = 1 + data = length 515, hash 62FEAC14 + sample 1: + time = 8000 + flags = 1 + data = length 515, hash 80016693 + sample 2: + time = 16000 + flags = 1 + data = length 515, hash 664B2214 + sample 3: + time = 24000 + flags = 1 + data = length 515, hash FB2E5414 + sample 4: + time = 32000 + flags = 1 + data = length 515, hash 2F3C293 + sample 5: + time = 40000 + flags = 1 + data = length 515, hash 5A066E14 + sample 6: + time = 48000 + flags = 1 + data = length 515, hash 5A778093 + sample 7: + time = 56000 + flags = 1 + data = length 515, hash 39085A14 + sample 8: + time = 64000 + flags = 1 + data = length 515, hash DE21BA14 + sample 9: + time = 72000 + flags = 1 + data = length 515, hash 7339DC93 + sample 10: + time = 80000 + flags = 1 + data = length 515, hash 1CA80214 + sample 11: + time = 88000 + flags = 1 + data = length 515, hash F29D0614 + sample 12: + time = 96000 + flags = 1 + data = length 515, hash DCDC3893 + sample 13: + time = 104000 + flags = 1 + data = length 515, hash D2917C14 + sample 14: + time = 112000 + flags = 1 + data = length 515, hash 62EE8014 + sample 15: + time = 120000 + flags = 1 + data = length 515, hash 975E9493 + sample 16: + time = 128000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 17: + time = 136000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 18: + time = 144000 + flags = 1 + data = length 515, hash A2C0F093 + sample 19: + time = 152000 + flags = 1 + data = length 515, hash 7A081414 + sample 20: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 21: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 22: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 23: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 24: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 25: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 26: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 27: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 28: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 29: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 30: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 31: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 32: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 33: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 34: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 35: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 36: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 37: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 38: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 39: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 40: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 41: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 42: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 43: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 44: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 45: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 46: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 47: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 48: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 49: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 50: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 51: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 52: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 53: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 54: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 55: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 56: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 57: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 58: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 59: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 60: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 61: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 62: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump new file mode 100644 index 0000000000..46cc65b5e1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_iamf.mp4.unknown_length.dump @@ -0,0 +1,274 @@ +seekMap: + isSeekable = true + duration = 500000 + getPosition(0) = [[timeUs=0, position=40]] + getPosition(1) = [[timeUs=1, position=40]] + getPosition(250000) = [[timeUs=250000, position=16005]] + getPosition(500000) = [[timeUs=500000, position=31970]] +numberOfTracks = 1 +track 0: + total output bytes = 32189 + sample count = 63 + format 0: + id = 1 + sampleMimeType = audio/iamf + maxInputSize = 545 + channelCount = 0 + sampleRate = 0 + language = und + metadata = entries=[Mp4Timestamp: creation time=3763584000, modification time=3763584000, timescale=16000] + initializationData: + data = length 120, hash F54A6325 + sample 0: + time = 0 + flags = 1 + data = length 515, hash 62FEAC14 + sample 1: + time = 8000 + flags = 1 + data = length 515, hash 80016693 + sample 2: + time = 16000 + flags = 1 + data = length 515, hash 664B2214 + sample 3: + time = 24000 + flags = 1 + data = length 515, hash FB2E5414 + sample 4: + time = 32000 + flags = 1 + data = length 515, hash 2F3C293 + sample 5: + time = 40000 + flags = 1 + data = length 515, hash 5A066E14 + sample 6: + time = 48000 + flags = 1 + data = length 515, hash 5A778093 + sample 7: + time = 56000 + flags = 1 + data = length 515, hash 39085A14 + sample 8: + time = 64000 + flags = 1 + data = length 515, hash DE21BA14 + sample 9: + time = 72000 + flags = 1 + data = length 515, hash 7339DC93 + sample 10: + time = 80000 + flags = 1 + data = length 515, hash 1CA80214 + sample 11: + time = 88000 + flags = 1 + data = length 515, hash F29D0614 + sample 12: + time = 96000 + flags = 1 + data = length 515, hash DCDC3893 + sample 13: + time = 104000 + flags = 1 + data = length 515, hash D2917C14 + sample 14: + time = 112000 + flags = 1 + data = length 515, hash 62EE8014 + sample 15: + time = 120000 + flags = 1 + data = length 515, hash 975E9493 + sample 16: + time = 128000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 17: + time = 136000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 18: + time = 144000 + flags = 1 + data = length 515, hash A2C0F093 + sample 19: + time = 152000 + flags = 1 + data = length 515, hash 7A081414 + sample 20: + time = 160000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 21: + time = 168000 + flags = 1 + data = length 515, hash EEB02E14 + sample 22: + time = 176000 + flags = 1 + data = length 515, hash E6536014 + sample 23: + time = 184000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 24: + time = 192000 + flags = 1 + data = length 515, hash 2EFD614 + sample 25: + time = 200000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 26: + time = 208000 + flags = 1 + data = length 515, hash 80016693 + sample 27: + time = 216000 + flags = 1 + data = length 515, hash 664B2214 + sample 28: + time = 224000 + flags = 1 + data = length 515, hash FB2E5414 + sample 29: + time = 232000 + flags = 1 + data = length 515, hash 2F3C293 + sample 30: + time = 240000 + flags = 1 + data = length 515, hash 5A066E14 + sample 31: + time = 248000 + flags = 1 + data = length 515, hash 5A778093 + sample 32: + time = 256000 + flags = 1 + data = length 515, hash 39085A14 + sample 33: + time = 264000 + flags = 1 + data = length 515, hash DE21BA14 + sample 34: + time = 272000 + flags = 1 + data = length 515, hash 7339DC93 + sample 35: + time = 280000 + flags = 1 + data = length 515, hash 1CA80214 + sample 36: + time = 288000 + flags = 1 + data = length 515, hash F29D0614 + sample 37: + time = 296000 + flags = 1 + data = length 515, hash DCDC3893 + sample 38: + time = 304000 + flags = 1 + data = length 515, hash D2917C14 + sample 39: + time = 312000 + flags = 1 + data = length 515, hash 62EE8014 + sample 40: + time = 320000 + flags = 1 + data = length 515, hash 975E9493 + sample 41: + time = 328000 + flags = 1 + data = length 515, hash 1E1CC814 + sample 42: + time = 336000 + flags = 1 + data = length 515, hash 6BBE2814 + sample 43: + time = 344000 + flags = 1 + data = length 515, hash A2C0F093 + sample 44: + time = 352000 + flags = 1 + data = length 515, hash 7A081414 + sample 45: + time = 360000 + flags = 1 + data = length 515, hash ECBCAE93 + sample 46: + time = 368000 + flags = 1 + data = length 515, hash EEB02E14 + sample 47: + time = 376000 + flags = 1 + data = length 515, hash E6536014 + sample 48: + time = 384000 + flags = 1 + data = length 515, hash CDEF0A93 + sample 49: + time = 392000 + flags = 1 + data = length 515, hash 2EFD614 + sample 50: + time = 400000 + flags = 1 + data = length 515, hash 62FEAC14 + sample 51: + time = 408000 + flags = 1 + data = length 515, hash 80016693 + sample 52: + time = 416000 + flags = 1 + data = length 515, hash 664B2214 + sample 53: + time = 424000 + flags = 1 + data = length 515, hash FB2E5414 + sample 54: + time = 432000 + flags = 1 + data = length 515, hash 2F3C293 + sample 55: + time = 440000 + flags = 1 + data = length 515, hash 5A066E14 + sample 56: + time = 448000 + flags = 1 + data = length 515, hash 5A778093 + sample 57: + time = 456000 + flags = 1 + data = length 515, hash 39085A14 + sample 58: + time = 464000 + flags = 1 + data = length 515, hash DE21BA14 + sample 59: + time = 472000 + flags = 1 + data = length 515, hash 7339DC93 + sample 60: + time = 480000 + flags = 1 + data = length 515, hash 1CA80214 + sample 61: + time = 488000 + flags = 1 + data = length 515, hash F29D0614 + sample 62: + time = 496000 + flags = 536870913 + data = length 259, hash D575A0D1 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_fragmented_iamf.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_fragmented_iamf.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..4354feac4b5d9057cca3c2851523dd99739cac05 GIT binary patch literal 34259 zcmeI2`EyfM6vt1BA__`WR8*F*sHiLj5fKIJiYS7LJ77rjQpnIWo#Yk48D=Vffq#Iz zBA{heP*lLB3W98kvZ>(0s(|b}$L~wc;leO;f9Q1DUeB8*@7??EySeXk&Uf;1z9pj8 zCH{nRFP0rc*pk_FpJXgmLR3(lN~g!6t28xkj2E2S>}{$HUPJ@%YF|Vl3jR)SXEe}# zR=eo*$a5VPptDPATw*--5kHgL2jhZS&YG#9i=T;&MgItYY;J8$POmLL7V9&%+yrOM zk{_8LcE$x1s!n;y7|umf-nsAp$?Dvd(J@|WCO=0uT~U@l4)%kF4UIgKz(kRfWN9K& zo=JNZ@q`yCo)8(BPLD>{pt5-P$i10F%tv>+tY4(CcaNTZd-N*obxU_l5bB>wmLVL} z*{j*N@iK{^9c;l3wW!FHMrw{jp{!qAisQLiKbs3#O+QVp2`O4vVKi3ZCDYMFX(E*<^P`3MG_P`EW&S->NlS+>pN-yd*7vj6=Qp&o z@q7b&wBu=`-3sSlG}^&oIGd`8)qnk6vq>+=r(na%gS?du?McgmJbt;R%R{~gV8f{r znIix^7`YboNBp3_fcoJ$=nq~+*fqyK*us8^=hqzO-dp*ZTrLFTCgO#_Od6f?Vt(tU zUQrP`3M&gCon#{xLU4D+H@Ut|PpP^~| zG`+`9(fj-)Rq+!vorlp3ew=3VV>F8&rP(}`=I{{ufFGd`c`(i8hiM)^L?7`W`j{W2 z`8<$5;RonbzMnqh`)C2*OAGlPTEutL=UhZz@LlvJ51_BOKUMRc^fli>-*7)#%(v4L z?n~eDZM2m8&@#T2zT@7soNu8O+>2InPg=!=w3>U+_uQR+;BK^ryV8$*GyTLj(OSNd z)^QhF&o|HpzMeMnb!4FUnLE=j+=+hWjic8>`xd)%}fC{)N@<#Hx2-_1ke5+i*8q zaaUW|K+y&_+ZH$74maN(5F&ul0Z=*uPA5R>Oh1F&Mljp}mg~WE9oVh~KYE9AhJ z$b~PE6Q3hD79mF#B3Bk5XFfyje2N_U1i3UHIrTAe>m%gYJmlJ3@yTR;Yi`u;go-vTmF)c4P! z`WBFZqM_Fl>RLbsiiTcKsA~ZkC>nY_p{@mFplIv`x!MZIK+)I>az;PmXM%OOGr?tB_t@+5)u?@2?+|dgan0JLV`jqAwi**kf2aYNKmLH zBq-Dp5)^6)2@17@1ch2cfVD?+bHO{UeUIdu?-ZiSF~+qYy*Ys6>VD?+dyH{lIsF8P}sEOx_}H6HZ8d>AOnR> zORfvZK%th9JYuOOBq-Dp5)^6)2@17@1ch2cf zDGtdJJSb&&NEYL;EW*RG5Rb?L9Fh5WROaC^nTy9|4xW%wJSnsBl$79UnT4Y=6USr* zo{{NzR;J;&OvQ6D1t(-Oo|j2@L5guwCgMdY!b>s%FG~QgNFiR80=y>U@w$w|8!{Ge z${4&Qqw%(k!aFh&@5%_gC&Tf+48sR96d%eEd?bT$O8hu2gYdBo#3wQUpGrPHlm7Tz z`r!-di!Y@QzLMVfT6*Cd>4|Tp2fmZ;_+Gl<2kD9*#fP7y3x1Z%@QZZDuabw~q!WIZ zj`%}5;Ed$rPic?8q#gd2w)jWd;9tqXf8vFR$7wBixaMU_4&Q0RE!uL+cHE;q_sr!H zI`BvxdBjdUavpQ&%$zP`j$N3uk7v-8XVQ&l)SYM6gJ;;2XWENr+?!|Khb8FClJsMV z`mp$D<>epbR@R>lxk%1~C$FjmrVR@Mks+DKO3C|2TVR^}L1>R49p zI9Bp_R(1g^y^xh3U?WUmV-&GbCbDsg*+`SvSd-akQ`mS@*@)BFnA6#)GuXH@*~qil z*d=WA*=+n$LNJFg%q0}_2*-RvvVgEGBs7Z%&tgJUMwpfms-=W$86jIv*j5m_m4t5< zAzV!u*AU8b!nu}^t|P4L3GD{LyO9uYBFvi!^%latm5^^E?Ar-_knr!I2tpJ?1w|32 zI82ua5m1%5tHgAP5CK(*-4_xf(AaB<=_)Z@B1AyHZZ+-Kt(GnkBA{Ql?7kx*0?mC> z($ZC8xprzXzn_DHOON0oh1GsfNfEz0jBA^anyG`;$ zz;vH{V^w0hM2LXtK6%?805|mXmk6jzG?YXGu3Q7IOqU2h1x)wJt4ZG7Bu@l1l*I0s zL?WOnaaW1y5+MSn`{dOm?{1PO0vbwUcW^rqP?fl=#B_-e0n>f*YLa(1$rAw$C9(Tg zQiy=6#9bw(ON0oR?vpp&0o+*oFA>mC61#tHiwLMn?EXTweJDPX!!UQP1u<1G*Y4JFY~5*H&B8DPX!! zUQP1u<1G*Y4JENXl*DVhN`Rch@kC-b2Mn)@@7@`4Mh-t!ek3~sB^h8)DTfkw{?1Jo zykPQ0uS?Hud8suo^IVWlhIaAIt?6CaJaf+FS${OyMF2)K=H8JIk{2mHy>X9>`xAtBU$-l8H!dI2!R+?Da27 zBra!CS#`L;KQ9>#rJ0X!MDWYl@>OiqFF zYLiv|x^?fsRJx*y>xWY5RJJMV(y>1lil4s^le3ereuc{`W1(<`XU~~-XSeko_rz+# z@eK3uaJ!OBZr%Yej(hmp@AG(kE5>-D)#GbZNJmrYU_7=bSd)yV;PD*rW>ZqN71`84 zFjO0fC4$kaXgpe-4hEQ4B(pD5|KF3ri7h7&GS#0-r&C-y6B`*NoHLxAQkHVgXQ{$m wI+K&;%(Krfd!*9g1lOI(Ngu_9kK137O{x3GZM`{m&K{N