From 27e0c80792aaa700d3646a5a0eab70e2fc3894ce Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 31 May 2022 11:52:14 +0000 Subject: [PATCH] Permit duplicate Opus headers This reinstates the permissive behaviour removed by https://github.com/google/ExoPlayer/commit/fe7e5b8181333683fda7869c3d9cffc0bdefcccb Test file created by opening bear.opus in a hex editor and naively duplicating the two header packets, starting at (and including) the first `OggS` in the file and ending just before the third `OggS`. #minor-release Issue: google/ExoPlayer#10038 PiperOrigin-RevId: 452015662 (cherry picked from commit b6b282672c45263d0f9e2b6ece4f6de1083812cb) --- .../exoplayer2/extractor/ogg/OpusReader.java | 32 +- .../ogg/OggExtractorParameterizedTest.java | 7 + .../ogg/bear_duplicate_header.opus.0.dump | 1121 +++++++++++++++++ .../ogg/bear_duplicate_header.opus.1.dump | 757 +++++++++++ .../ogg/bear_duplicate_header.opus.2.dump | 389 ++++++ .../ogg/bear_duplicate_header.opus.3.dump | 25 + ..._duplicate_header.opus.unknown_length.dump | 1118 ++++++++++++++++ .../media/ogg/bear_duplicate_header.opus | Bin 0 -> 26120 bytes 8 files changed, 3445 insertions(+), 4 deletions(-) create mode 100644 testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump create mode 100644 testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump create mode 100644 testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump create mode 100644 testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump create mode 100644 testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump create mode 100644 testdata/src/test/assets/media/ogg/bear_duplicate_header.opus diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java index e092d7001bd..531774f93c5 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.extractor.ogg; -import static com.google.android.exoplayer2.util.Assertions.checkState; import static com.google.android.exoplayer2.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/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorParameterizedTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorParameterizedTest.java index 8cbe254f07f..44c4557be49 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggExtractorParameterizedTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/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/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump b/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.0.dump new file mode 100644 index 00000000000..69acdcf9e9f --- /dev/null +++ b/testdata/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/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump b/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.1.dump new file mode 100644 index 00000000000..9bab0eadb13 --- /dev/null +++ b/testdata/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/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump b/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.2.dump new file mode 100644 index 00000000000..d1ddcab42c3 --- /dev/null +++ b/testdata/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/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump b/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.3.dump new file mode 100644 index 00000000000..cf5a6cba2ae --- /dev/null +++ b/testdata/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/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump b/testdata/src/test/assets/extractordumps/ogg/bear_duplicate_header.opus.unknown_length.dump new file mode 100644 index 00000000000..b5f4b1b400b --- /dev/null +++ b/testdata/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/testdata/src/test/assets/media/ogg/bear_duplicate_header.opus b/testdata/src/test/assets/media/ogg/bear_duplicate_header.opus new file mode 100644 index 0000000000000000000000000000000000000000..aa4e9d6064b2fe0587bb54d76b47095891bf80fd GIT binary patch literal 26120 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 literal 0 HcmV?d00001