diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ce5439d244..eb53d3d6d1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -56,7 +56,9 @@ subtitle format. * Extractors: * Matroska: Parse `DiscardPadding` for Opus tracks. - * Parse bitrates from `esds` boxes. + * MP4: Parse bitrates from `esds` boxes. + * Ogg: Allow duplicate Opus ID and comment headers + ([#10038](https://github.com/google/ExoPlayer/issues/10038)). * UI: * Fix delivery of events to `OnClickListener`s set on `PlayerView` and `LegacyPlayerView`, in the case that `useController=false` diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/ogg/OpusReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/ogg/OpusReader.java index d9975bba3a..95996f6a80 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/ogg/OpusReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/ogg/OpusReader.java @@ -15,7 +15,6 @@ */ package androidx.media3.extractor.ogg; -import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Assertions.checkStateNotNull; import androidx.annotation.Nullable; @@ -39,10 +38,20 @@ 'O', 'p', 'u', 's', 'T', 'a', 'g', 's' }; + private boolean firstCommentHeaderSeen; + public static boolean verifyBitstreamType(ParsableByteArray data) { return peekPacketStartsWith(data, OPUS_ID_HEADER_SIGNATURE); } + @Override + protected void reset(boolean headerData) { + super.reset(headerData); + if (headerData) { + firstCommentHeaderSeen = false; + } + } + @Override protected long preparePayload(ParsableByteArray packet) { return convertTimeToGranule(getPacketDurationUs(packet.getData())); @@ -57,9 +66,15 @@ protected boolean readHeaders(ParsableByteArray packet, long position, SetupData int channelCount = OpusUtil.getChannelCount(headerBytes); List initializationData = OpusUtil.buildInitializationData(headerBytes); - // The ID header must come at the start of the file: - // https://datatracker.ietf.org/doc/html/rfc7845#section-3 - checkState(setupData.format == null); + if (setupData.format != null) { + // setupData.format being non-null indicates we've already seen an ID header. Multiple ID + // headers are not permitted by the Opus spec [1], but have been observed in real files [2], + // so we just ignore all subsequent ones. + // [1] https://datatracker.ietf.org/doc/html/rfc7845#section-3 and + // https://datatracker.ietf.org/doc/html/rfc7845#section-5 + // [2] https://github.com/google/ExoPlayer/issues/10038 + return true; + } setupData.format = new Format.Builder() .setSampleMimeType(MimeTypes.AUDIO_OPUS) @@ -72,6 +87,15 @@ protected boolean readHeaders(ParsableByteArray packet, long position, SetupData // The comment header must come immediately after the ID header, so the format will already // be populated: https://datatracker.ietf.org/doc/html/rfc7845#section-3 checkStateNotNull(setupData.format); + if (firstCommentHeaderSeen) { + // Multiple comment headers are not permitted by the Opus spec [1], but have been observed + // in real files [2], so we just ignore all subsequent ones. + // [1] https://datatracker.ietf.org/doc/html/rfc7845#section-3 and + // https://datatracker.ietf.org/doc/html/rfc7845#section-5 + // [2] https://github.com/google/ExoPlayer/issues/10038 + return true; + } + firstCommentHeaderSeen = true; packet.skipBytes(OPUS_COMMENT_HEADER_SIGNATURE.length); VorbisUtil.CommentHeader commentHeader = VorbisUtil.readVorbisCommentHeader( diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/ogg/OggExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/ogg/OggExtractorParameterizedTest.java index 2b8f329ef5..0e0f76b6db 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/ogg/OggExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/ogg/OggExtractorParameterizedTest.java @@ -43,6 +43,13 @@ public void opus() throws Exception { ExtractorAsserts.assertBehavior(OggExtractor::new, "media/ogg/bear.opus", simulationConfig); } + // https://github.com/google/ExoPlayer/issues/10038 + @Test + public void opus_duplicateHeader() throws Exception { + ExtractorAsserts.assertBehavior( + OggExtractor::new, "media/ogg/bear_duplicate_header.opus", simulationConfig); + } + @Test public void flac() throws Exception { ExtractorAsserts.assertBehavior(OggExtractor::new, "media/ogg/bear_flac.ogg", simulationConfig); diff --git a/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump new file mode 100644 index 0000000000..69acdcf9e9 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump @@ -0,0 +1,1121 @@ +seekMap: + isSeekable = true + duration = 2747500 + getPosition(0) = [[timeUs=0, position=250]] + getPosition(1) = [[timeUs=1, position=250]] + getPosition(1373750) = [[timeUs=1373750, position=250]] + getPosition(2747500) = [[timeUs=2747500, position=250]] +numberOfTracks = 1 +track 0: + total output bytes = 25541 + sample count = 275 + format 0: + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 48000 + metadata = entries=[VC: encoder=Lavf54.20.4] + initializationData: + data = length 19, hash BFE794DB + data = length 8, hash CA22068C + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 234, hash B77BFFDA + sample 1: + time = 10000 + flags = 1 + data = length 165, hash F7B07C35 + sample 2: + time = 20000 + flags = 1 + data = length 100, hash 21AFA81F + sample 3: + time = 30000 + flags = 1 + data = length 85, hash 9180DC2F + sample 4: + time = 40000 + flags = 1 + data = length 85, hash 6AE958C + sample 5: + time = 50000 + flags = 1 + data = length 86, hash C1C5AE60 + sample 6: + time = 60000 + flags = 1 + data = length 87, hash B9BD2620 + sample 7: + time = 70000 + flags = 1 + data = length 86, hash 5E69E6F9 + sample 8: + time = 80000 + flags = 1 + data = length 90, hash C44C7DD9 + sample 9: + time = 90000 + flags = 1 + data = length 86, hash C3FCDC6F + sample 10: + time = 100000 + flags = 1 + data = length 86, hash 44EA03BA + sample 11: + time = 110000 + flags = 1 + data = length 160, hash 9F4E1AE8 + sample 12: + time = 120000 + flags = 1 + data = length 89, hash 31234460 + sample 13: + time = 130000 + flags = 1 + data = length 91, hash 45012D79 + sample 14: + time = 140000 + flags = 1 + data = length 90, hash B3E3AC75 + sample 15: + time = 150000 + flags = 1 + data = length 87, hash B83B756B + sample 16: + time = 160000 + flags = 1 + data = length 86, hash 383921EB + sample 17: + time = 170000 + flags = 1 + data = length 97, hash 959AD270 + sample 18: + time = 180000 + flags = 1 + data = length 92, hash 46C74FA8 + sample 19: + time = 190000 + flags = 1 + data = length 91, hash CEA401DD + sample 20: + time = 200000 + flags = 1 + data = length 89, hash 48C41853 + sample 21: + time = 210000 + flags = 1 + data = length 90, hash F23245BD + sample 22: + time = 220000 + flags = 1 + data = length 96, hash 95E8985D + sample 23: + time = 230000 + flags = 1 + data = length 96, hash 34295492 + sample 24: + time = 240000 + flags = 1 + data = length 94, hash 4E3C9C0F + sample 25: + time = 250000 + flags = 1 + data = length 89, hash 28B74A29 + sample 26: + time = 260000 + flags = 1 + data = length 87, hash BAC119A7 + sample 27: + time = 270000 + flags = 1 + data = length 88, hash 7139FF38 + sample 28: + time = 280000 + flags = 1 + data = length 85, hash 246E1D2A + sample 29: + time = 290000 + flags = 1 + data = length 86, hash 488A0900 + sample 30: + time = 300000 + flags = 1 + data = length 90, hash 16FD17B1 + sample 31: + time = 310000 + flags = 1 + data = length 87, hash 20E849D9 + sample 32: + time = 320000 + flags = 1 + data = length 86, hash 23A0E9BA + sample 33: + time = 330000 + flags = 1 + data = length 87, hash EC935537 + sample 34: + time = 340000 + flags = 1 + data = length 92, hash 4D9935AD + sample 35: + time = 350000 + flags = 1 + data = length 87, hash DEDE3FA + sample 36: + time = 360000 + flags = 1 + data = length 87, hash ADC25A6E + sample 37: + time = 370000 + flags = 1 + data = length 88, hash A1C828C5 + sample 38: + time = 380000 + flags = 1 + data = length 89, hash 735C087A + sample 39: + time = 390000 + flags = 1 + data = length 89, hash 19AF5D10 + sample 40: + time = 400000 + flags = 1 + data = length 90, hash BCCEA2BB + sample 41: + time = 410000 + flags = 1 + data = length 86, hash A7C934A0 + sample 42: + time = 420000 + flags = 1 + data = length 86, hash 28BBC0A8 + sample 43: + time = 430000 + flags = 1 + data = length 85, hash E60BB12D + sample 44: + time = 440000 + flags = 1 + data = length 141, hash 1D2B8920 + sample 45: + time = 450000 + flags = 1 + data = length 121, hash 8AA3E19C + sample 46: + time = 460000 + flags = 1 + data = length 86, hash 24DF0F37 + sample 47: + time = 470000 + flags = 1 + data = length 86, hash 1D1775FF + sample 48: + time = 480000 + flags = 1 + data = length 87, hash 5230399E + sample 49: + time = 490000 + flags = 1 + data = length 91, hash 6CD98305 + sample 50: + time = 500000 + flags = 1 + data = length 88, hash 4069FBB + sample 51: + time = 510000 + flags = 1 + data = length 89, hash 76824ABF + sample 52: + time = 520000 + flags = 1 + data = length 87, hash BC1B1322 + sample 53: + time = 530000 + flags = 1 + data = length 102, hash E01BA053 + sample 54: + time = 540000 + flags = 1 + data = length 85, hash C09B626D + sample 55: + time = 550000 + flags = 1 + data = length 88, hash 6B7B404A + sample 56: + time = 560000 + flags = 1 + data = length 85, hash 74A15DC7 + sample 57: + time = 570000 + flags = 1 + data = length 88, hash 38DB82E5 + sample 58: + time = 580000 + flags = 1 + data = length 86, hash 1A39C081 + sample 59: + time = 590000 + flags = 1 + data = length 87, hash 39FEC92 + sample 60: + time = 600000 + flags = 1 + data = length 92, hash 278EA09 + sample 61: + time = 610000 + flags = 1 + data = length 87, hash 28265F2D + sample 62: + time = 620000 + flags = 1 + data = length 86, hash CC2040C6 + sample 63: + time = 630000 + flags = 1 + data = length 138, hash 9E07BC1F + sample 64: + time = 640000 + flags = 1 + data = length 85, hash 4F299670 + sample 65: + time = 650000 + flags = 1 + data = length 125, hash B61123C3 + sample 66: + time = 660000 + flags = 1 + data = length 89, hash 5CC688ED + sample 67: + time = 670000 + flags = 1 + data = length 88, hash 84AF64A6 + sample 68: + time = 680000 + flags = 1 + data = length 89, hash A9BFC8DC + sample 69: + time = 690000 + flags = 1 + data = length 90, hash 2FF77060 + sample 70: + time = 700000 + flags = 1 + data = length 96, hash E11AFD61 + sample 71: + time = 710000 + flags = 1 + data = length 87, hash 85D14EDA + sample 72: + time = 720000 + flags = 1 + data = length 88, hash 5FC71D53 + sample 73: + time = 730000 + flags = 1 + data = length 89, hash 957187B6 + sample 74: + time = 740000 + flags = 1 + data = length 89, hash 5A776082 + sample 75: + time = 750000 + flags = 1 + data = length 87, hash E8A83AFE + sample 76: + time = 760000 + flags = 1 + data = length 87, hash F1989133 + sample 77: + time = 770000 + flags = 1 + data = length 87, hash FA06BCCA + sample 78: + time = 780000 + flags = 1 + data = length 86, hash BD97E0C0 + sample 79: + time = 790000 + flags = 1 + data = length 88, hash E6AE022C + sample 80: + time = 800000 + flags = 1 + data = length 87, hash FB6C6169 + sample 81: + time = 810000 + flags = 1 + data = length 87, hash DFFCD2CF + sample 82: + time = 820000 + flags = 1 + data = length 88, hash A4B5EB52 + sample 83: + time = 830000 + flags = 1 + data = length 85, hash A63CF4EA + sample 84: + time = 840000 + flags = 1 + data = length 86, hash F126E7C7 + sample 85: + time = 850000 + flags = 1 + data = length 86, hash 21A8B22F + sample 86: + time = 860000 + flags = 1 + data = length 87, hash 6520E7C1 + sample 87: + time = 870000 + flags = 1 + data = length 88, hash 825B7423 + sample 88: + time = 880000 + flags = 1 + data = length 88, hash DF3DBD48 + sample 89: + time = 890000 + flags = 1 + data = length 87, hash B32C68D0 + sample 90: + time = 900000 + flags = 1 + data = length 89, hash B99DFFCA + sample 91: + time = 910000 + flags = 1 + data = length 88, hash 9C8D5178 + sample 92: + time = 920000 + flags = 1 + data = length 88, hash 48A0B19A + sample 93: + time = 930000 + flags = 1 + data = length 88, hash B62C94DD + sample 94: + time = 940000 + flags = 1 + data = length 92, hash 96DBDD46 + sample 95: + time = 950000 + flags = 1 + data = length 87, hash 7B80E6F + sample 96: + time = 960000 + flags = 1 + data = length 86, hash 9C60225B + sample 97: + time = 970000 + flags = 1 + data = length 87, hash 45F7E6E8 + sample 98: + time = 980000 + flags = 1 + data = length 87, hash DDC2D592 + sample 99: + time = 990000 + flags = 1 + data = length 91, hash 173D3B26 + sample 100: + time = 1000000 + flags = 1 + data = length 87, hash CF3629DF + sample 101: + time = 1010000 + flags = 1 + data = length 87, hash BBE2E7B3 + sample 102: + time = 1020000 + flags = 1 + data = length 89, hash 89AFFB10 + sample 103: + time = 1030000 + flags = 1 + data = length 88, hash 510DCC90 + sample 104: + time = 1040000 + flags = 1 + data = length 88, hash CBA56E5F + sample 105: + time = 1050000 + flags = 1 + data = length 87, hash B4B1B3FF + sample 106: + time = 1060000 + flags = 1 + data = length 89, hash B976A537 + sample 107: + time = 1070000 + flags = 1 + data = length 96, hash 43ECF2C1 + sample 108: + time = 1080000 + flags = 1 + data = length 90, hash BB7ECB44 + sample 109: + time = 1090000 + flags = 1 + data = length 89, hash B8E221A5 + sample 110: + time = 1100000 + flags = 1 + data = length 86, hash B35BEF5B + sample 111: + time = 1110000 + flags = 1 + data = length 89, hash 9002F0EC + sample 112: + time = 1120000 + flags = 1 + data = length 85, hash F694B20 + sample 113: + time = 1130000 + flags = 1 + data = length 87, hash D7CC386E + sample 114: + time = 1140000 + flags = 1 + data = length 89, hash EE9E0E79 + sample 115: + time = 1150000 + flags = 1 + data = length 90, hash CA72C96B + sample 116: + time = 1160000 + flags = 1 + data = length 112, hash 4AD3D1B1 + sample 117: + time = 1170000 + flags = 1 + data = length 87, hash FA568FAB + sample 118: + time = 1180000 + flags = 1 + data = length 90, hash 6E6948D2 + sample 119: + time = 1190000 + flags = 1 + data = length 89, hash 5465A762 + sample 120: + time = 1200000 + flags = 1 + data = length 87, hash BED19B40 + sample 121: + time = 1210000 + flags = 1 + data = length 89, hash 5D05836A + sample 122: + time = 1220000 + flags = 1 + data = length 87, hash A8A3EF5A + sample 123: + time = 1230000 + flags = 1 + data = length 90, hash 6425A77A + sample 124: + time = 1240000 + flags = 1 + data = length 92, hash 7F320FA + sample 125: + time = 1250000 + flags = 1 + data = length 89, hash 2C7837D6 + sample 126: + time = 1260000 + flags = 1 + data = length 86, hash 58D56685 + sample 127: + time = 1270000 + flags = 1 + data = length 91, hash ADC5072F + sample 128: + time = 1280000 + flags = 1 + data = length 85, hash 53EFD93 + sample 129: + time = 1290000 + flags = 1 + data = length 87, hash D006B535 + sample 130: + time = 1300000 + flags = 1 + data = length 86, hash AE944625 + sample 131: + time = 1310000 + flags = 1 + data = length 89, hash B5D3C81D + sample 132: + time = 1320000 + flags = 1 + data = length 86, hash 3BB1D0E7 + sample 133: + time = 1330000 + flags = 1 + data = length 102, hash 16EEC441 + sample 134: + time = 1340000 + flags = 1 + data = length 90, hash 1005B936 + sample 135: + time = 1350000 + flags = 1 + data = length 85, hash 15EEBF9A + sample 136: + time = 1360000 + flags = 1 + data = length 87, hash 37C83AC2 + sample 137: + time = 1370000 + flags = 1 + data = length 85, hash 2D27855D + sample 138: + time = 1380000 + flags = 1 + data = length 85, hash 753EB7C6 + sample 139: + time = 1390000 + flags = 1 + data = length 91, hash C0813318 + sample 140: + time = 1400000 + flags = 1 + data = length 89, hash 3A6468AC + sample 141: + time = 1410000 + flags = 1 + data = length 88, hash 3D220ABC + sample 142: + time = 1420000 + flags = 1 + data = length 140, hash 7949ABC7 + sample 143: + time = 1430000 + flags = 1 + data = length 92, hash F19AFA45 + sample 144: + time = 1440000 + flags = 1 + data = length 90, hash 3D21587C + sample 145: + time = 1450000 + flags = 1 + data = length 89, hash 5C12226C + sample 146: + time = 1460000 + flags = 1 + data = length 90, hash 22BA14FC + sample 147: + time = 1470000 + flags = 1 + data = length 88, hash F064B21C + sample 148: + time = 1480000 + flags = 1 + data = length 87, hash 6D7906B9 + sample 149: + time = 1490000 + flags = 1 + data = length 88, hash 6756A484 + sample 150: + time = 1500000 + flags = 1 + data = length 91, hash C95C00B6 + sample 151: + time = 1510000 + flags = 1 + data = length 87, hash 728D8119 + sample 152: + time = 1520000 + flags = 1 + data = length 90, hash C43DA1B4 + sample 153: + time = 1530000 + flags = 1 + data = length 88, hash C181BB57 + sample 154: + time = 1540000 + flags = 1 + data = length 84, hash F75B1639 + sample 155: + time = 1550000 + flags = 1 + data = length 87, hash B6F32978 + sample 156: + time = 1560000 + flags = 1 + data = length 90, hash 36D6E2D7 + sample 157: + time = 1570000 + flags = 1 + data = length 87, hash 4C9657A7 + sample 158: + time = 1580000 + flags = 1 + data = length 89, hash C3BDB9B7 + sample 159: + time = 1590000 + flags = 1 + data = length 88, hash DB51087E + sample 160: + time = 1600000 + flags = 1 + data = length 86, hash 1550F998 + sample 161: + time = 1610000 + flags = 1 + data = length 86, hash A445FAD4 + sample 162: + time = 1620000 + flags = 1 + data = length 85, hash 60D3362C + sample 163: + time = 1630000 + flags = 1 + data = length 172, hash 945D63E4 + sample 164: + time = 1640000 + flags = 1 + data = length 107, hash 585B7C04 + sample 165: + time = 1650000 + flags = 1 + data = length 110, hash 74BECF69 + sample 166: + time = 1660000 + flags = 1 + data = length 87, hash 63DE1D24 + sample 167: + time = 1670000 + flags = 1 + data = length 90, hash 1C1D28DB + sample 168: + time = 1680000 + flags = 1 + data = length 87, hash CB382A67 + sample 169: + time = 1690000 + flags = 1 + data = length 85, hash A227BA13 + sample 170: + time = 1700000 + flags = 1 + data = length 86, hash EFD8B10B + sample 171: + time = 1710000 + flags = 1 + data = length 87, hash 47FF364A + sample 172: + time = 1720000 + flags = 1 + data = length 91, hash 31D4B48A + sample 173: + time = 1730000 + flags = 1 + data = length 91, hash DD69BD85 + sample 174: + time = 1740000 + flags = 1 + data = length 88, hash AF1A95C6 + sample 175: + time = 1750000 + flags = 1 + data = length 87, hash 2FB8AF74 + sample 176: + time = 1760000 + flags = 1 + data = length 92, hash 173C707A + sample 177: + time = 1770000 + flags = 1 + data = length 88, hash 5F58F5E8 + sample 178: + time = 1780000 + flags = 1 + data = length 91, hash D449785F + sample 179: + time = 1790000 + flags = 1 + data = length 91, hash CE2CB465 + sample 180: + time = 1800000 + flags = 1 + data = length 93, hash ABC1C62E + sample 181: + time = 1810000 + flags = 1 + data = length 87, hash 83B4B9A0 + sample 182: + time = 1820000 + flags = 1 + data = length 87, hash 3220D562 + sample 183: + time = 1830000 + flags = 1 + data = length 86, hash 64D21AA1 + sample 184: + time = 1840000 + flags = 1 + data = length 86, hash A1FAAF2C + sample 185: + time = 1850000 + flags = 1 + data = length 86, hash ECA80F7E + sample 186: + time = 1860000 + flags = 1 + data = length 86, hash FEB03B2C + sample 187: + time = 1870000 + flags = 1 + data = length 85, hash 2C2E6B2F + sample 188: + time = 1880000 + flags = 1 + data = length 89, hash A0D7AC3 + sample 189: + time = 1890000 + flags = 1 + data = length 87, hash 83739547 + sample 190: + time = 1900000 + flags = 1 + data = length 86, hash 991E531E + sample 191: + time = 1910000 + flags = 1 + data = length 88, hash 16B287A3 + sample 192: + time = 1920000 + flags = 1 + data = length 86, hash FC86EED + sample 193: + time = 1930000 + flags = 1 + data = length 86, hash 96AF0248 + sample 194: + time = 1940000 + flags = 1 + data = length 86, hash 288402C8 + sample 195: + time = 1950000 + flags = 1 + data = length 87, hash 4BBA7912 + sample 196: + time = 1960000 + flags = 1 + data = length 86, hash 4A59C719 + sample 197: + time = 1970000 + flags = 1 + data = length 85, hash 906E8187 + sample 198: + time = 1980000 + flags = 1 + data = length 90, hash CB8B755D + sample 199: + time = 1990000 + flags = 1 + data = length 87, hash C8E02C + sample 200: + time = 2000000 + flags = 1 + data = length 88, hash ACF4D89A + sample 201: + time = 2010000 + flags = 1 + data = length 86, hash 510FE048 + sample 202: + time = 2020000 + flags = 1 + data = length 86, hash 64983E46 + sample 203: + time = 2030000 + flags = 1 + data = length 86, hash CEA76A1E + sample 204: + time = 2040000 + flags = 1 + data = length 87, hash AADE498E + sample 205: + time = 2050000 + flags = 1 + data = length 127, hash 353A6D8C + sample 206: + time = 2060000 + flags = 1 + data = length 87, hash 29E18E62 + sample 207: + time = 2070000 + flags = 1 + data = length 87, hash 2CF7B30F + sample 208: + time = 2080000 + flags = 1 + data = length 94, hash 758704C3 + sample 209: + time = 2090000 + flags = 1 + data = length 88, hash C2153A4C + sample 210: + time = 2100000 + flags = 1 + data = length 86, hash A0A83DA5 + sample 211: + time = 2110000 + flags = 1 + data = length 86, hash 41017D7F + sample 212: + time = 2120000 + flags = 1 + data = length 93, hash 686B0CA2 + sample 213: + time = 2130000 + flags = 1 + data = length 86, hash 554D16CC + sample 214: + time = 2140000 + flags = 1 + data = length 88, hash 99D72771 + sample 215: + time = 2150000 + flags = 1 + data = length 88, hash 7176DFBF + sample 216: + time = 2160000 + flags = 1 + data = length 86, hash BAA22669 + sample 217: + time = 2170000 + flags = 1 + data = length 88, hash B00B0D3C + sample 218: + time = 2180000 + flags = 1 + data = length 89, hash 73FED83A + sample 219: + time = 2190000 + flags = 1 + data = length 86, hash 4A4138D3 + sample 220: + time = 2200000 + flags = 1 + data = length 89, hash E0A860FF + sample 221: + time = 2210000 + flags = 1 + data = length 95, hash EE5A8AED + sample 222: + time = 2220000 + flags = 1 + data = length 92, hash 36DBD7FD + sample 223: + time = 2230000 + flags = 1 + data = length 88, hash EE47A7E4 + sample 224: + time = 2240000 + flags = 1 + data = length 100, hash 2E1A603F + sample 225: + time = 2250000 + flags = 1 + data = length 89, hash 657ED4A3 + sample 226: + time = 2260000 + flags = 1 + data = length 86, hash A833DC7B + sample 227: + time = 2270000 + flags = 1 + data = length 88, hash 81E80732 + sample 228: + time = 2280000 + flags = 1 + data = length 91, hash FA256A0F + sample 229: + time = 2290000 + flags = 1 + data = length 88, hash A63A4DBA + sample 230: + time = 2300000 + flags = 1 + data = length 88, hash 67910A9F + sample 231: + time = 2310000 + flags = 1 + data = length 86, hash EB387DB6 + sample 232: + time = 2320000 + flags = 1 + data = length 88, hash 5ACAAC2A + sample 233: + time = 2330000 + flags = 1 + data = length 86, hash 6ADF2E1F + sample 234: + time = 2340000 + flags = 1 + data = length 85, hash 9D064471 + sample 235: + time = 2350000 + flags = 1 + data = length 87, hash F176C59 + sample 236: + time = 2360000 + flags = 1 + data = length 89, hash 5CA40CE4 + sample 237: + time = 2370000 + flags = 1 + data = length 88, hash 67B944FC + sample 238: + time = 2380000 + flags = 1 + data = length 86, hash B3A84EC8 + sample 239: + time = 2390000 + flags = 1 + data = length 92, hash A6ACF94B + sample 240: + time = 2400000 + flags = 1 + data = length 88, hash CB0C9730 + sample 241: + time = 2410000 + flags = 1 + data = length 88, hash C79FE804 + sample 242: + time = 2420000 + flags = 1 + data = length 88, hash A74C7F0A + sample 243: + time = 2430000 + flags = 1 + data = length 91, hash 55F6F0A5 + sample 244: + time = 2440000 + flags = 1 + data = length 93, hash 330F33E7 + sample 245: + time = 2450000 + flags = 1 + data = length 89, hash 614AFBA0 + sample 246: + time = 2460000 + flags = 1 + data = length 87, hash 3CE4652D + sample 247: + time = 2470000 + flags = 1 + data = length 87, hash 4EFD5467 + sample 248: + time = 2480000 + flags = 1 + data = length 86, hash D81B3EB8 + sample 249: + time = 2490000 + flags = 1 + data = length 88, hash 96CB6871 + sample 250: + time = 2500000 + flags = 1 + data = length 88, hash E9DF2786 + sample 251: + time = 2510000 + flags = 1 + data = length 89, hash 2CA33D96 + sample 252: + time = 2520000 + flags = 1 + data = length 90, hash 96BDE594 + sample 253: + time = 2530000 + flags = 1 + data = length 87, hash C261493C + sample 254: + time = 2540000 + flags = 1 + data = length 86, hash D037318E + sample 255: + time = 2550000 + flags = 1 + data = length 88, hash BC15BC88 + sample 256: + time = 2560000 + flags = 1 + data = length 91, hash A8361A51 + sample 257: + time = 2570000 + flags = 1 + data = length 87, hash 4AFDB5F2 + sample 258: + time = 2580000 + flags = 1 + data = length 87, hash 6447F8CB + sample 259: + time = 2590000 + flags = 1 + data = length 89, hash 48305229 + sample 260: + time = 2600000 + flags = 1 + data = length 87, hash 8741D9E7 + sample 261: + time = 2610000 + flags = 1 + data = length 120, hash 761F020C + sample 262: + time = 2620000 + flags = 1 + data = length 139, hash AECE2E57 + sample 263: + time = 2630000 + flags = 1 + data = length 166, hash 6288797A + sample 264: + time = 2640000 + flags = 1 + data = length 144, hash 437821A0 + sample 265: + time = 2650000 + flags = 1 + data = length 113, hash FCCBEDF1 + sample 266: + time = 2660000 + flags = 1 + data = length 108, hash C4040614 + sample 267: + time = 2670000 + flags = 1 + data = length 125, hash E29064C2 + sample 268: + time = 2680000 + flags = 1 + data = length 126, hash D42D24FF + sample 269: + time = 2690000 + flags = 1 + data = length 122, hash 30AF267D + sample 270: + time = 2700000 + flags = 1 + data = length 122, hash 45CEC1FB + sample 271: + time = 2710000 + flags = 1 + data = length 134, hash 59143FE2 + sample 272: + time = 2720000 + flags = 1 + data = length 134, hash BD52A84 + sample 273: + time = 2730000 + flags = 1 + data = length 120, hash 745C3714 + sample 274: + time = 2740000 + flags = 1 + data = length 126, hash 505E117B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump new file mode 100644 index 0000000000..9bab0eadb1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump @@ -0,0 +1,757 @@ +seekMap: + isSeekable = true + duration = 2747500 + getPosition(0) = [[timeUs=0, position=250]] + getPosition(1) = [[timeUs=1, position=250]] + getPosition(1373750) = [[timeUs=1373750, position=250]] + getPosition(2747500) = [[timeUs=2747500, position=250]] +numberOfTracks = 1 +track 0: + total output bytes = 17031 + sample count = 184 + format 0: + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 48000 + metadata = entries=[VC: encoder=Lavf54.20.4] + initializationData: + data = length 19, hash BFE794DB + data = length 8, hash CA22068C + data = length 8, hash 79C07075 + sample 0: + time = 910000 + flags = 1 + data = length 88, hash 9C8D5178 + sample 1: + time = 920000 + flags = 1 + data = length 88, hash 48A0B19A + sample 2: + time = 930000 + flags = 1 + data = length 88, hash B62C94DD + sample 3: + time = 940000 + flags = 1 + data = length 92, hash 96DBDD46 + sample 4: + time = 950000 + flags = 1 + data = length 87, hash 7B80E6F + sample 5: + time = 960000 + flags = 1 + data = length 86, hash 9C60225B + sample 6: + time = 970000 + flags = 1 + data = length 87, hash 45F7E6E8 + sample 7: + time = 980000 + flags = 1 + data = length 87, hash DDC2D592 + sample 8: + time = 990000 + flags = 1 + data = length 91, hash 173D3B26 + sample 9: + time = 1000000 + flags = 1 + data = length 87, hash CF3629DF + sample 10: + time = 1010000 + flags = 1 + data = length 87, hash BBE2E7B3 + sample 11: + time = 1020000 + flags = 1 + data = length 89, hash 89AFFB10 + sample 12: + time = 1030000 + flags = 1 + data = length 88, hash 510DCC90 + sample 13: + time = 1040000 + flags = 1 + data = length 88, hash CBA56E5F + sample 14: + time = 1050000 + flags = 1 + data = length 87, hash B4B1B3FF + sample 15: + time = 1060000 + flags = 1 + data = length 89, hash B976A537 + sample 16: + time = 1070000 + flags = 1 + data = length 96, hash 43ECF2C1 + sample 17: + time = 1080000 + flags = 1 + data = length 90, hash BB7ECB44 + sample 18: + time = 1090000 + flags = 1 + data = length 89, hash B8E221A5 + sample 19: + time = 1100000 + flags = 1 + data = length 86, hash B35BEF5B + sample 20: + time = 1110000 + flags = 1 + data = length 89, hash 9002F0EC + sample 21: + time = 1120000 + flags = 1 + data = length 85, hash F694B20 + sample 22: + time = 1130000 + flags = 1 + data = length 87, hash D7CC386E + sample 23: + time = 1140000 + flags = 1 + data = length 89, hash EE9E0E79 + sample 24: + time = 1150000 + flags = 1 + data = length 90, hash CA72C96B + sample 25: + time = 1160000 + flags = 1 + data = length 112, hash 4AD3D1B1 + sample 26: + time = 1170000 + flags = 1 + data = length 87, hash FA568FAB + sample 27: + time = 1180000 + flags = 1 + data = length 90, hash 6E6948D2 + sample 28: + time = 1190000 + flags = 1 + data = length 89, hash 5465A762 + sample 29: + time = 1200000 + flags = 1 + data = length 87, hash BED19B40 + sample 30: + time = 1210000 + flags = 1 + data = length 89, hash 5D05836A + sample 31: + time = 1220000 + flags = 1 + data = length 87, hash A8A3EF5A + sample 32: + time = 1230000 + flags = 1 + data = length 90, hash 6425A77A + sample 33: + time = 1240000 + flags = 1 + data = length 92, hash 7F320FA + sample 34: + time = 1250000 + flags = 1 + data = length 89, hash 2C7837D6 + sample 35: + time = 1260000 + flags = 1 + data = length 86, hash 58D56685 + sample 36: + time = 1270000 + flags = 1 + data = length 91, hash ADC5072F + sample 37: + time = 1280000 + flags = 1 + data = length 85, hash 53EFD93 + sample 38: + time = 1290000 + flags = 1 + data = length 87, hash D006B535 + sample 39: + time = 1300000 + flags = 1 + data = length 86, hash AE944625 + sample 40: + time = 1310000 + flags = 1 + data = length 89, hash B5D3C81D + sample 41: + time = 1320000 + flags = 1 + data = length 86, hash 3BB1D0E7 + sample 42: + time = 1330000 + flags = 1 + data = length 102, hash 16EEC441 + sample 43: + time = 1340000 + flags = 1 + data = length 90, hash 1005B936 + sample 44: + time = 1350000 + flags = 1 + data = length 85, hash 15EEBF9A + sample 45: + time = 1360000 + flags = 1 + data = length 87, hash 37C83AC2 + sample 46: + time = 1370000 + flags = 1 + data = length 85, hash 2D27855D + sample 47: + time = 1380000 + flags = 1 + data = length 85, hash 753EB7C6 + sample 48: + time = 1390000 + flags = 1 + data = length 91, hash C0813318 + sample 49: + time = 1400000 + flags = 1 + data = length 89, hash 3A6468AC + sample 50: + time = 1410000 + flags = 1 + data = length 88, hash 3D220ABC + sample 51: + time = 1420000 + flags = 1 + data = length 140, hash 7949ABC7 + sample 52: + time = 1430000 + flags = 1 + data = length 92, hash F19AFA45 + sample 53: + time = 1440000 + flags = 1 + data = length 90, hash 3D21587C + sample 54: + time = 1450000 + flags = 1 + data = length 89, hash 5C12226C + sample 55: + time = 1460000 + flags = 1 + data = length 90, hash 22BA14FC + sample 56: + time = 1470000 + flags = 1 + data = length 88, hash F064B21C + sample 57: + time = 1480000 + flags = 1 + data = length 87, hash 6D7906B9 + sample 58: + time = 1490000 + flags = 1 + data = length 88, hash 6756A484 + sample 59: + time = 1500000 + flags = 1 + data = length 91, hash C95C00B6 + sample 60: + time = 1510000 + flags = 1 + data = length 87, hash 728D8119 + sample 61: + time = 1520000 + flags = 1 + data = length 90, hash C43DA1B4 + sample 62: + time = 1530000 + flags = 1 + data = length 88, hash C181BB57 + sample 63: + time = 1540000 + flags = 1 + data = length 84, hash F75B1639 + sample 64: + time = 1550000 + flags = 1 + data = length 87, hash B6F32978 + sample 65: + time = 1560000 + flags = 1 + data = length 90, hash 36D6E2D7 + sample 66: + time = 1570000 + flags = 1 + data = length 87, hash 4C9657A7 + sample 67: + time = 1580000 + flags = 1 + data = length 89, hash C3BDB9B7 + sample 68: + time = 1590000 + flags = 1 + data = length 88, hash DB51087E + sample 69: + time = 1600000 + flags = 1 + data = length 86, hash 1550F998 + sample 70: + time = 1610000 + flags = 1 + data = length 86, hash A445FAD4 + sample 71: + time = 1620000 + flags = 1 + data = length 85, hash 60D3362C + sample 72: + time = 1630000 + flags = 1 + data = length 172, hash 945D63E4 + sample 73: + time = 1640000 + flags = 1 + data = length 107, hash 585B7C04 + sample 74: + time = 1650000 + flags = 1 + data = length 110, hash 74BECF69 + sample 75: + time = 1660000 + flags = 1 + data = length 87, hash 63DE1D24 + sample 76: + time = 1670000 + flags = 1 + data = length 90, hash 1C1D28DB + sample 77: + time = 1680000 + flags = 1 + data = length 87, hash CB382A67 + sample 78: + time = 1690000 + flags = 1 + data = length 85, hash A227BA13 + sample 79: + time = 1700000 + flags = 1 + data = length 86, hash EFD8B10B + sample 80: + time = 1710000 + flags = 1 + data = length 87, hash 47FF364A + sample 81: + time = 1720000 + flags = 1 + data = length 91, hash 31D4B48A + sample 82: + time = 1730000 + flags = 1 + data = length 91, hash DD69BD85 + sample 83: + time = 1740000 + flags = 1 + data = length 88, hash AF1A95C6 + sample 84: + time = 1750000 + flags = 1 + data = length 87, hash 2FB8AF74 + sample 85: + time = 1760000 + flags = 1 + data = length 92, hash 173C707A + sample 86: + time = 1770000 + flags = 1 + data = length 88, hash 5F58F5E8 + sample 87: + time = 1780000 + flags = 1 + data = length 91, hash D449785F + sample 88: + time = 1790000 + flags = 1 + data = length 91, hash CE2CB465 + sample 89: + time = 1800000 + flags = 1 + data = length 93, hash ABC1C62E + sample 90: + time = 1810000 + flags = 1 + data = length 87, hash 83B4B9A0 + sample 91: + time = 1820000 + flags = 1 + data = length 87, hash 3220D562 + sample 92: + time = 1830000 + flags = 1 + data = length 86, hash 64D21AA1 + sample 93: + time = 1840000 + flags = 1 + data = length 86, hash A1FAAF2C + sample 94: + time = 1850000 + flags = 1 + data = length 86, hash ECA80F7E + sample 95: + time = 1860000 + flags = 1 + data = length 86, hash FEB03B2C + sample 96: + time = 1870000 + flags = 1 + data = length 85, hash 2C2E6B2F + sample 97: + time = 1880000 + flags = 1 + data = length 89, hash A0D7AC3 + sample 98: + time = 1890000 + flags = 1 + data = length 87, hash 83739547 + sample 99: + time = 1900000 + flags = 1 + data = length 86, hash 991E531E + sample 100: + time = 1910000 + flags = 1 + data = length 88, hash 16B287A3 + sample 101: + time = 1920000 + flags = 1 + data = length 86, hash FC86EED + sample 102: + time = 1930000 + flags = 1 + data = length 86, hash 96AF0248 + sample 103: + time = 1940000 + flags = 1 + data = length 86, hash 288402C8 + sample 104: + time = 1950000 + flags = 1 + data = length 87, hash 4BBA7912 + sample 105: + time = 1960000 + flags = 1 + data = length 86, hash 4A59C719 + sample 106: + time = 1970000 + flags = 1 + data = length 85, hash 906E8187 + sample 107: + time = 1980000 + flags = 1 + data = length 90, hash CB8B755D + sample 108: + time = 1990000 + flags = 1 + data = length 87, hash C8E02C + sample 109: + time = 2000000 + flags = 1 + data = length 88, hash ACF4D89A + sample 110: + time = 2010000 + flags = 1 + data = length 86, hash 510FE048 + sample 111: + time = 2020000 + flags = 1 + data = length 86, hash 64983E46 + sample 112: + time = 2030000 + flags = 1 + data = length 86, hash CEA76A1E + sample 113: + time = 2040000 + flags = 1 + data = length 87, hash AADE498E + sample 114: + time = 2050000 + flags = 1 + data = length 127, hash 353A6D8C + sample 115: + time = 2060000 + flags = 1 + data = length 87, hash 29E18E62 + sample 116: + time = 2070000 + flags = 1 + data = length 87, hash 2CF7B30F + sample 117: + time = 2080000 + flags = 1 + data = length 94, hash 758704C3 + sample 118: + time = 2090000 + flags = 1 + data = length 88, hash C2153A4C + sample 119: + time = 2100000 + flags = 1 + data = length 86, hash A0A83DA5 + sample 120: + time = 2110000 + flags = 1 + data = length 86, hash 41017D7F + sample 121: + time = 2120000 + flags = 1 + data = length 93, hash 686B0CA2 + sample 122: + time = 2130000 + flags = 1 + data = length 86, hash 554D16CC + sample 123: + time = 2140000 + flags = 1 + data = length 88, hash 99D72771 + sample 124: + time = 2150000 + flags = 1 + data = length 88, hash 7176DFBF + sample 125: + time = 2160000 + flags = 1 + data = length 86, hash BAA22669 + sample 126: + time = 2170000 + flags = 1 + data = length 88, hash B00B0D3C + sample 127: + time = 2180000 + flags = 1 + data = length 89, hash 73FED83A + sample 128: + time = 2190000 + flags = 1 + data = length 86, hash 4A4138D3 + sample 129: + time = 2200000 + flags = 1 + data = length 89, hash E0A860FF + sample 130: + time = 2210000 + flags = 1 + data = length 95, hash EE5A8AED + sample 131: + time = 2220000 + flags = 1 + data = length 92, hash 36DBD7FD + sample 132: + time = 2230000 + flags = 1 + data = length 88, hash EE47A7E4 + sample 133: + time = 2240000 + flags = 1 + data = length 100, hash 2E1A603F + sample 134: + time = 2250000 + flags = 1 + data = length 89, hash 657ED4A3 + sample 135: + time = 2260000 + flags = 1 + data = length 86, hash A833DC7B + sample 136: + time = 2270000 + flags = 1 + data = length 88, hash 81E80732 + sample 137: + time = 2280000 + flags = 1 + data = length 91, hash FA256A0F + sample 138: + time = 2290000 + flags = 1 + data = length 88, hash A63A4DBA + sample 139: + time = 2300000 + flags = 1 + data = length 88, hash 67910A9F + sample 140: + time = 2310000 + flags = 1 + data = length 86, hash EB387DB6 + sample 141: + time = 2320000 + flags = 1 + data = length 88, hash 5ACAAC2A + sample 142: + time = 2330000 + flags = 1 + data = length 86, hash 6ADF2E1F + sample 143: + time = 2340000 + flags = 1 + data = length 85, hash 9D064471 + sample 144: + time = 2350000 + flags = 1 + data = length 87, hash F176C59 + sample 145: + time = 2360000 + flags = 1 + data = length 89, hash 5CA40CE4 + sample 146: + time = 2370000 + flags = 1 + data = length 88, hash 67B944FC + sample 147: + time = 2380000 + flags = 1 + data = length 86, hash B3A84EC8 + sample 148: + time = 2390000 + flags = 1 + data = length 92, hash A6ACF94B + sample 149: + time = 2400000 + flags = 1 + data = length 88, hash CB0C9730 + sample 150: + time = 2410000 + flags = 1 + data = length 88, hash C79FE804 + sample 151: + time = 2420000 + flags = 1 + data = length 88, hash A74C7F0A + sample 152: + time = 2430000 + flags = 1 + data = length 91, hash 55F6F0A5 + sample 153: + time = 2440000 + flags = 1 + data = length 93, hash 330F33E7 + sample 154: + time = 2450000 + flags = 1 + data = length 89, hash 614AFBA0 + sample 155: + time = 2460000 + flags = 1 + data = length 87, hash 3CE4652D + sample 156: + time = 2470000 + flags = 1 + data = length 87, hash 4EFD5467 + sample 157: + time = 2480000 + flags = 1 + data = length 86, hash D81B3EB8 + sample 158: + time = 2490000 + flags = 1 + data = length 88, hash 96CB6871 + sample 159: + time = 2500000 + flags = 1 + data = length 88, hash E9DF2786 + sample 160: + time = 2510000 + flags = 1 + data = length 89, hash 2CA33D96 + sample 161: + time = 2520000 + flags = 1 + data = length 90, hash 96BDE594 + sample 162: + time = 2530000 + flags = 1 + data = length 87, hash C261493C + sample 163: + time = 2540000 + flags = 1 + data = length 86, hash D037318E + sample 164: + time = 2550000 + flags = 1 + data = length 88, hash BC15BC88 + sample 165: + time = 2560000 + flags = 1 + data = length 91, hash A8361A51 + sample 166: + time = 2570000 + flags = 1 + data = length 87, hash 4AFDB5F2 + sample 167: + time = 2580000 + flags = 1 + data = length 87, hash 6447F8CB + sample 168: + time = 2590000 + flags = 1 + data = length 89, hash 48305229 + sample 169: + time = 2600000 + flags = 1 + data = length 87, hash 8741D9E7 + sample 170: + time = 2610000 + flags = 1 + data = length 120, hash 761F020C + sample 171: + time = 2620000 + flags = 1 + data = length 139, hash AECE2E57 + sample 172: + time = 2630000 + flags = 1 + data = length 166, hash 6288797A + sample 173: + time = 2640000 + flags = 1 + data = length 144, hash 437821A0 + sample 174: + time = 2650000 + flags = 1 + data = length 113, hash FCCBEDF1 + sample 175: + time = 2660000 + flags = 1 + data = length 108, hash C4040614 + sample 176: + time = 2670000 + flags = 1 + data = length 125, hash E29064C2 + sample 177: + time = 2680000 + flags = 1 + data = length 126, hash D42D24FF + sample 178: + time = 2690000 + flags = 1 + data = length 122, hash 30AF267D + sample 179: + time = 2700000 + flags = 1 + data = length 122, hash 45CEC1FB + sample 180: + time = 2710000 + flags = 1 + data = length 134, hash 59143FE2 + sample 181: + time = 2720000 + flags = 1 + data = length 134, hash BD52A84 + sample 182: + time = 2730000 + flags = 1 + data = length 120, hash 745C3714 + sample 183: + time = 2740000 + flags = 1 + data = length 126, hash 505E117B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump new file mode 100644 index 0000000000..d1ddcab42c --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump @@ -0,0 +1,389 @@ +seekMap: + isSeekable = true + duration = 2747500 + getPosition(0) = [[timeUs=0, position=250]] + getPosition(1) = [[timeUs=1, position=250]] + getPosition(1373750) = [[timeUs=1373750, position=250]] + getPosition(2747500) = [[timeUs=2747500, position=250]] +numberOfTracks = 1 +track 0: + total output bytes = 8698 + sample count = 92 + format 0: + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 48000 + metadata = entries=[VC: encoder=Lavf54.20.4] + initializationData: + data = length 19, hash BFE794DB + data = length 8, hash CA22068C + data = length 8, hash 79C07075 + sample 0: + time = 1830000 + flags = 1 + data = length 86, hash 64D21AA1 + sample 1: + time = 1840000 + flags = 1 + data = length 86, hash A1FAAF2C + sample 2: + time = 1850000 + flags = 1 + data = length 86, hash ECA80F7E + sample 3: + time = 1860000 + flags = 1 + data = length 86, hash FEB03B2C + sample 4: + time = 1870000 + flags = 1 + data = length 85, hash 2C2E6B2F + sample 5: + time = 1880000 + flags = 1 + data = length 89, hash A0D7AC3 + sample 6: + time = 1890000 + flags = 1 + data = length 87, hash 83739547 + sample 7: + time = 1900000 + flags = 1 + data = length 86, hash 991E531E + sample 8: + time = 1910000 + flags = 1 + data = length 88, hash 16B287A3 + sample 9: + time = 1920000 + flags = 1 + data = length 86, hash FC86EED + sample 10: + time = 1930000 + flags = 1 + data = length 86, hash 96AF0248 + sample 11: + time = 1940000 + flags = 1 + data = length 86, hash 288402C8 + sample 12: + time = 1950000 + flags = 1 + data = length 87, hash 4BBA7912 + sample 13: + time = 1960000 + flags = 1 + data = length 86, hash 4A59C719 + sample 14: + time = 1970000 + flags = 1 + data = length 85, hash 906E8187 + sample 15: + time = 1980000 + flags = 1 + data = length 90, hash CB8B755D + sample 16: + time = 1990000 + flags = 1 + data = length 87, hash C8E02C + sample 17: + time = 2000000 + flags = 1 + data = length 88, hash ACF4D89A + sample 18: + time = 2010000 + flags = 1 + data = length 86, hash 510FE048 + sample 19: + time = 2020000 + flags = 1 + data = length 86, hash 64983E46 + sample 20: + time = 2030000 + flags = 1 + data = length 86, hash CEA76A1E + sample 21: + time = 2040000 + flags = 1 + data = length 87, hash AADE498E + sample 22: + time = 2050000 + flags = 1 + data = length 127, hash 353A6D8C + sample 23: + time = 2060000 + flags = 1 + data = length 87, hash 29E18E62 + sample 24: + time = 2070000 + flags = 1 + data = length 87, hash 2CF7B30F + sample 25: + time = 2080000 + flags = 1 + data = length 94, hash 758704C3 + sample 26: + time = 2090000 + flags = 1 + data = length 88, hash C2153A4C + sample 27: + time = 2100000 + flags = 1 + data = length 86, hash A0A83DA5 + sample 28: + time = 2110000 + flags = 1 + data = length 86, hash 41017D7F + sample 29: + time = 2120000 + flags = 1 + data = length 93, hash 686B0CA2 + sample 30: + time = 2130000 + flags = 1 + data = length 86, hash 554D16CC + sample 31: + time = 2140000 + flags = 1 + data = length 88, hash 99D72771 + sample 32: + time = 2150000 + flags = 1 + data = length 88, hash 7176DFBF + sample 33: + time = 2160000 + flags = 1 + data = length 86, hash BAA22669 + sample 34: + time = 2170000 + flags = 1 + data = length 88, hash B00B0D3C + sample 35: + time = 2180000 + flags = 1 + data = length 89, hash 73FED83A + sample 36: + time = 2190000 + flags = 1 + data = length 86, hash 4A4138D3 + sample 37: + time = 2200000 + flags = 1 + data = length 89, hash E0A860FF + sample 38: + time = 2210000 + flags = 1 + data = length 95, hash EE5A8AED + sample 39: + time = 2220000 + flags = 1 + data = length 92, hash 36DBD7FD + sample 40: + time = 2230000 + flags = 1 + data = length 88, hash EE47A7E4 + sample 41: + time = 2240000 + flags = 1 + data = length 100, hash 2E1A603F + sample 42: + time = 2250000 + flags = 1 + data = length 89, hash 657ED4A3 + sample 43: + time = 2260000 + flags = 1 + data = length 86, hash A833DC7B + sample 44: + time = 2270000 + flags = 1 + data = length 88, hash 81E80732 + sample 45: + time = 2280000 + flags = 1 + data = length 91, hash FA256A0F + sample 46: + time = 2290000 + flags = 1 + data = length 88, hash A63A4DBA + sample 47: + time = 2300000 + flags = 1 + data = length 88, hash 67910A9F + sample 48: + time = 2310000 + flags = 1 + data = length 86, hash EB387DB6 + sample 49: + time = 2320000 + flags = 1 + data = length 88, hash 5ACAAC2A + sample 50: + time = 2330000 + flags = 1 + data = length 86, hash 6ADF2E1F + sample 51: + time = 2340000 + flags = 1 + data = length 85, hash 9D064471 + sample 52: + time = 2350000 + flags = 1 + data = length 87, hash F176C59 + sample 53: + time = 2360000 + flags = 1 + data = length 89, hash 5CA40CE4 + sample 54: + time = 2370000 + flags = 1 + data = length 88, hash 67B944FC + sample 55: + time = 2380000 + flags = 1 + data = length 86, hash B3A84EC8 + sample 56: + time = 2390000 + flags = 1 + data = length 92, hash A6ACF94B + sample 57: + time = 2400000 + flags = 1 + data = length 88, hash CB0C9730 + sample 58: + time = 2410000 + flags = 1 + data = length 88, hash C79FE804 + sample 59: + time = 2420000 + flags = 1 + data = length 88, hash A74C7F0A + sample 60: + time = 2430000 + flags = 1 + data = length 91, hash 55F6F0A5 + sample 61: + time = 2440000 + flags = 1 + data = length 93, hash 330F33E7 + sample 62: + time = 2450000 + flags = 1 + data = length 89, hash 614AFBA0 + sample 63: + time = 2460000 + flags = 1 + data = length 87, hash 3CE4652D + sample 64: + time = 2470000 + flags = 1 + data = length 87, hash 4EFD5467 + sample 65: + time = 2480000 + flags = 1 + data = length 86, hash D81B3EB8 + sample 66: + time = 2490000 + flags = 1 + data = length 88, hash 96CB6871 + sample 67: + time = 2500000 + flags = 1 + data = length 88, hash E9DF2786 + sample 68: + time = 2510000 + flags = 1 + data = length 89, hash 2CA33D96 + sample 69: + time = 2520000 + flags = 1 + data = length 90, hash 96BDE594 + sample 70: + time = 2530000 + flags = 1 + data = length 87, hash C261493C + sample 71: + time = 2540000 + flags = 1 + data = length 86, hash D037318E + sample 72: + time = 2550000 + flags = 1 + data = length 88, hash BC15BC88 + sample 73: + time = 2560000 + flags = 1 + data = length 91, hash A8361A51 + sample 74: + time = 2570000 + flags = 1 + data = length 87, hash 4AFDB5F2 + sample 75: + time = 2580000 + flags = 1 + data = length 87, hash 6447F8CB + sample 76: + time = 2590000 + flags = 1 + data = length 89, hash 48305229 + sample 77: + time = 2600000 + flags = 1 + data = length 87, hash 8741D9E7 + sample 78: + time = 2610000 + flags = 1 + data = length 120, hash 761F020C + sample 79: + time = 2620000 + flags = 1 + data = length 139, hash AECE2E57 + sample 80: + time = 2630000 + flags = 1 + data = length 166, hash 6288797A + sample 81: + time = 2640000 + flags = 1 + data = length 144, hash 437821A0 + sample 82: + time = 2650000 + flags = 1 + data = length 113, hash FCCBEDF1 + sample 83: + time = 2660000 + flags = 1 + data = length 108, hash C4040614 + sample 84: + time = 2670000 + flags = 1 + data = length 125, hash E29064C2 + sample 85: + time = 2680000 + flags = 1 + data = length 126, hash D42D24FF + sample 86: + time = 2690000 + flags = 1 + data = length 122, hash 30AF267D + sample 87: + time = 2700000 + flags = 1 + data = length 122, hash 45CEC1FB + sample 88: + time = 2710000 + flags = 1 + data = length 134, hash 59143FE2 + sample 89: + time = 2720000 + flags = 1 + data = length 134, hash BD52A84 + sample 90: + time = 2730000 + flags = 1 + data = length 120, hash 745C3714 + sample 91: + time = 2740000 + flags = 1 + data = length 126, hash 505E117B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump new file mode 100644 index 0000000000..cf5a6cba2a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump @@ -0,0 +1,25 @@ +seekMap: + isSeekable = true + duration = 2747500 + getPosition(0) = [[timeUs=0, position=250]] + getPosition(1) = [[timeUs=1, position=250]] + getPosition(1373750) = [[timeUs=1373750, position=250]] + getPosition(2747500) = [[timeUs=2747500, position=250]] +numberOfTracks = 1 +track 0: + total output bytes = 126 + sample count = 1 + format 0: + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 48000 + metadata = entries=[VC: encoder=Lavf54.20.4] + initializationData: + data = length 19, hash BFE794DB + data = length 8, hash CA22068C + data = length 8, hash 79C07075 + sample 0: + time = 2741000 + flags = 1 + data = length 126, hash 505E117B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump new file mode 100644 index 0000000000..b5f4b1b400 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump @@ -0,0 +1,1118 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 1 +track 0: + total output bytes = 25541 + sample count = 275 + format 0: + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 48000 + metadata = entries=[VC: encoder=Lavf54.20.4] + initializationData: + data = length 19, hash BFE794DB + data = length 8, hash CA22068C + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 234, hash B77BFFDA + sample 1: + time = 10000 + flags = 1 + data = length 165, hash F7B07C35 + sample 2: + time = 20000 + flags = 1 + data = length 100, hash 21AFA81F + sample 3: + time = 30000 + flags = 1 + data = length 85, hash 9180DC2F + sample 4: + time = 40000 + flags = 1 + data = length 85, hash 6AE958C + sample 5: + time = 50000 + flags = 1 + data = length 86, hash C1C5AE60 + sample 6: + time = 60000 + flags = 1 + data = length 87, hash B9BD2620 + sample 7: + time = 70000 + flags = 1 + data = length 86, hash 5E69E6F9 + sample 8: + time = 80000 + flags = 1 + data = length 90, hash C44C7DD9 + sample 9: + time = 90000 + flags = 1 + data = length 86, hash C3FCDC6F + sample 10: + time = 100000 + flags = 1 + data = length 86, hash 44EA03BA + sample 11: + time = 110000 + flags = 1 + data = length 160, hash 9F4E1AE8 + sample 12: + time = 120000 + flags = 1 + data = length 89, hash 31234460 + sample 13: + time = 130000 + flags = 1 + data = length 91, hash 45012D79 + sample 14: + time = 140000 + flags = 1 + data = length 90, hash B3E3AC75 + sample 15: + time = 150000 + flags = 1 + data = length 87, hash B83B756B + sample 16: + time = 160000 + flags = 1 + data = length 86, hash 383921EB + sample 17: + time = 170000 + flags = 1 + data = length 97, hash 959AD270 + sample 18: + time = 180000 + flags = 1 + data = length 92, hash 46C74FA8 + sample 19: + time = 190000 + flags = 1 + data = length 91, hash CEA401DD + sample 20: + time = 200000 + flags = 1 + data = length 89, hash 48C41853 + sample 21: + time = 210000 + flags = 1 + data = length 90, hash F23245BD + sample 22: + time = 220000 + flags = 1 + data = length 96, hash 95E8985D + sample 23: + time = 230000 + flags = 1 + data = length 96, hash 34295492 + sample 24: + time = 240000 + flags = 1 + data = length 94, hash 4E3C9C0F + sample 25: + time = 250000 + flags = 1 + data = length 89, hash 28B74A29 + sample 26: + time = 260000 + flags = 1 + data = length 87, hash BAC119A7 + sample 27: + time = 270000 + flags = 1 + data = length 88, hash 7139FF38 + sample 28: + time = 280000 + flags = 1 + data = length 85, hash 246E1D2A + sample 29: + time = 290000 + flags = 1 + data = length 86, hash 488A0900 + sample 30: + time = 300000 + flags = 1 + data = length 90, hash 16FD17B1 + sample 31: + time = 310000 + flags = 1 + data = length 87, hash 20E849D9 + sample 32: + time = 320000 + flags = 1 + data = length 86, hash 23A0E9BA + sample 33: + time = 330000 + flags = 1 + data = length 87, hash EC935537 + sample 34: + time = 340000 + flags = 1 + data = length 92, hash 4D9935AD + sample 35: + time = 350000 + flags = 1 + data = length 87, hash DEDE3FA + sample 36: + time = 360000 + flags = 1 + data = length 87, hash ADC25A6E + sample 37: + time = 370000 + flags = 1 + data = length 88, hash A1C828C5 + sample 38: + time = 380000 + flags = 1 + data = length 89, hash 735C087A + sample 39: + time = 390000 + flags = 1 + data = length 89, hash 19AF5D10 + sample 40: + time = 400000 + flags = 1 + data = length 90, hash BCCEA2BB + sample 41: + time = 410000 + flags = 1 + data = length 86, hash A7C934A0 + sample 42: + time = 420000 + flags = 1 + data = length 86, hash 28BBC0A8 + sample 43: + time = 430000 + flags = 1 + data = length 85, hash E60BB12D + sample 44: + time = 440000 + flags = 1 + data = length 141, hash 1D2B8920 + sample 45: + time = 450000 + flags = 1 + data = length 121, hash 8AA3E19C + sample 46: + time = 460000 + flags = 1 + data = length 86, hash 24DF0F37 + sample 47: + time = 470000 + flags = 1 + data = length 86, hash 1D1775FF + sample 48: + time = 480000 + flags = 1 + data = length 87, hash 5230399E + sample 49: + time = 490000 + flags = 1 + data = length 91, hash 6CD98305 + sample 50: + time = 500000 + flags = 1 + data = length 88, hash 4069FBB + sample 51: + time = 510000 + flags = 1 + data = length 89, hash 76824ABF + sample 52: + time = 520000 + flags = 1 + data = length 87, hash BC1B1322 + sample 53: + time = 530000 + flags = 1 + data = length 102, hash E01BA053 + sample 54: + time = 540000 + flags = 1 + data = length 85, hash C09B626D + sample 55: + time = 550000 + flags = 1 + data = length 88, hash 6B7B404A + sample 56: + time = 560000 + flags = 1 + data = length 85, hash 74A15DC7 + sample 57: + time = 570000 + flags = 1 + data = length 88, hash 38DB82E5 + sample 58: + time = 580000 + flags = 1 + data = length 86, hash 1A39C081 + sample 59: + time = 590000 + flags = 1 + data = length 87, hash 39FEC92 + sample 60: + time = 600000 + flags = 1 + data = length 92, hash 278EA09 + sample 61: + time = 610000 + flags = 1 + data = length 87, hash 28265F2D + sample 62: + time = 620000 + flags = 1 + data = length 86, hash CC2040C6 + sample 63: + time = 630000 + flags = 1 + data = length 138, hash 9E07BC1F + sample 64: + time = 640000 + flags = 1 + data = length 85, hash 4F299670 + sample 65: + time = 650000 + flags = 1 + data = length 125, hash B61123C3 + sample 66: + time = 660000 + flags = 1 + data = length 89, hash 5CC688ED + sample 67: + time = 670000 + flags = 1 + data = length 88, hash 84AF64A6 + sample 68: + time = 680000 + flags = 1 + data = length 89, hash A9BFC8DC + sample 69: + time = 690000 + flags = 1 + data = length 90, hash 2FF77060 + sample 70: + time = 700000 + flags = 1 + data = length 96, hash E11AFD61 + sample 71: + time = 710000 + flags = 1 + data = length 87, hash 85D14EDA + sample 72: + time = 720000 + flags = 1 + data = length 88, hash 5FC71D53 + sample 73: + time = 730000 + flags = 1 + data = length 89, hash 957187B6 + sample 74: + time = 740000 + flags = 1 + data = length 89, hash 5A776082 + sample 75: + time = 750000 + flags = 1 + data = length 87, hash E8A83AFE + sample 76: + time = 760000 + flags = 1 + data = length 87, hash F1989133 + sample 77: + time = 770000 + flags = 1 + data = length 87, hash FA06BCCA + sample 78: + time = 780000 + flags = 1 + data = length 86, hash BD97E0C0 + sample 79: + time = 790000 + flags = 1 + data = length 88, hash E6AE022C + sample 80: + time = 800000 + flags = 1 + data = length 87, hash FB6C6169 + sample 81: + time = 810000 + flags = 1 + data = length 87, hash DFFCD2CF + sample 82: + time = 820000 + flags = 1 + data = length 88, hash A4B5EB52 + sample 83: + time = 830000 + flags = 1 + data = length 85, hash A63CF4EA + sample 84: + time = 840000 + flags = 1 + data = length 86, hash F126E7C7 + sample 85: + time = 850000 + flags = 1 + data = length 86, hash 21A8B22F + sample 86: + time = 860000 + flags = 1 + data = length 87, hash 6520E7C1 + sample 87: + time = 870000 + flags = 1 + data = length 88, hash 825B7423 + sample 88: + time = 880000 + flags = 1 + data = length 88, hash DF3DBD48 + sample 89: + time = 890000 + flags = 1 + data = length 87, hash B32C68D0 + sample 90: + time = 900000 + flags = 1 + data = length 89, hash B99DFFCA + sample 91: + time = 910000 + flags = 1 + data = length 88, hash 9C8D5178 + sample 92: + time = 920000 + flags = 1 + data = length 88, hash 48A0B19A + sample 93: + time = 930000 + flags = 1 + data = length 88, hash B62C94DD + sample 94: + time = 940000 + flags = 1 + data = length 92, hash 96DBDD46 + sample 95: + time = 950000 + flags = 1 + data = length 87, hash 7B80E6F + sample 96: + time = 960000 + flags = 1 + data = length 86, hash 9C60225B + sample 97: + time = 970000 + flags = 1 + data = length 87, hash 45F7E6E8 + sample 98: + time = 980000 + flags = 1 + data = length 87, hash DDC2D592 + sample 99: + time = 990000 + flags = 1 + data = length 91, hash 173D3B26 + sample 100: + time = 1000000 + flags = 1 + data = length 87, hash CF3629DF + sample 101: + time = 1010000 + flags = 1 + data = length 87, hash BBE2E7B3 + sample 102: + time = 1020000 + flags = 1 + data = length 89, hash 89AFFB10 + sample 103: + time = 1030000 + flags = 1 + data = length 88, hash 510DCC90 + sample 104: + time = 1040000 + flags = 1 + data = length 88, hash CBA56E5F + sample 105: + time = 1050000 + flags = 1 + data = length 87, hash B4B1B3FF + sample 106: + time = 1060000 + flags = 1 + data = length 89, hash B976A537 + sample 107: + time = 1070000 + flags = 1 + data = length 96, hash 43ECF2C1 + sample 108: + time = 1080000 + flags = 1 + data = length 90, hash BB7ECB44 + sample 109: + time = 1090000 + flags = 1 + data = length 89, hash B8E221A5 + sample 110: + time = 1100000 + flags = 1 + data = length 86, hash B35BEF5B + sample 111: + time = 1110000 + flags = 1 + data = length 89, hash 9002F0EC + sample 112: + time = 1120000 + flags = 1 + data = length 85, hash F694B20 + sample 113: + time = 1130000 + flags = 1 + data = length 87, hash D7CC386E + sample 114: + time = 1140000 + flags = 1 + data = length 89, hash EE9E0E79 + sample 115: + time = 1150000 + flags = 1 + data = length 90, hash CA72C96B + sample 116: + time = 1160000 + flags = 1 + data = length 112, hash 4AD3D1B1 + sample 117: + time = 1170000 + flags = 1 + data = length 87, hash FA568FAB + sample 118: + time = 1180000 + flags = 1 + data = length 90, hash 6E6948D2 + sample 119: + time = 1190000 + flags = 1 + data = length 89, hash 5465A762 + sample 120: + time = 1200000 + flags = 1 + data = length 87, hash BED19B40 + sample 121: + time = 1210000 + flags = 1 + data = length 89, hash 5D05836A + sample 122: + time = 1220000 + flags = 1 + data = length 87, hash A8A3EF5A + sample 123: + time = 1230000 + flags = 1 + data = length 90, hash 6425A77A + sample 124: + time = 1240000 + flags = 1 + data = length 92, hash 7F320FA + sample 125: + time = 1250000 + flags = 1 + data = length 89, hash 2C7837D6 + sample 126: + time = 1260000 + flags = 1 + data = length 86, hash 58D56685 + sample 127: + time = 1270000 + flags = 1 + data = length 91, hash ADC5072F + sample 128: + time = 1280000 + flags = 1 + data = length 85, hash 53EFD93 + sample 129: + time = 1290000 + flags = 1 + data = length 87, hash D006B535 + sample 130: + time = 1300000 + flags = 1 + data = length 86, hash AE944625 + sample 131: + time = 1310000 + flags = 1 + data = length 89, hash B5D3C81D + sample 132: + time = 1320000 + flags = 1 + data = length 86, hash 3BB1D0E7 + sample 133: + time = 1330000 + flags = 1 + data = length 102, hash 16EEC441 + sample 134: + time = 1340000 + flags = 1 + data = length 90, hash 1005B936 + sample 135: + time = 1350000 + flags = 1 + data = length 85, hash 15EEBF9A + sample 136: + time = 1360000 + flags = 1 + data = length 87, hash 37C83AC2 + sample 137: + time = 1370000 + flags = 1 + data = length 85, hash 2D27855D + sample 138: + time = 1380000 + flags = 1 + data = length 85, hash 753EB7C6 + sample 139: + time = 1390000 + flags = 1 + data = length 91, hash C0813318 + sample 140: + time = 1400000 + flags = 1 + data = length 89, hash 3A6468AC + sample 141: + time = 1410000 + flags = 1 + data = length 88, hash 3D220ABC + sample 142: + time = 1420000 + flags = 1 + data = length 140, hash 7949ABC7 + sample 143: + time = 1430000 + flags = 1 + data = length 92, hash F19AFA45 + sample 144: + time = 1440000 + flags = 1 + data = length 90, hash 3D21587C + sample 145: + time = 1450000 + flags = 1 + data = length 89, hash 5C12226C + sample 146: + time = 1460000 + flags = 1 + data = length 90, hash 22BA14FC + sample 147: + time = 1470000 + flags = 1 + data = length 88, hash F064B21C + sample 148: + time = 1480000 + flags = 1 + data = length 87, hash 6D7906B9 + sample 149: + time = 1490000 + flags = 1 + data = length 88, hash 6756A484 + sample 150: + time = 1500000 + flags = 1 + data = length 91, hash C95C00B6 + sample 151: + time = 1510000 + flags = 1 + data = length 87, hash 728D8119 + sample 152: + time = 1520000 + flags = 1 + data = length 90, hash C43DA1B4 + sample 153: + time = 1530000 + flags = 1 + data = length 88, hash C181BB57 + sample 154: + time = 1540000 + flags = 1 + data = length 84, hash F75B1639 + sample 155: + time = 1550000 + flags = 1 + data = length 87, hash B6F32978 + sample 156: + time = 1560000 + flags = 1 + data = length 90, hash 36D6E2D7 + sample 157: + time = 1570000 + flags = 1 + data = length 87, hash 4C9657A7 + sample 158: + time = 1580000 + flags = 1 + data = length 89, hash C3BDB9B7 + sample 159: + time = 1590000 + flags = 1 + data = length 88, hash DB51087E + sample 160: + time = 1600000 + flags = 1 + data = length 86, hash 1550F998 + sample 161: + time = 1610000 + flags = 1 + data = length 86, hash A445FAD4 + sample 162: + time = 1620000 + flags = 1 + data = length 85, hash 60D3362C + sample 163: + time = 1630000 + flags = 1 + data = length 172, hash 945D63E4 + sample 164: + time = 1640000 + flags = 1 + data = length 107, hash 585B7C04 + sample 165: + time = 1650000 + flags = 1 + data = length 110, hash 74BECF69 + sample 166: + time = 1660000 + flags = 1 + data = length 87, hash 63DE1D24 + sample 167: + time = 1670000 + flags = 1 + data = length 90, hash 1C1D28DB + sample 168: + time = 1680000 + flags = 1 + data = length 87, hash CB382A67 + sample 169: + time = 1690000 + flags = 1 + data = length 85, hash A227BA13 + sample 170: + time = 1700000 + flags = 1 + data = length 86, hash EFD8B10B + sample 171: + time = 1710000 + flags = 1 + data = length 87, hash 47FF364A + sample 172: + time = 1720000 + flags = 1 + data = length 91, hash 31D4B48A + sample 173: + time = 1730000 + flags = 1 + data = length 91, hash DD69BD85 + sample 174: + time = 1740000 + flags = 1 + data = length 88, hash AF1A95C6 + sample 175: + time = 1750000 + flags = 1 + data = length 87, hash 2FB8AF74 + sample 176: + time = 1760000 + flags = 1 + data = length 92, hash 173C707A + sample 177: + time = 1770000 + flags = 1 + data = length 88, hash 5F58F5E8 + sample 178: + time = 1780000 + flags = 1 + data = length 91, hash D449785F + sample 179: + time = 1790000 + flags = 1 + data = length 91, hash CE2CB465 + sample 180: + time = 1800000 + flags = 1 + data = length 93, hash ABC1C62E + sample 181: + time = 1810000 + flags = 1 + data = length 87, hash 83B4B9A0 + sample 182: + time = 1820000 + flags = 1 + data = length 87, hash 3220D562 + sample 183: + time = 1830000 + flags = 1 + data = length 86, hash 64D21AA1 + sample 184: + time = 1840000 + flags = 1 + data = length 86, hash A1FAAF2C + sample 185: + time = 1850000 + flags = 1 + data = length 86, hash ECA80F7E + sample 186: + time = 1860000 + flags = 1 + data = length 86, hash FEB03B2C + sample 187: + time = 1870000 + flags = 1 + data = length 85, hash 2C2E6B2F + sample 188: + time = 1880000 + flags = 1 + data = length 89, hash A0D7AC3 + sample 189: + time = 1890000 + flags = 1 + data = length 87, hash 83739547 + sample 190: + time = 1900000 + flags = 1 + data = length 86, hash 991E531E + sample 191: + time = 1910000 + flags = 1 + data = length 88, hash 16B287A3 + sample 192: + time = 1920000 + flags = 1 + data = length 86, hash FC86EED + sample 193: + time = 1930000 + flags = 1 + data = length 86, hash 96AF0248 + sample 194: + time = 1940000 + flags = 1 + data = length 86, hash 288402C8 + sample 195: + time = 1950000 + flags = 1 + data = length 87, hash 4BBA7912 + sample 196: + time = 1960000 + flags = 1 + data = length 86, hash 4A59C719 + sample 197: + time = 1970000 + flags = 1 + data = length 85, hash 906E8187 + sample 198: + time = 1980000 + flags = 1 + data = length 90, hash CB8B755D + sample 199: + time = 1990000 + flags = 1 + data = length 87, hash C8E02C + sample 200: + time = 2000000 + flags = 1 + data = length 88, hash ACF4D89A + sample 201: + time = 2010000 + flags = 1 + data = length 86, hash 510FE048 + sample 202: + time = 2020000 + flags = 1 + data = length 86, hash 64983E46 + sample 203: + time = 2030000 + flags = 1 + data = length 86, hash CEA76A1E + sample 204: + time = 2040000 + flags = 1 + data = length 87, hash AADE498E + sample 205: + time = 2050000 + flags = 1 + data = length 127, hash 353A6D8C + sample 206: + time = 2060000 + flags = 1 + data = length 87, hash 29E18E62 + sample 207: + time = 2070000 + flags = 1 + data = length 87, hash 2CF7B30F + sample 208: + time = 2080000 + flags = 1 + data = length 94, hash 758704C3 + sample 209: + time = 2090000 + flags = 1 + data = length 88, hash C2153A4C + sample 210: + time = 2100000 + flags = 1 + data = length 86, hash A0A83DA5 + sample 211: + time = 2110000 + flags = 1 + data = length 86, hash 41017D7F + sample 212: + time = 2120000 + flags = 1 + data = length 93, hash 686B0CA2 + sample 213: + time = 2130000 + flags = 1 + data = length 86, hash 554D16CC + sample 214: + time = 2140000 + flags = 1 + data = length 88, hash 99D72771 + sample 215: + time = 2150000 + flags = 1 + data = length 88, hash 7176DFBF + sample 216: + time = 2160000 + flags = 1 + data = length 86, hash BAA22669 + sample 217: + time = 2170000 + flags = 1 + data = length 88, hash B00B0D3C + sample 218: + time = 2180000 + flags = 1 + data = length 89, hash 73FED83A + sample 219: + time = 2190000 + flags = 1 + data = length 86, hash 4A4138D3 + sample 220: + time = 2200000 + flags = 1 + data = length 89, hash E0A860FF + sample 221: + time = 2210000 + flags = 1 + data = length 95, hash EE5A8AED + sample 222: + time = 2220000 + flags = 1 + data = length 92, hash 36DBD7FD + sample 223: + time = 2230000 + flags = 1 + data = length 88, hash EE47A7E4 + sample 224: + time = 2240000 + flags = 1 + data = length 100, hash 2E1A603F + sample 225: + time = 2250000 + flags = 1 + data = length 89, hash 657ED4A3 + sample 226: + time = 2260000 + flags = 1 + data = length 86, hash A833DC7B + sample 227: + time = 2270000 + flags = 1 + data = length 88, hash 81E80732 + sample 228: + time = 2280000 + flags = 1 + data = length 91, hash FA256A0F + sample 229: + time = 2290000 + flags = 1 + data = length 88, hash A63A4DBA + sample 230: + time = 2300000 + flags = 1 + data = length 88, hash 67910A9F + sample 231: + time = 2310000 + flags = 1 + data = length 86, hash EB387DB6 + sample 232: + time = 2320000 + flags = 1 + data = length 88, hash 5ACAAC2A + sample 233: + time = 2330000 + flags = 1 + data = length 86, hash 6ADF2E1F + sample 234: + time = 2340000 + flags = 1 + data = length 85, hash 9D064471 + sample 235: + time = 2350000 + flags = 1 + data = length 87, hash F176C59 + sample 236: + time = 2360000 + flags = 1 + data = length 89, hash 5CA40CE4 + sample 237: + time = 2370000 + flags = 1 + data = length 88, hash 67B944FC + sample 238: + time = 2380000 + flags = 1 + data = length 86, hash B3A84EC8 + sample 239: + time = 2390000 + flags = 1 + data = length 92, hash A6ACF94B + sample 240: + time = 2400000 + flags = 1 + data = length 88, hash CB0C9730 + sample 241: + time = 2410000 + flags = 1 + data = length 88, hash C79FE804 + sample 242: + time = 2420000 + flags = 1 + data = length 88, hash A74C7F0A + sample 243: + time = 2430000 + flags = 1 + data = length 91, hash 55F6F0A5 + sample 244: + time = 2440000 + flags = 1 + data = length 93, hash 330F33E7 + sample 245: + time = 2450000 + flags = 1 + data = length 89, hash 614AFBA0 + sample 246: + time = 2460000 + flags = 1 + data = length 87, hash 3CE4652D + sample 247: + time = 2470000 + flags = 1 + data = length 87, hash 4EFD5467 + sample 248: + time = 2480000 + flags = 1 + data = length 86, hash D81B3EB8 + sample 249: + time = 2490000 + flags = 1 + data = length 88, hash 96CB6871 + sample 250: + time = 2500000 + flags = 1 + data = length 88, hash E9DF2786 + sample 251: + time = 2510000 + flags = 1 + data = length 89, hash 2CA33D96 + sample 252: + time = 2520000 + flags = 1 + data = length 90, hash 96BDE594 + sample 253: + time = 2530000 + flags = 1 + data = length 87, hash C261493C + sample 254: + time = 2540000 + flags = 1 + data = length 86, hash D037318E + sample 255: + time = 2550000 + flags = 1 + data = length 88, hash BC15BC88 + sample 256: + time = 2560000 + flags = 1 + data = length 91, hash A8361A51 + sample 257: + time = 2570000 + flags = 1 + data = length 87, hash 4AFDB5F2 + sample 258: + time = 2580000 + flags = 1 + data = length 87, hash 6447F8CB + sample 259: + time = 2590000 + flags = 1 + data = length 89, hash 48305229 + sample 260: + time = 2600000 + flags = 1 + data = length 87, hash 8741D9E7 + sample 261: + time = 2610000 + flags = 1 + data = length 120, hash 761F020C + sample 262: + time = 2620000 + flags = 1 + data = length 139, hash AECE2E57 + sample 263: + time = 2630000 + flags = 1 + data = length 166, hash 6288797A + sample 264: + time = 2640000 + flags = 1 + data = length 144, hash 437821A0 + sample 265: + time = 2650000 + flags = 1 + data = length 113, hash FCCBEDF1 + sample 266: + time = 2660000 + flags = 1 + data = length 108, hash C4040614 + sample 267: + time = 2670000 + flags = 1 + data = length 125, hash E29064C2 + sample 268: + time = 2680000 + flags = 1 + data = length 126, hash D42D24FF + sample 269: + time = 2690000 + flags = 1 + data = length 122, hash 30AF267D + sample 270: + time = 2700000 + flags = 1 + data = length 122, hash 45CEC1FB + sample 271: + time = 2710000 + flags = 1 + data = length 134, hash 59143FE2 + sample 272: + time = 2720000 + flags = 1 + data = length 134, hash BD52A84 + sample 273: + time = 2730000 + flags = 1 + data = length 120, hash 745C3714 + sample 274: + time = 2740000 + flags = 1 + data = length 126, hash 505E117B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/ogg/bear_duplicate_header.opus b/libraries/test_data/src/test/assets/media/ogg/bear_duplicate_header.opus new file mode 100644 index 0000000000..aa4e9d6064 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/ogg/bear_duplicate_header.opus differ