From 551cbadafc27be780372d16730bf28c65e6dd64a Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 2 Sep 2024 02:07:02 -0700 Subject: [PATCH] Gracefully handle unexpected non-MP3 trailing data The `bear-cbr-no-seek-table-trailing-garbage.mp3` test file was generated by appending 150kB of `0xDEADBEEF` onto the end of `bear-cbr-variable-frame-size-no-seek-table.mp3`. Issue: androidx/media#1563 #cherrypick PiperOrigin-RevId: 670131828 --- RELEASENOTES.md | 6 + .../extractor/mp3/ConstantBitrateSeeker.java | 15 + .../media3/extractor/mp3/Mp3Extractor.java | 28 +- .../extractor/mp3/Mp3ExtractorTest.java | 14 + ...-no-seek-table-trailing-garbage.mp3.0.dump | 450 ++++++++++++++++++ ...-no-seek-table-trailing-garbage.mp3.1.dump | 306 ++++++++++++ ...-no-seek-table-trailing-garbage.mp3.2.dump | 162 +++++++ ...-no-seek-table-trailing-garbage.mp3.3.dump | 18 + ...e-trailing-garbage.mp3.unknown_length.dump | 447 +++++++++++++++++ ...ear-cbr-no-seek-table-trailing-garbage.mp3 | Bin 0 -> 195379 bytes 10 files changed, 1442 insertions(+), 4 deletions(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3 diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5839a0f7e4..de4e600978 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -51,6 +51,12 @@ * Allow `Mp4Extractor` and `FragmentedMp4Extractor` to identify H264 samples that are not used as reference by subsequent samples. * Add option to enable index-based seeking in `AmrExtractor`. + * Treat MP3 files with more than 128kB between valid frames as truncated + (instead of invalid). This means files with non-MP3 data at the end, + with no other metadata to indicate the length of the MP3 bytes, now stop + playback at the end of the MP3 data instead of failing with + `ParserException: Searched too many bytes.{contentIsMalformed=true, + dataType=1}` ([#1563](https://github.com/androidx/media/issues/1563)). * DataSource: * Update `HttpEngineDataSource` to allow use starting at version S extension 7 instead of API level 34 diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/ConstantBitrateSeeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/ConstantBitrateSeeker.java index 12f5761d99..6b4ceb5101 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/ConstantBitrateSeeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/ConstantBitrateSeeker.java @@ -24,7 +24,10 @@ import androidx.media3.extractor.MpegAudioUtil; */ /* package */ final class ConstantBitrateSeeker extends ConstantBitrateSeekMap implements Seeker { + private final long firstFramePosition; private final int bitrate; + private final int frameSize; + private final boolean allowSeeksIfLengthUnknown; private final long dataEndPosition; /** @@ -60,7 +63,10 @@ import androidx.media3.extractor.MpegAudioUtil; int frameSize, boolean allowSeeksIfLengthUnknown) { super(inputLength, firstFramePosition, bitrate, frameSize, allowSeeksIfLengthUnknown); + this.firstFramePosition = firstFramePosition; this.bitrate = bitrate; + this.frameSize = frameSize; + this.allowSeeksIfLengthUnknown = allowSeeksIfLengthUnknown; dataEndPosition = inputLength != C.LENGTH_UNSET ? inputLength : C.INDEX_UNSET; } @@ -78,4 +84,13 @@ import androidx.media3.extractor.MpegAudioUtil; public int getAverageBitrate() { return bitrate; } + + public ConstantBitrateSeeker copyWithNewDataEndPosition(long dataEndPosition) { + return new ConstantBitrateSeeker( + /* inputLength= */ dataEndPosition, + firstFramePosition, + bitrate, + frameSize, + allowSeeksIfLengthUnknown); + } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Mp3Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Mp3Extractor.java index c64d26c648..0ae9c614d3 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Mp3Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Mp3Extractor.java @@ -15,6 +15,7 @@ */ package androidx.media3.extractor.mp3; +import static androidx.media3.common.util.Assertions.checkNotNull; import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.RetentionPolicy.SOURCE; @@ -23,7 +24,6 @@ import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.Metadata; -import androidx.media3.common.ParserException; import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; import androidx.media3.common.util.Assertions; @@ -177,6 +177,7 @@ public final class Mp3Extractor implements Extractor { private long basisTimeUs; private long samplesRead; private long firstSamplePosition; + private long endPositionOfLastSampleRead; private int sampleBytesRemaining; private @MonotonicNonNull Seeker seeker; @@ -213,6 +214,7 @@ public final class Mp3Extractor implements Extractor { id3Peeker = new Id3Peeker(); skippingTrackOutput = new DiscardingTrackOutput(); currentTrackOutput = skippingTrackOutput; + endPositionOfLastSampleRead = C.INDEX_UNSET; } // Extractor implementation. @@ -335,13 +337,14 @@ public final class Mp3Extractor implements Extractor { } } sampleBytesRemaining = synchronizedHeader.frameSize; + endPositionOfLastSampleRead = extractorInput.getPosition() + synchronizedHeader.frameSize; if (seeker instanceof IndexSeeker) { IndexSeeker indexSeeker = (IndexSeeker) seeker; // Add seek point corresponding to the next frame instead of the current one to be able to // start writing to the realTrackOutput on time when a seek is in progress. indexSeeker.maybeAddSeekPoint( computeTimeUs(samplesRead + synchronizedHeader.samplesPerFrame), - extractorInput.getPosition() + synchronizedHeader.frameSize); + endPositionOfLastSampleRead); if (isSeekInProgress && indexSeeker.isTimeUsInIndex(seekTimeUs)) { isSeekInProgress = false; currentTrackOutput = realTrackOutput; @@ -395,6 +398,7 @@ public final class Mp3Extractor implements Extractor { // We reached the end of the stream but found at least one valid frame. break; } + maybeUpdateCbrDurationToLastSample(); throw new EOFException(); } scratch.setPosition(0); @@ -406,8 +410,8 @@ public final class Mp3Extractor implements Extractor { // The header doesn't match the candidate header or is invalid. Try the next byte offset. if (searchedBytes++ == searchLimitBytes) { if (!sniffing) { - throw ParserException.createForMalformedContainer( - "Searched too many bytes.", /* cause= */ null); + maybeUpdateCbrDurationToLastSample(); + throw new EOFException(); } return false; } @@ -636,6 +640,22 @@ public final class Mp3Extractor implements Extractor { /* allowSeeksIfLengthUnknown= */ false); } + /** + * If {@link #seeker} is a seekable {@link ConstantBitrateSeeker}, this updates it to end at the + * last sample we read (because we've failed to find a subsequent synchronization word so we + * assume the MP3 data has ended). + */ + private void maybeUpdateCbrDurationToLastSample() { + if (seeker instanceof ConstantBitrateSeeker + && seeker.isSeekable() + && endPositionOfLastSampleRead != C.INDEX_UNSET + && endPositionOfLastSampleRead != seeker.getDataEndPosition()) { + seeker = + ((ConstantBitrateSeeker) seeker).copyWithNewDataEndPosition(endPositionOfLastSampleRead); + checkNotNull(extractorOutput).seekMap(seeker); + } + } + @EnsuresNonNull({"extractorOutput", "realTrackOutput"}) private void assertInitialized() { Assertions.checkStateNotNull(realTrackOutput); diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java index d18d7e678d..a5c3a9df88 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java @@ -15,6 +15,8 @@ */ package androidx.media3.extractor.mp3; +import static org.junit.Assume.assumeFalse; + import androidx.media3.test.utils.ExtractorAsserts; import androidx.media3.test.utils.ExtractorAsserts.AssertionConfig; import com.google.common.collect.ImmutableList; @@ -96,6 +98,18 @@ public final class Mp3ExtractorTest { simulationConfig); } + // https://github.com/androidx/media/issues/1563 + @Test + public void mp3CbrSampleWithNoSeekTableAndTrailingGarbage() throws Exception { + assumeFalse( + "Skipping I/O error testing with unknown length due to b/362727473", + simulationConfig.simulateIOErrors && simulationConfig.simulateUnknownLength); + ExtractorAsserts.assertBehavior( + Mp3Extractor::new, + "media/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3", + simulationConfig); + } + @Test public void trimmedMp3Sample() throws Exception { ExtractorAsserts.assertBehavior( diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.0.dump new file mode 100644 index 0000000000..b8b7af77d0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.0.dump @@ -0,0 +1,450 @@ +seekMap: + isSeekable = true + duration = 2821187 + getPosition(0) = [[timeUs=0, position=240]] + getPosition(1) = [[timeUs=0, position=240], [timeUs=26062, position=657]] + getPosition(1410593) = [[timeUs=1407375, position=22758], [timeUs=1433437, position=23175]] + getPosition(2821187) = [[timeUs=2795125, position=44962]] +numberOfTracks = 1 +track 0: + total output bytes = 45139 + sample count = 108 + format 0: + averageBitrate = 128000 + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 417, hash C4565176 + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 70AEC448 + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 835A8FB9 + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 3A9672BF + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 8DBE60F9 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 23D0867B + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 7780AAB9 + sample 7: + time = 182857 + flags = 1 + data = length 418, hash 3F63B2D1 + sample 8: + time = 208979 + flags = 1 + data = length 418, hash 7A33CEBD + sample 9: + time = 235102 + flags = 1 + data = length 418, hash DF31D514 + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 26FA2C86 + sample 11: + time = 287346 + flags = 1 + data = length 418, hash D9C7FB1 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash B1C40DC8 + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 1C953BEE + sample 14: + time = 365714 + flags = 1 + data = length 418, hash A6053C6 + sample 15: + time = 391836 + flags = 1 + data = length 418, hash 2D90325A + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 11A84918 + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 30F1A19A + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 70EC67FF + sample 19: + time = 496326 + flags = 1 + data = length 418, hash 7BAF5828 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash 8E43B85E + sample 21: + time = 548571 + flags = 1 + data = length 418, hash E9A5EE78 + sample 22: + time = 574693 + flags = 1 + data = length 418, hash F79931F8 + sample 23: + time = 600816 + flags = 1 + data = length 418, hash C0308B40 + sample 24: + time = 626938 + flags = 1 + data = length 418, hash 3D2E55B + sample 25: + time = 653061 + flags = 1 + data = length 417, hash D74A61AF + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 96F104B1 + sample 27: + time = 705306 + flags = 1 + data = length 418, hash CE12216 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 899EA46D + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 1208BBC5 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 49F22D4D + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 56D959B0 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 5EC6FF8C + sample 33: + time = 862040 + flags = 1 + data = length 418, hash 380B6E00 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash 19494E6B + sample 35: + time = 914285 + flags = 1 + data = length 418, hash C751B033 + sample 36: + time = 940408 + flags = 1 + data = length 418, hash 5F7C6DBA + sample 37: + time = 966530 + flags = 1 + data = length 418, hash D77E6530 + sample 38: + time = 992653 + flags = 1 + data = length 418, hash 48A694AB + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash A979850E + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash 7688E4B1 + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 255AF933 + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash D58AC838 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash A38DC7B + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash EA0CA21 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash DF99B54B + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash A1532134 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash 520EC187 + sample 48: + time = 1253877 + flags = 1 + data = length 418, hash 5E38E4F + sample 49: + time = 1280000 + flags = 1 + data = length 417, hash 4D3526FB + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash D99092CA + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash EDB10D8E + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 5B5F6439 + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 947E2739 + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 8C1FF29C + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash FEADC9C3 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash BB82E0C8 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash 8D1494AF + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash E8C4265C + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash BC8F59AE + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash C8C5DCBD + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash 43C3D85B + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash 238C1AFE + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash F6099191 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash D236BB0E + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 58B5B714 + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash A9DDDD52 + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash 85E7D11E + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash 9E9D8FF4 + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash 6FF9060D + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 4F1FC4F5 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash EF9885AA + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash 7872C242 + sample 73: + time = 1906938 + flags = 1 + data = length 418, hash EB6FEAED + sample 74: + time = 1933061 + flags = 1 + data = length 417, hash B02D8CF0 + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash EFB6C2DD + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash B733E449 + sample 77: + time = 2011428 + flags = 1 + data = length 418, hash 617B155E + sample 78: + time = 2037551 + flags = 1 + data = length 418, hash AE626B2E + sample 79: + time = 2063673 + flags = 1 + data = length 418, hash F5E232C + sample 80: + time = 2089795 + flags = 1 + data = length 418, hash B5F4DC29 + sample 81: + time = 2115918 + flags = 1 + data = length 418, hash C791E3B5 + sample 82: + time = 2142040 + flags = 1 + data = length 418, hash F42A6BDB + sample 83: + time = 2168163 + flags = 1 + data = length 418, hash FDAEEFE6 + sample 84: + time = 2194285 + flags = 1 + data = length 418, hash 62AC2513 + sample 85: + time = 2220408 + flags = 1 + data = length 418, hash A4B46783 + sample 86: + time = 2246530 + flags = 1 + data = length 418, hash 9B7DFEFE + sample 87: + time = 2272653 + flags = 1 + data = length 418, hash 4010F89A + sample 88: + time = 2298775 + flags = 1 + data = length 418, hash 33467FC1 + sample 89: + time = 2324897 + flags = 1 + data = length 418, hash 1DFAE1E9 + sample 90: + time = 2351020 + flags = 1 + data = length 418, hash C208D375 + sample 91: + time = 2377142 + flags = 1 + data = length 418, hash CD430C30 + sample 92: + time = 2403265 + flags = 1 + data = length 418, hash 5A6F8065 + sample 93: + time = 2429387 + flags = 1 + data = length 418, hash 7177BD8B + sample 94: + time = 2455510 + flags = 1 + data = length 418, hash 51C1F29B + sample 95: + time = 2481632 + flags = 1 + data = length 418, hash 868A0084 + sample 96: + time = 2507755 + flags = 1 + data = length 418, hash 1E9C03E1 + sample 97: + time = 2533877 + flags = 1 + data = length 418, hash 10069B68 + sample 98: + time = 2560000 + flags = 1 + data = length 417, hash CC5B751D + sample 99: + time = 2586122 + flags = 1 + data = length 418, hash 837D650 + sample 100: + time = 2612244 + flags = 1 + data = length 418, hash 43B75632 + sample 101: + time = 2638367 + flags = 1 + data = length 418, hash 86E0652 + sample 102: + time = 2664489 + flags = 1 + data = length 418, hash 4DEC63E7 + sample 103: + time = 2690612 + flags = 1 + data = length 418, hash F094F330 + sample 104: + time = 2716734 + flags = 1 + data = length 418, hash 2C9CAA4 + sample 105: + time = 2742857 + flags = 1 + data = length 418, hash 1E903FFE + sample 106: + time = 2768979 + flags = 1 + data = length 418, hash F276CF72 + sample 107: + time = 2795102 + flags = 1 + data = length 418, hash 1C081463 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.1.dump new file mode 100644 index 0000000000..02a784b9e7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.1.dump @@ -0,0 +1,306 @@ +seekMap: + isSeekable = true + duration = 2821187 + getPosition(0) = [[timeUs=0, position=240]] + getPosition(1) = [[timeUs=0, position=240], [timeUs=26062, position=657]] + getPosition(1410593) = [[timeUs=1407375, position=22758], [timeUs=1433437, position=23175]] + getPosition(2821187) = [[timeUs=2795125, position=44962]] +numberOfTracks = 1 +track 0: + total output bytes = 30093 + sample count = 72 + format 0: + averageBitrate = 128000 + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 940375 + flags = 1 + data = length 418, hash 5F7C6DBA + sample 1: + time = 966497 + flags = 1 + data = length 418, hash D77E6530 + sample 2: + time = 992619 + flags = 1 + data = length 418, hash 48A694AB + sample 3: + time = 1018742 + flags = 1 + data = length 418, hash A979850E + sample 4: + time = 1044864 + flags = 1 + data = length 418, hash 7688E4B1 + sample 5: + time = 1070987 + flags = 1 + data = length 418, hash 255AF933 + sample 6: + time = 1097109 + flags = 1 + data = length 418, hash D58AC838 + sample 7: + time = 1123232 + flags = 1 + data = length 418, hash A38DC7B + sample 8: + time = 1149354 + flags = 1 + data = length 418, hash EA0CA21 + sample 9: + time = 1175477 + flags = 1 + data = length 418, hash DF99B54B + sample 10: + time = 1201599 + flags = 1 + data = length 418, hash A1532134 + sample 11: + time = 1227721 + flags = 1 + data = length 418, hash 520EC187 + sample 12: + time = 1253844 + flags = 1 + data = length 418, hash 5E38E4F + sample 13: + time = 1279966 + flags = 1 + data = length 417, hash 4D3526FB + sample 14: + time = 1306089 + flags = 1 + data = length 418, hash D99092CA + sample 15: + time = 1332211 + flags = 1 + data = length 418, hash EDB10D8E + sample 16: + time = 1358334 + flags = 1 + data = length 418, hash 5B5F6439 + sample 17: + time = 1384456 + flags = 1 + data = length 418, hash 947E2739 + sample 18: + time = 1410579 + flags = 1 + data = length 418, hash 8C1FF29C + sample 19: + time = 1436701 + flags = 1 + data = length 418, hash FEADC9C3 + sample 20: + time = 1462823 + flags = 1 + data = length 418, hash BB82E0C8 + sample 21: + time = 1488946 + flags = 1 + data = length 418, hash 8D1494AF + sample 22: + time = 1515068 + flags = 1 + data = length 418, hash E8C4265C + sample 23: + time = 1541191 + flags = 1 + data = length 418, hash BC8F59AE + sample 24: + time = 1567313 + flags = 1 + data = length 418, hash C8C5DCBD + sample 25: + time = 1593436 + flags = 1 + data = length 418, hash 43C3D85B + sample 26: + time = 1619558 + flags = 1 + data = length 418, hash 238C1AFE + sample 27: + time = 1645681 + flags = 1 + data = length 418, hash F6099191 + sample 28: + time = 1671803 + flags = 1 + data = length 418, hash D236BB0E + sample 29: + time = 1697926 + flags = 1 + data = length 418, hash 58B5B714 + sample 30: + time = 1724048 + flags = 1 + data = length 418, hash A9DDDD52 + sample 31: + time = 1750170 + flags = 1 + data = length 418, hash 85E7D11E + sample 32: + time = 1776293 + flags = 1 + data = length 418, hash 9E9D8FF4 + sample 33: + time = 1802415 + flags = 1 + data = length 418, hash 6FF9060D + sample 34: + time = 1828538 + flags = 1 + data = length 418, hash 4F1FC4F5 + sample 35: + time = 1854660 + flags = 1 + data = length 418, hash EF9885AA + sample 36: + time = 1880783 + flags = 1 + data = length 418, hash 7872C242 + sample 37: + time = 1906905 + flags = 1 + data = length 418, hash EB6FEAED + sample 38: + time = 1933028 + flags = 1 + data = length 417, hash B02D8CF0 + sample 39: + time = 1959150 + flags = 1 + data = length 418, hash EFB6C2DD + sample 40: + time = 1985272 + flags = 1 + data = length 418, hash B733E449 + sample 41: + time = 2011395 + flags = 1 + data = length 418, hash 617B155E + sample 42: + time = 2037517 + flags = 1 + data = length 418, hash AE626B2E + sample 43: + time = 2063640 + flags = 1 + data = length 418, hash F5E232C + sample 44: + time = 2089762 + flags = 1 + data = length 418, hash B5F4DC29 + sample 45: + time = 2115885 + flags = 1 + data = length 418, hash C791E3B5 + sample 46: + time = 2142007 + flags = 1 + data = length 418, hash F42A6BDB + sample 47: + time = 2168130 + flags = 1 + data = length 418, hash FDAEEFE6 + sample 48: + time = 2194252 + flags = 1 + data = length 418, hash 62AC2513 + sample 49: + time = 2220375 + flags = 1 + data = length 418, hash A4B46783 + sample 50: + time = 2246497 + flags = 1 + data = length 418, hash 9B7DFEFE + sample 51: + time = 2272619 + flags = 1 + data = length 418, hash 4010F89A + sample 52: + time = 2298742 + flags = 1 + data = length 418, hash 33467FC1 + sample 53: + time = 2324864 + flags = 1 + data = length 418, hash 1DFAE1E9 + sample 54: + time = 2350987 + flags = 1 + data = length 418, hash C208D375 + sample 55: + time = 2377109 + flags = 1 + data = length 418, hash CD430C30 + sample 56: + time = 2403232 + flags = 1 + data = length 418, hash 5A6F8065 + sample 57: + time = 2429354 + flags = 1 + data = length 418, hash 7177BD8B + sample 58: + time = 2455477 + flags = 1 + data = length 418, hash 51C1F29B + sample 59: + time = 2481599 + flags = 1 + data = length 418, hash 868A0084 + sample 60: + time = 2507721 + flags = 1 + data = length 418, hash 1E9C03E1 + sample 61: + time = 2533844 + flags = 1 + data = length 418, hash 10069B68 + sample 62: + time = 2559966 + flags = 1 + data = length 417, hash CC5B751D + sample 63: + time = 2586089 + flags = 1 + data = length 418, hash 837D650 + sample 64: + time = 2612211 + flags = 1 + data = length 418, hash 43B75632 + sample 65: + time = 2638334 + flags = 1 + data = length 418, hash 86E0652 + sample 66: + time = 2664456 + flags = 1 + data = length 418, hash 4DEC63E7 + sample 67: + time = 2690579 + flags = 1 + data = length 418, hash F094F330 + sample 68: + time = 2716701 + flags = 1 + data = length 418, hash 2C9CAA4 + sample 69: + time = 2742823 + flags = 1 + data = length 418, hash 1E903FFE + sample 70: + time = 2768946 + flags = 1 + data = length 418, hash F276CF72 + sample 71: + time = 2795068 + flags = 1 + data = length 418, hash 1C081463 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.2.dump new file mode 100644 index 0000000000..297c862c80 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.2.dump @@ -0,0 +1,162 @@ +seekMap: + isSeekable = true + duration = 2821187 + getPosition(0) = [[timeUs=0, position=240]] + getPosition(1) = [[timeUs=0, position=240], [timeUs=26062, position=657]] + getPosition(1410593) = [[timeUs=1407375, position=22758], [timeUs=1433437, position=23175]] + getPosition(2821187) = [[timeUs=2795125, position=44962]] +numberOfTracks = 1 +track 0: + total output bytes = 15046 + sample count = 36 + format 0: + averageBitrate = 128000 + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 1880812 + flags = 1 + data = length 418, hash 7872C242 + sample 1: + time = 1906934 + flags = 1 + data = length 418, hash EB6FEAED + sample 2: + time = 1933056 + flags = 1 + data = length 417, hash B02D8CF0 + sample 3: + time = 1959179 + flags = 1 + data = length 418, hash EFB6C2DD + sample 4: + time = 1985301 + flags = 1 + data = length 418, hash B733E449 + sample 5: + time = 2011424 + flags = 1 + data = length 418, hash 617B155E + sample 6: + time = 2037546 + flags = 1 + data = length 418, hash AE626B2E + sample 7: + time = 2063669 + flags = 1 + data = length 418, hash F5E232C + sample 8: + time = 2089791 + flags = 1 + data = length 418, hash B5F4DC29 + sample 9: + time = 2115914 + flags = 1 + data = length 418, hash C791E3B5 + sample 10: + time = 2142036 + flags = 1 + data = length 418, hash F42A6BDB + sample 11: + time = 2168158 + flags = 1 + data = length 418, hash FDAEEFE6 + sample 12: + time = 2194281 + flags = 1 + data = length 418, hash 62AC2513 + sample 13: + time = 2220403 + flags = 1 + data = length 418, hash A4B46783 + sample 14: + time = 2246526 + flags = 1 + data = length 418, hash 9B7DFEFE + sample 15: + time = 2272648 + flags = 1 + data = length 418, hash 4010F89A + sample 16: + time = 2298771 + flags = 1 + data = length 418, hash 33467FC1 + sample 17: + time = 2324893 + flags = 1 + data = length 418, hash 1DFAE1E9 + sample 18: + time = 2351016 + flags = 1 + data = length 418, hash C208D375 + sample 19: + time = 2377138 + flags = 1 + data = length 418, hash CD430C30 + sample 20: + time = 2403260 + flags = 1 + data = length 418, hash 5A6F8065 + sample 21: + time = 2429383 + flags = 1 + data = length 418, hash 7177BD8B + sample 22: + time = 2455505 + flags = 1 + data = length 418, hash 51C1F29B + sample 23: + time = 2481628 + flags = 1 + data = length 418, hash 868A0084 + sample 24: + time = 2507750 + flags = 1 + data = length 418, hash 1E9C03E1 + sample 25: + time = 2533873 + flags = 1 + data = length 418, hash 10069B68 + sample 26: + time = 2559995 + flags = 1 + data = length 417, hash CC5B751D + sample 27: + time = 2586118 + flags = 1 + data = length 418, hash 837D650 + sample 28: + time = 2612240 + flags = 1 + data = length 418, hash 43B75632 + sample 29: + time = 2638363 + flags = 1 + data = length 418, hash 86E0652 + sample 30: + time = 2664485 + flags = 1 + data = length 418, hash 4DEC63E7 + sample 31: + time = 2690607 + flags = 1 + data = length 418, hash F094F330 + sample 32: + time = 2716730 + flags = 1 + data = length 418, hash 2C9CAA4 + sample 33: + time = 2742852 + flags = 1 + data = length 418, hash 1E903FFE + sample 34: + time = 2768975 + flags = 1 + data = length 418, hash F276CF72 + sample 35: + time = 2795097 + flags = 1 + data = length 418, hash 1C081463 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.3.dump new file mode 100644 index 0000000000..bf484c7ee3 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.3.dump @@ -0,0 +1,18 @@ +seekMap: + isSeekable = true + duration = 2821187 + getPosition(0) = [[timeUs=0, position=240]] + getPosition(1) = [[timeUs=0, position=240], [timeUs=26062, position=657]] + getPosition(1410593) = [[timeUs=1407375, position=22758], [timeUs=1433437, position=23175]] + getPosition(2821187) = [[timeUs=2795125, position=44962]] +numberOfTracks = 1 +track 0: + total output bytes = 0 + sample count = 0 + format 0: + averageBitrate = 128000 + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 44100 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.unknown_length.dump new file mode 100644 index 0000000000..024e90989a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3.unknown_length.dump @@ -0,0 +1,447 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=240]] +numberOfTracks = 1 +track 0: + total output bytes = 45139 + sample count = 108 + format 0: + averageBitrate = 128000 + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 417, hash C4565176 + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 70AEC448 + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 835A8FB9 + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 3A9672BF + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 8DBE60F9 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 23D0867B + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 7780AAB9 + sample 7: + time = 182857 + flags = 1 + data = length 418, hash 3F63B2D1 + sample 8: + time = 208979 + flags = 1 + data = length 418, hash 7A33CEBD + sample 9: + time = 235102 + flags = 1 + data = length 418, hash DF31D514 + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 26FA2C86 + sample 11: + time = 287346 + flags = 1 + data = length 418, hash D9C7FB1 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash B1C40DC8 + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 1C953BEE + sample 14: + time = 365714 + flags = 1 + data = length 418, hash A6053C6 + sample 15: + time = 391836 + flags = 1 + data = length 418, hash 2D90325A + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 11A84918 + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 30F1A19A + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 70EC67FF + sample 19: + time = 496326 + flags = 1 + data = length 418, hash 7BAF5828 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash 8E43B85E + sample 21: + time = 548571 + flags = 1 + data = length 418, hash E9A5EE78 + sample 22: + time = 574693 + flags = 1 + data = length 418, hash F79931F8 + sample 23: + time = 600816 + flags = 1 + data = length 418, hash C0308B40 + sample 24: + time = 626938 + flags = 1 + data = length 418, hash 3D2E55B + sample 25: + time = 653061 + flags = 1 + data = length 417, hash D74A61AF + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 96F104B1 + sample 27: + time = 705306 + flags = 1 + data = length 418, hash CE12216 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 899EA46D + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 1208BBC5 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 49F22D4D + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 56D959B0 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 5EC6FF8C + sample 33: + time = 862040 + flags = 1 + data = length 418, hash 380B6E00 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash 19494E6B + sample 35: + time = 914285 + flags = 1 + data = length 418, hash C751B033 + sample 36: + time = 940408 + flags = 1 + data = length 418, hash 5F7C6DBA + sample 37: + time = 966530 + flags = 1 + data = length 418, hash D77E6530 + sample 38: + time = 992653 + flags = 1 + data = length 418, hash 48A694AB + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash A979850E + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash 7688E4B1 + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 255AF933 + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash D58AC838 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash A38DC7B + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash EA0CA21 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash DF99B54B + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash A1532134 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash 520EC187 + sample 48: + time = 1253877 + flags = 1 + data = length 418, hash 5E38E4F + sample 49: + time = 1280000 + flags = 1 + data = length 417, hash 4D3526FB + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash D99092CA + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash EDB10D8E + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 5B5F6439 + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 947E2739 + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 8C1FF29C + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash FEADC9C3 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash BB82E0C8 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash 8D1494AF + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash E8C4265C + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash BC8F59AE + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash C8C5DCBD + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash 43C3D85B + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash 238C1AFE + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash F6099191 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash D236BB0E + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 58B5B714 + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash A9DDDD52 + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash 85E7D11E + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash 9E9D8FF4 + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash 6FF9060D + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 4F1FC4F5 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash EF9885AA + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash 7872C242 + sample 73: + time = 1906938 + flags = 1 + data = length 418, hash EB6FEAED + sample 74: + time = 1933061 + flags = 1 + data = length 417, hash B02D8CF0 + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash EFB6C2DD + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash B733E449 + sample 77: + time = 2011428 + flags = 1 + data = length 418, hash 617B155E + sample 78: + time = 2037551 + flags = 1 + data = length 418, hash AE626B2E + sample 79: + time = 2063673 + flags = 1 + data = length 418, hash F5E232C + sample 80: + time = 2089795 + flags = 1 + data = length 418, hash B5F4DC29 + sample 81: + time = 2115918 + flags = 1 + data = length 418, hash C791E3B5 + sample 82: + time = 2142040 + flags = 1 + data = length 418, hash F42A6BDB + sample 83: + time = 2168163 + flags = 1 + data = length 418, hash FDAEEFE6 + sample 84: + time = 2194285 + flags = 1 + data = length 418, hash 62AC2513 + sample 85: + time = 2220408 + flags = 1 + data = length 418, hash A4B46783 + sample 86: + time = 2246530 + flags = 1 + data = length 418, hash 9B7DFEFE + sample 87: + time = 2272653 + flags = 1 + data = length 418, hash 4010F89A + sample 88: + time = 2298775 + flags = 1 + data = length 418, hash 33467FC1 + sample 89: + time = 2324897 + flags = 1 + data = length 418, hash 1DFAE1E9 + sample 90: + time = 2351020 + flags = 1 + data = length 418, hash C208D375 + sample 91: + time = 2377142 + flags = 1 + data = length 418, hash CD430C30 + sample 92: + time = 2403265 + flags = 1 + data = length 418, hash 5A6F8065 + sample 93: + time = 2429387 + flags = 1 + data = length 418, hash 7177BD8B + sample 94: + time = 2455510 + flags = 1 + data = length 418, hash 51C1F29B + sample 95: + time = 2481632 + flags = 1 + data = length 418, hash 868A0084 + sample 96: + time = 2507755 + flags = 1 + data = length 418, hash 1E9C03E1 + sample 97: + time = 2533877 + flags = 1 + data = length 418, hash 10069B68 + sample 98: + time = 2560000 + flags = 1 + data = length 417, hash CC5B751D + sample 99: + time = 2586122 + flags = 1 + data = length 418, hash 837D650 + sample 100: + time = 2612244 + flags = 1 + data = length 418, hash 43B75632 + sample 101: + time = 2638367 + flags = 1 + data = length 418, hash 86E0652 + sample 102: + time = 2664489 + flags = 1 + data = length 418, hash 4DEC63E7 + sample 103: + time = 2690612 + flags = 1 + data = length 418, hash F094F330 + sample 104: + time = 2716734 + flags = 1 + data = length 418, hash 2C9CAA4 + sample 105: + time = 2742857 + flags = 1 + data = length 418, hash 1E903FFE + sample 106: + time = 2768979 + flags = 1 + data = length 418, hash F276CF72 + sample 107: + time = 2795102 + flags = 1 + data = length 418, hash 1C081463 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3 b/libraries/test_data/src/test/assets/media/mp3/bear-cbr-no-seek-table-trailing-garbage.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e09bf152f6dca63c73ae3f96aa2928e98fd84e39 GIT binary patch literal 195379 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

l-HHkdUoQgS;Lq#xzLjV89#TlJc;;@=w} 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 z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq z00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq r00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0Wk2tZ{Ys{uxmZW literal 0 HcmV?d00001