From 46578ee0a6e8adf4c56b7b45b43713b132e35cca Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 26 Nov 2024 06:15:19 -0800 Subject: [PATCH] MP3: Use `bytes` field from `VBRI` frame instead of deriving from ToC The previous code assumed that the `VBRI` Table of Contents (ToC) covers all the MP3 data in the file. In a file with an invalid VBRI ToC where this isn't the case, this results in playback silently stopping mid-playback (and either advancing to the next item, or continuing to count up the playback clock forever). This change considers the `bytes` field to determine the end of the MP3 data, in addition to deriving it from the ToC. If they disagree we log a warning and take the max value. This is because we handle accidentally reading non-MP3 data at the end (or hitting EoF) better than stopping reading valid MP3 data partway through. Issue: androidx/media#1904 #cherrypick PiperOrigin-RevId: 700319250 --- RELEASENOTES.md | 3 + .../exoplayer/e2etest/Mp3PlaybackTest.java | 1 + .../media3/extractor/mp3/VbriSeeker.java | 24 +- .../extractor/mp3/Mp3ExtractorTest.java | 7 + ...r-vbr-vbri-header-truncated-toc.mp3.0.dump | 489 +++++++ ...r-vbr-vbri-header-truncated-toc.mp3.1.dump | 489 +++++++ ...r-vbr-vbri-header-truncated-toc.mp3.2.dump | 373 ++++++ ...r-vbr-vbri-header-truncated-toc.mp3.3.dump | 373 ++++++ ...ader-truncated-toc.mp3.unknown_length.dump | 489 +++++++ .../bear-vbr-vbri-header-truncated-toc.mp3 | Bin 0 -> 38301 bytes ...ear-vbr-vbri-header-truncated-toc.mp3.dump | 1185 +++++++++++++++++ 11 files changed, 3428 insertions(+), 5 deletions(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header-truncated-toc.mp3 create mode 100644 libraries/test_data/src/test/assets/playbackdumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.dump diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5e35a9ca8c..1ce272571a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -26,6 +26,9 @@ * Add support for transmuxing into alternative backwards compatible formats. * Extractors: + * MP3: Don't stop playback early when a `VBRI` frame's table of contents + doesn't cover all the MP3 data in a file + ([#1904](https://github.com/androidx/media/issues/1904)). * DataSource: * Audio: * Do not bypass `SonicAudioProcessor` when `SpeedChangingAudioProcessor` diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp3PlaybackTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp3PlaybackTest.java index d725e7e4f7..374094baa4 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp3PlaybackTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/e2etest/Mp3PlaybackTest.java @@ -44,6 +44,7 @@ public final class Mp3PlaybackTest { "bear-id3.mp3", "bear-id3-numeric-genre.mp3", "bear-vbr-no-seek-table.mp3", + "bear-vbr-vbri-header-truncated-toc.mp3", "bear-vbr-xing-header.mp3", "play-trimmed.mp3", "test-cbr-info-header.mp3"); diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/VbriSeeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/VbriSeeker.java index fa6c07f8cd..56dadf8763 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/VbriSeeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/VbriSeeker.java @@ -15,6 +15,8 @@ */ package androidx.media3.extractor.mp3; +import static java.lang.Math.max; + import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.util.Log; @@ -47,7 +49,9 @@ import androidx.media3.extractor.SeekPoint; long position, MpegAudioUtil.Header mpegAudioHeader, ParsableByteArray frame) { - frame.skipBytes(10); + frame.skipBytes(6); + int bytes = frame.readInt(); + long endOfMp3Data = position + mpegAudioHeader.frameSize + bytes; int numFrames = frame.readInt(); if (numFrames <= 0) { return null; @@ -87,11 +91,21 @@ import androidx.media3.extractor.SeekPoint; } position += segmentSize * ((long) scale); } - if (inputLength != C.LENGTH_UNSET && inputLength != position) { - Log.w(TAG, "VBRI data size mismatch: " + inputLength + ", " + position); + if (inputLength != C.LENGTH_UNSET && inputLength != endOfMp3Data) { + Log.w(TAG, "VBRI data size mismatch: " + inputLength + ", " + endOfMp3Data); } - return new VbriSeeker( - timesUs, positions, durationUs, /* dataEndPosition= */ position, mpegAudioHeader.bitrate); + if (endOfMp3Data != position) { + Log.w( + TAG, + "VBRI bytes and ToC mismatch (using max): " + + endOfMp3Data + + ", " + + position + + "\nSeeking will be inaccurate."); + endOfMp3Data = max(endOfMp3Data, position); + } + + return new VbriSeeker(timesUs, positions, durationUs, endOfMp3Data, mpegAudioHeader.bitrate); } private final long[] timesUs; 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 87cc1fffa9..b0eeca53cd 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 @@ -77,6 +77,13 @@ public final class Mp3ExtractorTest { Mp3Extractor::new, "media/mp3/bear-vbr-vbri-header.mp3", simulationConfig); } + // https://github.com/androidx/media/issues/1904 + @Test + public void mp3SampleWithVbriHeaderWithTruncatedToC() throws Exception { + ExtractorAsserts.assertBehavior( + Mp3Extractor::new, "media/mp3/bear-vbr-vbri-header-truncated-toc.mp3", simulationConfig); + } + @Test public void mp3SampleWithCbrSeeker() throws Exception { ExtractorAsserts.assertBehavior( diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.0.dump new file mode 100644 index 0000000000..eef73c01f2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.0.dump @@ -0,0 +1,489 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=1404000, position=10413]] + getPosition(1404000) = [[timeUs=1404000, position=10413]] + getPosition(2808000) = [[timeUs=1404000, position=10413]] +numberOfTracks = 1 +track 0: + total output bytes = 38160 + sample count = 117 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 0 + flags = 1 + data = length 96, hash 1F161542 + sample 1: + time = 24000 + flags = 1 + data = length 768, hash CD1DC50F + sample 2: + time = 48000 + flags = 1 + data = length 336, hash 3F64124B + sample 3: + time = 72000 + flags = 1 + data = length 336, hash 8FFED94E + sample 4: + time = 96000 + flags = 1 + data = length 288, hash 9CD77D47 + sample 5: + time = 120000 + flags = 1 + data = length 384, hash 24607BB5 + sample 6: + time = 144000 + flags = 1 + data = length 480, hash 4937EBAB + sample 7: + time = 168000 + flags = 1 + data = length 336, hash 546342B1 + sample 8: + time = 192000 + flags = 1 + data = length 336, hash 79E0923F + sample 9: + time = 216000 + flags = 1 + data = length 336, hash AB1F3948 + sample 10: + time = 240000 + flags = 1 + data = length 336, hash C3A4D888 + sample 11: + time = 264000 + flags = 1 + data = length 288, hash 7867DA45 + sample 12: + time = 288000 + flags = 1 + data = length 336, hash B1240B73 + sample 13: + time = 312000 + flags = 1 + data = length 336, hash 94CFCD35 + sample 14: + time = 336000 + flags = 1 + data = length 288, hash 94F412C + sample 15: + time = 360000 + flags = 1 + data = length 336, hash A1D9FF41 + sample 16: + time = 384000 + flags = 1 + data = length 288, hash 2A8DA21B + sample 17: + time = 408000 + flags = 1 + data = length 336, hash 6A429CE + sample 18: + time = 432000 + flags = 1 + data = length 336, hash 68853982 + sample 19: + time = 456000 + flags = 1 + data = length 384, hash 1D6F779C + sample 20: + time = 480000 + flags = 1 + data = length 480, hash 6B31EBEE + sample 21: + time = 504000 + flags = 1 + data = length 336, hash 888335BE + sample 22: + time = 528000 + flags = 1 + data = length 336, hash 6072AC8B + sample 23: + time = 552000 + flags = 1 + data = length 336, hash C9D24234 + sample 24: + time = 576000 + flags = 1 + data = length 288, hash 52BF4D1E + sample 25: + time = 600000 + flags = 1 + data = length 336, hash F93F4F0 + sample 26: + time = 624000 + flags = 1 + data = length 336, hash 8617688A + sample 27: + time = 648000 + flags = 1 + data = length 480, hash FAB0D31B + sample 28: + time = 672000 + flags = 1 + data = length 384, hash FA4B53E2 + sample 29: + time = 696000 + flags = 1 + data = length 336, hash 8C435F6A + sample 30: + time = 720000 + flags = 1 + data = length 336, hash 60D3F80C + sample 31: + time = 744000 + flags = 1 + data = length 336, hash DC15B68B + sample 32: + time = 768000 + flags = 1 + data = length 288, hash FF3DF141 + sample 33: + time = 792000 + flags = 1 + data = length 336, hash A64B3042 + sample 34: + time = 816000 + flags = 1 + data = length 336, hash ACA622A1 + sample 35: + time = 840000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 36: + time = 864000 + flags = 1 + data = length 288, hash 9B96F72A + sample 37: + time = 888000 + flags = 1 + data = length 336, hash E917C122 + sample 38: + time = 912000 + flags = 1 + data = length 336, hash 10ED1470 + sample 39: + time = 936000 + flags = 1 + data = length 288, hash 706B8A7C + sample 40: + time = 960000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 41: + time = 984000 + flags = 1 + data = length 336, hash D4160463 + sample 42: + time = 1008000 + flags = 1 + data = length 336, hash EC557B14 + sample 43: + time = 1032000 + flags = 1 + data = length 288, hash 5598CF8B + sample 44: + time = 1056000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 45: + time = 1080000 + flags = 1 + data = length 336, hash 1C585FEF + sample 46: + time = 1104000 + flags = 1 + data = length 336, hash A4A4855E + sample 47: + time = 1128000 + flags = 1 + data = length 336, hash CECA51D3 + sample 48: + time = 1152000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 49: + time = 1176000 + flags = 1 + data = length 336, hash 9EB2609D + sample 50: + time = 1200000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 51: + time = 1224000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 52: + time = 1248000 + flags = 1 + data = length 336, hash CDBC7032 + sample 53: + time = 1272000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 54: + time = 1296000 + flags = 1 + data = length 336, hash DB6BB1E + sample 55: + time = 1320000 + flags = 1 + data = length 336, hash EBE951F4 + sample 56: + time = 1344000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 57: + time = 1368000 + flags = 1 + data = length 336, hash 36A7D455 + sample 58: + time = 1392000 + flags = 1 + data = length 336, hash 84545F8C + sample 59: + time = 1416000 + flags = 1 + data = length 336, hash F66F3045 + sample 60: + time = 1440000 + flags = 1 + data = length 576, hash 5AB089EA + sample 61: + time = 1464000 + flags = 1 + data = length 336, hash 8868086 + sample 62: + time = 1488000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 63: + time = 1512000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 64: + time = 1536000 + flags = 1 + data = length 336, hash BEB27A75 + sample 65: + time = 1560000 + flags = 1 + data = length 336, hash E251E0FD + sample 66: + time = 1584000 + flags = 1 + data = length 288, hash D54C970 + sample 67: + time = 1608000 + flags = 1 + data = length 336, hash 52C473B9 + sample 68: + time = 1632000 + flags = 1 + data = length 336, hash F5F13334 + sample 69: + time = 1656000 + flags = 1 + data = length 480, hash A5F1E987 + sample 70: + time = 1680000 + flags = 1 + data = length 288, hash 453A1267 + sample 71: + time = 1704000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 72: + time = 1728000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 73: + time = 1752000 + flags = 1 + data = length 336, hash 751A395A + sample 74: + time = 1776000 + flags = 1 + data = length 336, hash EE38DB02 + sample 75: + time = 1800000 + flags = 1 + data = length 336, hash F18837E2 + sample 76: + time = 1824000 + flags = 1 + data = length 336, hash ED36B78E + sample 77: + time = 1848000 + flags = 1 + data = length 336, hash B3D28289 + sample 78: + time = 1872000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 79: + time = 1896000 + flags = 1 + data = length 336, hash CFD5E966 + sample 80: + time = 1920000 + flags = 1 + data = length 288, hash DC08E267 + sample 81: + time = 1944000 + flags = 1 + data = length 336, hash 6530CB78 + sample 82: + time = 1968000 + flags = 1 + data = length 336, hash 6CC6636E + sample 83: + time = 1992000 + flags = 1 + data = length 336, hash 613047C1 + sample 84: + time = 2016000 + flags = 1 + data = length 288, hash CDC747BF + sample 85: + time = 2040000 + flags = 1 + data = length 336, hash AF22AA74 + sample 86: + time = 2064000 + flags = 1 + data = length 384, hash 82F326AA + sample 87: + time = 2088000 + flags = 1 + data = length 384, hash EDA26C4D + sample 88: + time = 2112000 + flags = 1 + data = length 336, hash 94C643DC + sample 89: + time = 2136000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 90: + time = 2160000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 91: + time = 2184000 + flags = 1 + data = length 336, hash 7E472219 + sample 92: + time = 2208000 + flags = 1 + data = length 336, hash DA47B9FA + sample 93: + time = 2232000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 94: + time = 2256000 + flags = 1 + data = length 288, hash DBF93FAC + sample 95: + time = 2280000 + flags = 1 + data = length 336, hash 243F4B2 + sample 96: + time = 2304000 + flags = 1 + data = length 336, hash 2E881490 + sample 97: + time = 2328000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 98: + time = 2352000 + flags = 1 + data = length 336, hash C73E5D30 + sample 99: + time = 2376000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 100: + time = 2400000 + flags = 1 + data = length 336, hash E0135533 + sample 101: + time = 2424000 + flags = 1 + data = length 336, hash D13C9DBC + sample 102: + time = 2448000 + flags = 1 + data = length 336, hash 63D524CA + sample 103: + time = 2472000 + flags = 1 + data = length 288, hash A28514C3 + sample 104: + time = 2496000 + flags = 1 + data = length 336, hash 72B647FF + sample 105: + time = 2520000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 106: + time = 2544000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 107: + time = 2568000 + flags = 1 + data = length 336, hash 121B913B + sample 108: + time = 2592000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 109: + time = 2616000 + flags = 1 + data = length 336, hash 5B5823DE + sample 110: + time = 2640000 + flags = 1 + data = length 384, hash D8B83F78 + sample 111: + time = 2664000 + flags = 1 + data = length 240, hash E649682F + sample 112: + time = 2688000 + flags = 1 + data = length 96, hash C559A6F4 + sample 113: + time = 2712000 + flags = 1 + data = length 96, hash 792796BC + sample 114: + time = 2736000 + flags = 1 + data = length 120, hash 8172CD0E + sample 115: + time = 2760000 + flags = 1 + data = length 120, hash F562B52F + sample 116: + time = 2784000 + flags = 1 + data = length 96, hash FF8D5B98 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.1.dump new file mode 100644 index 0000000000..eef73c01f2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.1.dump @@ -0,0 +1,489 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=1404000, position=10413]] + getPosition(1404000) = [[timeUs=1404000, position=10413]] + getPosition(2808000) = [[timeUs=1404000, position=10413]] +numberOfTracks = 1 +track 0: + total output bytes = 38160 + sample count = 117 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 0 + flags = 1 + data = length 96, hash 1F161542 + sample 1: + time = 24000 + flags = 1 + data = length 768, hash CD1DC50F + sample 2: + time = 48000 + flags = 1 + data = length 336, hash 3F64124B + sample 3: + time = 72000 + flags = 1 + data = length 336, hash 8FFED94E + sample 4: + time = 96000 + flags = 1 + data = length 288, hash 9CD77D47 + sample 5: + time = 120000 + flags = 1 + data = length 384, hash 24607BB5 + sample 6: + time = 144000 + flags = 1 + data = length 480, hash 4937EBAB + sample 7: + time = 168000 + flags = 1 + data = length 336, hash 546342B1 + sample 8: + time = 192000 + flags = 1 + data = length 336, hash 79E0923F + sample 9: + time = 216000 + flags = 1 + data = length 336, hash AB1F3948 + sample 10: + time = 240000 + flags = 1 + data = length 336, hash C3A4D888 + sample 11: + time = 264000 + flags = 1 + data = length 288, hash 7867DA45 + sample 12: + time = 288000 + flags = 1 + data = length 336, hash B1240B73 + sample 13: + time = 312000 + flags = 1 + data = length 336, hash 94CFCD35 + sample 14: + time = 336000 + flags = 1 + data = length 288, hash 94F412C + sample 15: + time = 360000 + flags = 1 + data = length 336, hash A1D9FF41 + sample 16: + time = 384000 + flags = 1 + data = length 288, hash 2A8DA21B + sample 17: + time = 408000 + flags = 1 + data = length 336, hash 6A429CE + sample 18: + time = 432000 + flags = 1 + data = length 336, hash 68853982 + sample 19: + time = 456000 + flags = 1 + data = length 384, hash 1D6F779C + sample 20: + time = 480000 + flags = 1 + data = length 480, hash 6B31EBEE + sample 21: + time = 504000 + flags = 1 + data = length 336, hash 888335BE + sample 22: + time = 528000 + flags = 1 + data = length 336, hash 6072AC8B + sample 23: + time = 552000 + flags = 1 + data = length 336, hash C9D24234 + sample 24: + time = 576000 + flags = 1 + data = length 288, hash 52BF4D1E + sample 25: + time = 600000 + flags = 1 + data = length 336, hash F93F4F0 + sample 26: + time = 624000 + flags = 1 + data = length 336, hash 8617688A + sample 27: + time = 648000 + flags = 1 + data = length 480, hash FAB0D31B + sample 28: + time = 672000 + flags = 1 + data = length 384, hash FA4B53E2 + sample 29: + time = 696000 + flags = 1 + data = length 336, hash 8C435F6A + sample 30: + time = 720000 + flags = 1 + data = length 336, hash 60D3F80C + sample 31: + time = 744000 + flags = 1 + data = length 336, hash DC15B68B + sample 32: + time = 768000 + flags = 1 + data = length 288, hash FF3DF141 + sample 33: + time = 792000 + flags = 1 + data = length 336, hash A64B3042 + sample 34: + time = 816000 + flags = 1 + data = length 336, hash ACA622A1 + sample 35: + time = 840000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 36: + time = 864000 + flags = 1 + data = length 288, hash 9B96F72A + sample 37: + time = 888000 + flags = 1 + data = length 336, hash E917C122 + sample 38: + time = 912000 + flags = 1 + data = length 336, hash 10ED1470 + sample 39: + time = 936000 + flags = 1 + data = length 288, hash 706B8A7C + sample 40: + time = 960000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 41: + time = 984000 + flags = 1 + data = length 336, hash D4160463 + sample 42: + time = 1008000 + flags = 1 + data = length 336, hash EC557B14 + sample 43: + time = 1032000 + flags = 1 + data = length 288, hash 5598CF8B + sample 44: + time = 1056000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 45: + time = 1080000 + flags = 1 + data = length 336, hash 1C585FEF + sample 46: + time = 1104000 + flags = 1 + data = length 336, hash A4A4855E + sample 47: + time = 1128000 + flags = 1 + data = length 336, hash CECA51D3 + sample 48: + time = 1152000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 49: + time = 1176000 + flags = 1 + data = length 336, hash 9EB2609D + sample 50: + time = 1200000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 51: + time = 1224000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 52: + time = 1248000 + flags = 1 + data = length 336, hash CDBC7032 + sample 53: + time = 1272000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 54: + time = 1296000 + flags = 1 + data = length 336, hash DB6BB1E + sample 55: + time = 1320000 + flags = 1 + data = length 336, hash EBE951F4 + sample 56: + time = 1344000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 57: + time = 1368000 + flags = 1 + data = length 336, hash 36A7D455 + sample 58: + time = 1392000 + flags = 1 + data = length 336, hash 84545F8C + sample 59: + time = 1416000 + flags = 1 + data = length 336, hash F66F3045 + sample 60: + time = 1440000 + flags = 1 + data = length 576, hash 5AB089EA + sample 61: + time = 1464000 + flags = 1 + data = length 336, hash 8868086 + sample 62: + time = 1488000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 63: + time = 1512000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 64: + time = 1536000 + flags = 1 + data = length 336, hash BEB27A75 + sample 65: + time = 1560000 + flags = 1 + data = length 336, hash E251E0FD + sample 66: + time = 1584000 + flags = 1 + data = length 288, hash D54C970 + sample 67: + time = 1608000 + flags = 1 + data = length 336, hash 52C473B9 + sample 68: + time = 1632000 + flags = 1 + data = length 336, hash F5F13334 + sample 69: + time = 1656000 + flags = 1 + data = length 480, hash A5F1E987 + sample 70: + time = 1680000 + flags = 1 + data = length 288, hash 453A1267 + sample 71: + time = 1704000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 72: + time = 1728000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 73: + time = 1752000 + flags = 1 + data = length 336, hash 751A395A + sample 74: + time = 1776000 + flags = 1 + data = length 336, hash EE38DB02 + sample 75: + time = 1800000 + flags = 1 + data = length 336, hash F18837E2 + sample 76: + time = 1824000 + flags = 1 + data = length 336, hash ED36B78E + sample 77: + time = 1848000 + flags = 1 + data = length 336, hash B3D28289 + sample 78: + time = 1872000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 79: + time = 1896000 + flags = 1 + data = length 336, hash CFD5E966 + sample 80: + time = 1920000 + flags = 1 + data = length 288, hash DC08E267 + sample 81: + time = 1944000 + flags = 1 + data = length 336, hash 6530CB78 + sample 82: + time = 1968000 + flags = 1 + data = length 336, hash 6CC6636E + sample 83: + time = 1992000 + flags = 1 + data = length 336, hash 613047C1 + sample 84: + time = 2016000 + flags = 1 + data = length 288, hash CDC747BF + sample 85: + time = 2040000 + flags = 1 + data = length 336, hash AF22AA74 + sample 86: + time = 2064000 + flags = 1 + data = length 384, hash 82F326AA + sample 87: + time = 2088000 + flags = 1 + data = length 384, hash EDA26C4D + sample 88: + time = 2112000 + flags = 1 + data = length 336, hash 94C643DC + sample 89: + time = 2136000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 90: + time = 2160000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 91: + time = 2184000 + flags = 1 + data = length 336, hash 7E472219 + sample 92: + time = 2208000 + flags = 1 + data = length 336, hash DA47B9FA + sample 93: + time = 2232000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 94: + time = 2256000 + flags = 1 + data = length 288, hash DBF93FAC + sample 95: + time = 2280000 + flags = 1 + data = length 336, hash 243F4B2 + sample 96: + time = 2304000 + flags = 1 + data = length 336, hash 2E881490 + sample 97: + time = 2328000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 98: + time = 2352000 + flags = 1 + data = length 336, hash C73E5D30 + sample 99: + time = 2376000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 100: + time = 2400000 + flags = 1 + data = length 336, hash E0135533 + sample 101: + time = 2424000 + flags = 1 + data = length 336, hash D13C9DBC + sample 102: + time = 2448000 + flags = 1 + data = length 336, hash 63D524CA + sample 103: + time = 2472000 + flags = 1 + data = length 288, hash A28514C3 + sample 104: + time = 2496000 + flags = 1 + data = length 336, hash 72B647FF + sample 105: + time = 2520000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 106: + time = 2544000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 107: + time = 2568000 + flags = 1 + data = length 336, hash 121B913B + sample 108: + time = 2592000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 109: + time = 2616000 + flags = 1 + data = length 336, hash 5B5823DE + sample 110: + time = 2640000 + flags = 1 + data = length 384, hash D8B83F78 + sample 111: + time = 2664000 + flags = 1 + data = length 240, hash E649682F + sample 112: + time = 2688000 + flags = 1 + data = length 96, hash C559A6F4 + sample 113: + time = 2712000 + flags = 1 + data = length 96, hash 792796BC + sample 114: + time = 2736000 + flags = 1 + data = length 120, hash 8172CD0E + sample 115: + time = 2760000 + flags = 1 + data = length 120, hash F562B52F + sample 116: + time = 2784000 + flags = 1 + data = length 96, hash FF8D5B98 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.2.dump new file mode 100644 index 0000000000..e35fb7f541 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.2.dump @@ -0,0 +1,373 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=1404000, position=10413]] + getPosition(1404000) = [[timeUs=1404000, position=10413]] + getPosition(2808000) = [[timeUs=1404000, position=10413]] +numberOfTracks = 1 +track 0: + total output bytes = 27888 + sample count = 88 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 1404000 + flags = 1 + data = length 336, hash 8C435F6A + sample 1: + time = 1428000 + flags = 1 + data = length 336, hash 60D3F80C + sample 2: + time = 1452000 + flags = 1 + data = length 336, hash DC15B68B + sample 3: + time = 1476000 + flags = 1 + data = length 288, hash FF3DF141 + sample 4: + time = 1500000 + flags = 1 + data = length 336, hash A64B3042 + sample 5: + time = 1524000 + flags = 1 + data = length 336, hash ACA622A1 + sample 6: + time = 1548000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 7: + time = 1572000 + flags = 1 + data = length 288, hash 9B96F72A + sample 8: + time = 1596000 + flags = 1 + data = length 336, hash E917C122 + sample 9: + time = 1620000 + flags = 1 + data = length 336, hash 10ED1470 + sample 10: + time = 1644000 + flags = 1 + data = length 288, hash 706B8A7C + sample 11: + time = 1668000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 12: + time = 1692000 + flags = 1 + data = length 336, hash D4160463 + sample 13: + time = 1716000 + flags = 1 + data = length 336, hash EC557B14 + sample 14: + time = 1740000 + flags = 1 + data = length 288, hash 5598CF8B + sample 15: + time = 1764000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 16: + time = 1788000 + flags = 1 + data = length 336, hash 1C585FEF + sample 17: + time = 1812000 + flags = 1 + data = length 336, hash A4A4855E + sample 18: + time = 1836000 + flags = 1 + data = length 336, hash CECA51D3 + sample 19: + time = 1860000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 20: + time = 1884000 + flags = 1 + data = length 336, hash 9EB2609D + sample 21: + time = 1908000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 22: + time = 1932000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 23: + time = 1956000 + flags = 1 + data = length 336, hash CDBC7032 + sample 24: + time = 1980000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 25: + time = 2004000 + flags = 1 + data = length 336, hash DB6BB1E + sample 26: + time = 2028000 + flags = 1 + data = length 336, hash EBE951F4 + sample 27: + time = 2052000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 28: + time = 2076000 + flags = 1 + data = length 336, hash 36A7D455 + sample 29: + time = 2100000 + flags = 1 + data = length 336, hash 84545F8C + sample 30: + time = 2124000 + flags = 1 + data = length 336, hash F66F3045 + sample 31: + time = 2148000 + flags = 1 + data = length 576, hash 5AB089EA + sample 32: + time = 2172000 + flags = 1 + data = length 336, hash 8868086 + sample 33: + time = 2196000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 34: + time = 2220000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 35: + time = 2244000 + flags = 1 + data = length 336, hash BEB27A75 + sample 36: + time = 2268000 + flags = 1 + data = length 336, hash E251E0FD + sample 37: + time = 2292000 + flags = 1 + data = length 288, hash D54C970 + sample 38: + time = 2316000 + flags = 1 + data = length 336, hash 52C473B9 + sample 39: + time = 2340000 + flags = 1 + data = length 336, hash F5F13334 + sample 40: + time = 2364000 + flags = 1 + data = length 480, hash A5F1E987 + sample 41: + time = 2388000 + flags = 1 + data = length 288, hash 453A1267 + sample 42: + time = 2412000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 43: + time = 2436000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 44: + time = 2460000 + flags = 1 + data = length 336, hash 751A395A + sample 45: + time = 2484000 + flags = 1 + data = length 336, hash EE38DB02 + sample 46: + time = 2508000 + flags = 1 + data = length 336, hash F18837E2 + sample 47: + time = 2532000 + flags = 1 + data = length 336, hash ED36B78E + sample 48: + time = 2556000 + flags = 1 + data = length 336, hash B3D28289 + sample 49: + time = 2580000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 50: + time = 2604000 + flags = 1 + data = length 336, hash CFD5E966 + sample 51: + time = 2628000 + flags = 1 + data = length 288, hash DC08E267 + sample 52: + time = 2652000 + flags = 1 + data = length 336, hash 6530CB78 + sample 53: + time = 2676000 + flags = 1 + data = length 336, hash 6CC6636E + sample 54: + time = 2700000 + flags = 1 + data = length 336, hash 613047C1 + sample 55: + time = 2724000 + flags = 1 + data = length 288, hash CDC747BF + sample 56: + time = 2748000 + flags = 1 + data = length 336, hash AF22AA74 + sample 57: + time = 2772000 + flags = 1 + data = length 384, hash 82F326AA + sample 58: + time = 2796000 + flags = 1 + data = length 384, hash EDA26C4D + sample 59: + time = 2820000 + flags = 1 + data = length 336, hash 94C643DC + sample 60: + time = 2844000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 61: + time = 2868000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 62: + time = 2892000 + flags = 1 + data = length 336, hash 7E472219 + sample 63: + time = 2916000 + flags = 1 + data = length 336, hash DA47B9FA + sample 64: + time = 2940000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 65: + time = 2964000 + flags = 1 + data = length 288, hash DBF93FAC + sample 66: + time = 2988000 + flags = 1 + data = length 336, hash 243F4B2 + sample 67: + time = 3012000 + flags = 1 + data = length 336, hash 2E881490 + sample 68: + time = 3036000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 69: + time = 3060000 + flags = 1 + data = length 336, hash C73E5D30 + sample 70: + time = 3084000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 71: + time = 3108000 + flags = 1 + data = length 336, hash E0135533 + sample 72: + time = 3132000 + flags = 1 + data = length 336, hash D13C9DBC + sample 73: + time = 3156000 + flags = 1 + data = length 336, hash 63D524CA + sample 74: + time = 3180000 + flags = 1 + data = length 288, hash A28514C3 + sample 75: + time = 3204000 + flags = 1 + data = length 336, hash 72B647FF + sample 76: + time = 3228000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 77: + time = 3252000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 78: + time = 3276000 + flags = 1 + data = length 336, hash 121B913B + sample 79: + time = 3300000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 80: + time = 3324000 + flags = 1 + data = length 336, hash 5B5823DE + sample 81: + time = 3348000 + flags = 1 + data = length 384, hash D8B83F78 + sample 82: + time = 3372000 + flags = 1 + data = length 240, hash E649682F + sample 83: + time = 3396000 + flags = 1 + data = length 96, hash C559A6F4 + sample 84: + time = 3420000 + flags = 1 + data = length 96, hash 792796BC + sample 85: + time = 3444000 + flags = 1 + data = length 120, hash 8172CD0E + sample 86: + time = 3468000 + flags = 1 + data = length 120, hash F562B52F + sample 87: + time = 3492000 + flags = 1 + data = length 96, hash FF8D5B98 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.3.dump new file mode 100644 index 0000000000..e35fb7f541 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.3.dump @@ -0,0 +1,373 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=1404000, position=10413]] + getPosition(1404000) = [[timeUs=1404000, position=10413]] + getPosition(2808000) = [[timeUs=1404000, position=10413]] +numberOfTracks = 1 +track 0: + total output bytes = 27888 + sample count = 88 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 1404000 + flags = 1 + data = length 336, hash 8C435F6A + sample 1: + time = 1428000 + flags = 1 + data = length 336, hash 60D3F80C + sample 2: + time = 1452000 + flags = 1 + data = length 336, hash DC15B68B + sample 3: + time = 1476000 + flags = 1 + data = length 288, hash FF3DF141 + sample 4: + time = 1500000 + flags = 1 + data = length 336, hash A64B3042 + sample 5: + time = 1524000 + flags = 1 + data = length 336, hash ACA622A1 + sample 6: + time = 1548000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 7: + time = 1572000 + flags = 1 + data = length 288, hash 9B96F72A + sample 8: + time = 1596000 + flags = 1 + data = length 336, hash E917C122 + sample 9: + time = 1620000 + flags = 1 + data = length 336, hash 10ED1470 + sample 10: + time = 1644000 + flags = 1 + data = length 288, hash 706B8A7C + sample 11: + time = 1668000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 12: + time = 1692000 + flags = 1 + data = length 336, hash D4160463 + sample 13: + time = 1716000 + flags = 1 + data = length 336, hash EC557B14 + sample 14: + time = 1740000 + flags = 1 + data = length 288, hash 5598CF8B + sample 15: + time = 1764000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 16: + time = 1788000 + flags = 1 + data = length 336, hash 1C585FEF + sample 17: + time = 1812000 + flags = 1 + data = length 336, hash A4A4855E + sample 18: + time = 1836000 + flags = 1 + data = length 336, hash CECA51D3 + sample 19: + time = 1860000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 20: + time = 1884000 + flags = 1 + data = length 336, hash 9EB2609D + sample 21: + time = 1908000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 22: + time = 1932000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 23: + time = 1956000 + flags = 1 + data = length 336, hash CDBC7032 + sample 24: + time = 1980000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 25: + time = 2004000 + flags = 1 + data = length 336, hash DB6BB1E + sample 26: + time = 2028000 + flags = 1 + data = length 336, hash EBE951F4 + sample 27: + time = 2052000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 28: + time = 2076000 + flags = 1 + data = length 336, hash 36A7D455 + sample 29: + time = 2100000 + flags = 1 + data = length 336, hash 84545F8C + sample 30: + time = 2124000 + flags = 1 + data = length 336, hash F66F3045 + sample 31: + time = 2148000 + flags = 1 + data = length 576, hash 5AB089EA + sample 32: + time = 2172000 + flags = 1 + data = length 336, hash 8868086 + sample 33: + time = 2196000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 34: + time = 2220000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 35: + time = 2244000 + flags = 1 + data = length 336, hash BEB27A75 + sample 36: + time = 2268000 + flags = 1 + data = length 336, hash E251E0FD + sample 37: + time = 2292000 + flags = 1 + data = length 288, hash D54C970 + sample 38: + time = 2316000 + flags = 1 + data = length 336, hash 52C473B9 + sample 39: + time = 2340000 + flags = 1 + data = length 336, hash F5F13334 + sample 40: + time = 2364000 + flags = 1 + data = length 480, hash A5F1E987 + sample 41: + time = 2388000 + flags = 1 + data = length 288, hash 453A1267 + sample 42: + time = 2412000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 43: + time = 2436000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 44: + time = 2460000 + flags = 1 + data = length 336, hash 751A395A + sample 45: + time = 2484000 + flags = 1 + data = length 336, hash EE38DB02 + sample 46: + time = 2508000 + flags = 1 + data = length 336, hash F18837E2 + sample 47: + time = 2532000 + flags = 1 + data = length 336, hash ED36B78E + sample 48: + time = 2556000 + flags = 1 + data = length 336, hash B3D28289 + sample 49: + time = 2580000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 50: + time = 2604000 + flags = 1 + data = length 336, hash CFD5E966 + sample 51: + time = 2628000 + flags = 1 + data = length 288, hash DC08E267 + sample 52: + time = 2652000 + flags = 1 + data = length 336, hash 6530CB78 + sample 53: + time = 2676000 + flags = 1 + data = length 336, hash 6CC6636E + sample 54: + time = 2700000 + flags = 1 + data = length 336, hash 613047C1 + sample 55: + time = 2724000 + flags = 1 + data = length 288, hash CDC747BF + sample 56: + time = 2748000 + flags = 1 + data = length 336, hash AF22AA74 + sample 57: + time = 2772000 + flags = 1 + data = length 384, hash 82F326AA + sample 58: + time = 2796000 + flags = 1 + data = length 384, hash EDA26C4D + sample 59: + time = 2820000 + flags = 1 + data = length 336, hash 94C643DC + sample 60: + time = 2844000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 61: + time = 2868000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 62: + time = 2892000 + flags = 1 + data = length 336, hash 7E472219 + sample 63: + time = 2916000 + flags = 1 + data = length 336, hash DA47B9FA + sample 64: + time = 2940000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 65: + time = 2964000 + flags = 1 + data = length 288, hash DBF93FAC + sample 66: + time = 2988000 + flags = 1 + data = length 336, hash 243F4B2 + sample 67: + time = 3012000 + flags = 1 + data = length 336, hash 2E881490 + sample 68: + time = 3036000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 69: + time = 3060000 + flags = 1 + data = length 336, hash C73E5D30 + sample 70: + time = 3084000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 71: + time = 3108000 + flags = 1 + data = length 336, hash E0135533 + sample 72: + time = 3132000 + flags = 1 + data = length 336, hash D13C9DBC + sample 73: + time = 3156000 + flags = 1 + data = length 336, hash 63D524CA + sample 74: + time = 3180000 + flags = 1 + data = length 288, hash A28514C3 + sample 75: + time = 3204000 + flags = 1 + data = length 336, hash 72B647FF + sample 76: + time = 3228000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 77: + time = 3252000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 78: + time = 3276000 + flags = 1 + data = length 336, hash 121B913B + sample 79: + time = 3300000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 80: + time = 3324000 + flags = 1 + data = length 336, hash 5B5823DE + sample 81: + time = 3348000 + flags = 1 + data = length 384, hash D8B83F78 + sample 82: + time = 3372000 + flags = 1 + data = length 240, hash E649682F + sample 83: + time = 3396000 + flags = 1 + data = length 96, hash C559A6F4 + sample 84: + time = 3420000 + flags = 1 + data = length 96, hash 792796BC + sample 85: + time = 3444000 + flags = 1 + data = length 120, hash 8172CD0E + sample 86: + time = 3468000 + flags = 1 + data = length 120, hash F562B52F + sample 87: + time = 3492000 + flags = 1 + data = length 96, hash FF8D5B98 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.unknown_length.dump new file mode 100644 index 0000000000..eef73c01f2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.unknown_length.dump @@ -0,0 +1,489 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=1404000, position=10413]] + getPosition(1404000) = [[timeUs=1404000, position=10413]] + getPosition(2808000) = [[timeUs=1404000, position=10413]] +numberOfTracks = 1 +track 0: + total output bytes = 38160 + sample count = 117 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 0 + flags = 1 + data = length 96, hash 1F161542 + sample 1: + time = 24000 + flags = 1 + data = length 768, hash CD1DC50F + sample 2: + time = 48000 + flags = 1 + data = length 336, hash 3F64124B + sample 3: + time = 72000 + flags = 1 + data = length 336, hash 8FFED94E + sample 4: + time = 96000 + flags = 1 + data = length 288, hash 9CD77D47 + sample 5: + time = 120000 + flags = 1 + data = length 384, hash 24607BB5 + sample 6: + time = 144000 + flags = 1 + data = length 480, hash 4937EBAB + sample 7: + time = 168000 + flags = 1 + data = length 336, hash 546342B1 + sample 8: + time = 192000 + flags = 1 + data = length 336, hash 79E0923F + sample 9: + time = 216000 + flags = 1 + data = length 336, hash AB1F3948 + sample 10: + time = 240000 + flags = 1 + data = length 336, hash C3A4D888 + sample 11: + time = 264000 + flags = 1 + data = length 288, hash 7867DA45 + sample 12: + time = 288000 + flags = 1 + data = length 336, hash B1240B73 + sample 13: + time = 312000 + flags = 1 + data = length 336, hash 94CFCD35 + sample 14: + time = 336000 + flags = 1 + data = length 288, hash 94F412C + sample 15: + time = 360000 + flags = 1 + data = length 336, hash A1D9FF41 + sample 16: + time = 384000 + flags = 1 + data = length 288, hash 2A8DA21B + sample 17: + time = 408000 + flags = 1 + data = length 336, hash 6A429CE + sample 18: + time = 432000 + flags = 1 + data = length 336, hash 68853982 + sample 19: + time = 456000 + flags = 1 + data = length 384, hash 1D6F779C + sample 20: + time = 480000 + flags = 1 + data = length 480, hash 6B31EBEE + sample 21: + time = 504000 + flags = 1 + data = length 336, hash 888335BE + sample 22: + time = 528000 + flags = 1 + data = length 336, hash 6072AC8B + sample 23: + time = 552000 + flags = 1 + data = length 336, hash C9D24234 + sample 24: + time = 576000 + flags = 1 + data = length 288, hash 52BF4D1E + sample 25: + time = 600000 + flags = 1 + data = length 336, hash F93F4F0 + sample 26: + time = 624000 + flags = 1 + data = length 336, hash 8617688A + sample 27: + time = 648000 + flags = 1 + data = length 480, hash FAB0D31B + sample 28: + time = 672000 + flags = 1 + data = length 384, hash FA4B53E2 + sample 29: + time = 696000 + flags = 1 + data = length 336, hash 8C435F6A + sample 30: + time = 720000 + flags = 1 + data = length 336, hash 60D3F80C + sample 31: + time = 744000 + flags = 1 + data = length 336, hash DC15B68B + sample 32: + time = 768000 + flags = 1 + data = length 288, hash FF3DF141 + sample 33: + time = 792000 + flags = 1 + data = length 336, hash A64B3042 + sample 34: + time = 816000 + flags = 1 + data = length 336, hash ACA622A1 + sample 35: + time = 840000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 36: + time = 864000 + flags = 1 + data = length 288, hash 9B96F72A + sample 37: + time = 888000 + flags = 1 + data = length 336, hash E917C122 + sample 38: + time = 912000 + flags = 1 + data = length 336, hash 10ED1470 + sample 39: + time = 936000 + flags = 1 + data = length 288, hash 706B8A7C + sample 40: + time = 960000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 41: + time = 984000 + flags = 1 + data = length 336, hash D4160463 + sample 42: + time = 1008000 + flags = 1 + data = length 336, hash EC557B14 + sample 43: + time = 1032000 + flags = 1 + data = length 288, hash 5598CF8B + sample 44: + time = 1056000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 45: + time = 1080000 + flags = 1 + data = length 336, hash 1C585FEF + sample 46: + time = 1104000 + flags = 1 + data = length 336, hash A4A4855E + sample 47: + time = 1128000 + flags = 1 + data = length 336, hash CECA51D3 + sample 48: + time = 1152000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 49: + time = 1176000 + flags = 1 + data = length 336, hash 9EB2609D + sample 50: + time = 1200000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 51: + time = 1224000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 52: + time = 1248000 + flags = 1 + data = length 336, hash CDBC7032 + sample 53: + time = 1272000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 54: + time = 1296000 + flags = 1 + data = length 336, hash DB6BB1E + sample 55: + time = 1320000 + flags = 1 + data = length 336, hash EBE951F4 + sample 56: + time = 1344000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 57: + time = 1368000 + flags = 1 + data = length 336, hash 36A7D455 + sample 58: + time = 1392000 + flags = 1 + data = length 336, hash 84545F8C + sample 59: + time = 1416000 + flags = 1 + data = length 336, hash F66F3045 + sample 60: + time = 1440000 + flags = 1 + data = length 576, hash 5AB089EA + sample 61: + time = 1464000 + flags = 1 + data = length 336, hash 8868086 + sample 62: + time = 1488000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 63: + time = 1512000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 64: + time = 1536000 + flags = 1 + data = length 336, hash BEB27A75 + sample 65: + time = 1560000 + flags = 1 + data = length 336, hash E251E0FD + sample 66: + time = 1584000 + flags = 1 + data = length 288, hash D54C970 + sample 67: + time = 1608000 + flags = 1 + data = length 336, hash 52C473B9 + sample 68: + time = 1632000 + flags = 1 + data = length 336, hash F5F13334 + sample 69: + time = 1656000 + flags = 1 + data = length 480, hash A5F1E987 + sample 70: + time = 1680000 + flags = 1 + data = length 288, hash 453A1267 + sample 71: + time = 1704000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 72: + time = 1728000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 73: + time = 1752000 + flags = 1 + data = length 336, hash 751A395A + sample 74: + time = 1776000 + flags = 1 + data = length 336, hash EE38DB02 + sample 75: + time = 1800000 + flags = 1 + data = length 336, hash F18837E2 + sample 76: + time = 1824000 + flags = 1 + data = length 336, hash ED36B78E + sample 77: + time = 1848000 + flags = 1 + data = length 336, hash B3D28289 + sample 78: + time = 1872000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 79: + time = 1896000 + flags = 1 + data = length 336, hash CFD5E966 + sample 80: + time = 1920000 + flags = 1 + data = length 288, hash DC08E267 + sample 81: + time = 1944000 + flags = 1 + data = length 336, hash 6530CB78 + sample 82: + time = 1968000 + flags = 1 + data = length 336, hash 6CC6636E + sample 83: + time = 1992000 + flags = 1 + data = length 336, hash 613047C1 + sample 84: + time = 2016000 + flags = 1 + data = length 288, hash CDC747BF + sample 85: + time = 2040000 + flags = 1 + data = length 336, hash AF22AA74 + sample 86: + time = 2064000 + flags = 1 + data = length 384, hash 82F326AA + sample 87: + time = 2088000 + flags = 1 + data = length 384, hash EDA26C4D + sample 88: + time = 2112000 + flags = 1 + data = length 336, hash 94C643DC + sample 89: + time = 2136000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 90: + time = 2160000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 91: + time = 2184000 + flags = 1 + data = length 336, hash 7E472219 + sample 92: + time = 2208000 + flags = 1 + data = length 336, hash DA47B9FA + sample 93: + time = 2232000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 94: + time = 2256000 + flags = 1 + data = length 288, hash DBF93FAC + sample 95: + time = 2280000 + flags = 1 + data = length 336, hash 243F4B2 + sample 96: + time = 2304000 + flags = 1 + data = length 336, hash 2E881490 + sample 97: + time = 2328000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 98: + time = 2352000 + flags = 1 + data = length 336, hash C73E5D30 + sample 99: + time = 2376000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 100: + time = 2400000 + flags = 1 + data = length 336, hash E0135533 + sample 101: + time = 2424000 + flags = 1 + data = length 336, hash D13C9DBC + sample 102: + time = 2448000 + flags = 1 + data = length 336, hash 63D524CA + sample 103: + time = 2472000 + flags = 1 + data = length 288, hash A28514C3 + sample 104: + time = 2496000 + flags = 1 + data = length 336, hash 72B647FF + sample 105: + time = 2520000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 106: + time = 2544000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 107: + time = 2568000 + flags = 1 + data = length 336, hash 121B913B + sample 108: + time = 2592000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 109: + time = 2616000 + flags = 1 + data = length 336, hash 5B5823DE + sample 110: + time = 2640000 + flags = 1 + data = length 384, hash D8B83F78 + sample 111: + time = 2664000 + flags = 1 + data = length 240, hash E649682F + sample 112: + time = 2688000 + flags = 1 + data = length 96, hash C559A6F4 + sample 113: + time = 2712000 + flags = 1 + data = length 96, hash 792796BC + sample 114: + time = 2736000 + flags = 1 + data = length 120, hash 8172CD0E + sample 115: + time = 2760000 + flags = 1 + data = length 120, hash F562B52F + sample 116: + time = 2784000 + flags = 1 + data = length 96, hash FF8D5B98 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header-truncated-toc.mp3 b/libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header-truncated-toc.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c108e9696cfdfc285de28a8af96fdda7e7bfdb55 GIT binary patch literal 38301 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 -u>@Z;|X^0A7!m&+g}` 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 YBIp1BZ7{#u&jA1iv8Vvp|3SU~1oJYV-T(jq literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/playbackdumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.dump b/libraries/test_data/src/test/assets/playbackdumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.dump new file mode 100644 index 0000000000..718b553e80 --- /dev/null +++ b/libraries/test_data/src/test/assets/playbackdumps/mp3/bear-vbr-vbri-header-truncated-toc.mp3.dump @@ -0,0 +1,1185 @@ +MediaCodecAdapter (exotest.audio.mpeg): + inputBuffers: + count = 118 + input buffer #0: + timeUs = 1000000000000 + contents = length 96, hash 1F161542 + input buffer #1: + timeUs = 1000000024000 + contents = length 768, hash CD1DC50F + input buffer #2: + timeUs = 1000000048000 + contents = length 336, hash 3F64124B + input buffer #3: + timeUs = 1000000072000 + contents = length 336, hash 8FFED94E + input buffer #4: + timeUs = 1000000096000 + contents = length 288, hash 9CD77D47 + input buffer #5: + timeUs = 1000000120000 + contents = length 384, hash 24607BB5 + input buffer #6: + timeUs = 1000000144000 + contents = length 480, hash 4937EBAB + input buffer #7: + timeUs = 1000000168000 + contents = length 336, hash 546342B1 + input buffer #8: + timeUs = 1000000192000 + contents = length 336, hash 79E0923F + input buffer #9: + timeUs = 1000000216000 + contents = length 336, hash AB1F3948 + input buffer #10: + timeUs = 1000000240000 + contents = length 336, hash C3A4D888 + input buffer #11: + timeUs = 1000000264000 + contents = length 288, hash 7867DA45 + input buffer #12: + timeUs = 1000000288000 + contents = length 336, hash B1240B73 + input buffer #13: + timeUs = 1000000312000 + contents = length 336, hash 94CFCD35 + input buffer #14: + timeUs = 1000000336000 + contents = length 288, hash 94F412C + input buffer #15: + timeUs = 1000000360000 + contents = length 336, hash A1D9FF41 + input buffer #16: + timeUs = 1000000384000 + contents = length 288, hash 2A8DA21B + input buffer #17: + timeUs = 1000000408000 + contents = length 336, hash 6A429CE + input buffer #18: + timeUs = 1000000432000 + contents = length 336, hash 68853982 + input buffer #19: + timeUs = 1000000456000 + contents = length 384, hash 1D6F779C + input buffer #20: + timeUs = 1000000480000 + contents = length 480, hash 6B31EBEE + input buffer #21: + timeUs = 1000000504000 + contents = length 336, hash 888335BE + input buffer #22: + timeUs = 1000000528000 + contents = length 336, hash 6072AC8B + input buffer #23: + timeUs = 1000000552000 + contents = length 336, hash C9D24234 + input buffer #24: + timeUs = 1000000576000 + contents = length 288, hash 52BF4D1E + input buffer #25: + timeUs = 1000000600000 + contents = length 336, hash F93F4F0 + input buffer #26: + timeUs = 1000000624000 + contents = length 336, hash 8617688A + input buffer #27: + timeUs = 1000000648000 + contents = length 480, hash FAB0D31B + input buffer #28: + timeUs = 1000000672000 + contents = length 384, hash FA4B53E2 + input buffer #29: + timeUs = 1000000696000 + contents = length 336, hash 8C435F6A + input buffer #30: + timeUs = 1000000720000 + contents = length 336, hash 60D3F80C + input buffer #31: + timeUs = 1000000744000 + contents = length 336, hash DC15B68B + input buffer #32: + timeUs = 1000000768000 + contents = length 288, hash FF3DF141 + input buffer #33: + timeUs = 1000000792000 + contents = length 336, hash A64B3042 + input buffer #34: + timeUs = 1000000816000 + contents = length 336, hash ACA622A1 + input buffer #35: + timeUs = 1000000840000 + contents = length 288, hash 3E34B8D4 + input buffer #36: + timeUs = 1000000864000 + contents = length 288, hash 9B96F72A + input buffer #37: + timeUs = 1000000888000 + contents = length 336, hash E917C122 + input buffer #38: + timeUs = 1000000912000 + contents = length 336, hash 10ED1470 + input buffer #39: + timeUs = 1000000936000 + contents = length 288, hash 706B8A7C + input buffer #40: + timeUs = 1000000960000 + contents = length 336, hash 71FFE4A0 + input buffer #41: + timeUs = 1000000984000 + contents = length 336, hash D4160463 + input buffer #42: + timeUs = 1000001008000 + contents = length 336, hash EC557B14 + input buffer #43: + timeUs = 1000001032000 + contents = length 288, hash 5598CF8B + input buffer #44: + timeUs = 1000001056000 + contents = length 336, hash 7E0AB41 + input buffer #45: + timeUs = 1000001080000 + contents = length 336, hash 1C585FEF + input buffer #46: + timeUs = 1000001104000 + contents = length 336, hash A4A4855E + input buffer #47: + timeUs = 1000001128000 + contents = length 336, hash CECA51D3 + input buffer #48: + timeUs = 1000001152000 + contents = length 288, hash 2D362DC5 + input buffer #49: + timeUs = 1000001176000 + contents = length 336, hash 9EB2609D + input buffer #50: + timeUs = 1000001200000 + contents = length 336, hash 28FFB3FE + input buffer #51: + timeUs = 1000001224000 + contents = length 288, hash 2AA2D216 + input buffer #52: + timeUs = 1000001248000 + contents = length 336, hash CDBC7032 + input buffer #53: + timeUs = 1000001272000 + contents = length 336, hash 25B13FE7 + input buffer #54: + timeUs = 1000001296000 + contents = length 336, hash DB6BB1E + input buffer #55: + timeUs = 1000001320000 + contents = length 336, hash EBE951F4 + input buffer #56: + timeUs = 1000001344000 + contents = length 288, hash 9E2EBFF7 + input buffer #57: + timeUs = 1000001368000 + contents = length 336, hash 36A7D455 + input buffer #58: + timeUs = 1000001392000 + contents = length 336, hash 84545F8C + input buffer #59: + timeUs = 1000001416000 + contents = length 336, hash F66F3045 + input buffer #60: + timeUs = 1000001440000 + contents = length 576, hash 5AB089EA + input buffer #61: + timeUs = 1000001464000 + contents = length 336, hash 8868086 + input buffer #62: + timeUs = 1000001488000 + contents = length 336, hash D5EB6D63 + input buffer #63: + timeUs = 1000001512000 + contents = length 288, hash 7A5374B7 + input buffer #64: + timeUs = 1000001536000 + contents = length 336, hash BEB27A75 + input buffer #65: + timeUs = 1000001560000 + contents = length 336, hash E251E0FD + input buffer #66: + timeUs = 1000001584000 + contents = length 288, hash D54C970 + input buffer #67: + timeUs = 1000001608000 + contents = length 336, hash 52C473B9 + input buffer #68: + timeUs = 1000001632000 + contents = length 336, hash F5F13334 + input buffer #69: + timeUs = 1000001656000 + contents = length 480, hash A5F1E987 + input buffer #70: + timeUs = 1000001680000 + contents = length 288, hash 453A1267 + input buffer #71: + timeUs = 1000001704000 + contents = length 288, hash 7C6C2EA9 + input buffer #72: + timeUs = 1000001728000 + contents = length 336, hash F4BFECA4 + input buffer #73: + timeUs = 1000001752000 + contents = length 336, hash 751A395A + input buffer #74: + timeUs = 1000001776000 + contents = length 336, hash EE38DB02 + input buffer #75: + timeUs = 1000001800000 + contents = length 336, hash F18837E2 + input buffer #76: + timeUs = 1000001824000 + contents = length 336, hash ED36B78E + input buffer #77: + timeUs = 1000001848000 + contents = length 336, hash B3D28289 + input buffer #78: + timeUs = 1000001872000 + contents = length 288, hash 8BDE28E1 + input buffer #79: + timeUs = 1000001896000 + contents = length 336, hash CFD5E966 + input buffer #80: + timeUs = 1000001920000 + contents = length 288, hash DC08E267 + input buffer #81: + timeUs = 1000001944000 + contents = length 336, hash 6530CB78 + input buffer #82: + timeUs = 1000001968000 + contents = length 336, hash 6CC6636E + input buffer #83: + timeUs = 1000001992000 + contents = length 336, hash 613047C1 + input buffer #84: + timeUs = 1000002016000 + contents = length 288, hash CDC747BF + input buffer #85: + timeUs = 1000002040000 + contents = length 336, hash AF22AA74 + input buffer #86: + timeUs = 1000002064000 + contents = length 384, hash 82F326AA + input buffer #87: + timeUs = 1000002088000 + contents = length 384, hash EDA26C4D + input buffer #88: + timeUs = 1000002112000 + contents = length 336, hash 94C643DC + input buffer #89: + timeUs = 1000002136000 + contents = length 288, hash CB5D9C40 + input buffer #90: + timeUs = 1000002160000 + contents = length 336, hash 1E69DE3F + input buffer #91: + timeUs = 1000002184000 + contents = length 336, hash 7E472219 + input buffer #92: + timeUs = 1000002208000 + contents = length 336, hash DA47B9FA + input buffer #93: + timeUs = 1000002232000 + contents = length 336, hash DD0ABB7C + input buffer #94: + timeUs = 1000002256000 + contents = length 288, hash DBF93FAC + input buffer #95: + timeUs = 1000002280000 + contents = length 336, hash 243F4B2 + input buffer #96: + timeUs = 1000002304000 + contents = length 336, hash 2E881490 + input buffer #97: + timeUs = 1000002328000 + contents = length 288, hash 1C28C8BE + input buffer #98: + timeUs = 1000002352000 + contents = length 336, hash C73E5D30 + input buffer #99: + timeUs = 1000002376000 + contents = length 288, hash 98B5BFF6 + input buffer #100: + timeUs = 1000002400000 + contents = length 336, hash E0135533 + input buffer #101: + timeUs = 1000002424000 + contents = length 336, hash D13C9DBC + input buffer #102: + timeUs = 1000002448000 + contents = length 336, hash 63D524CA + input buffer #103: + timeUs = 1000002472000 + contents = length 288, hash A28514C3 + input buffer #104: + timeUs = 1000002496000 + contents = length 336, hash 72B647FF + input buffer #105: + timeUs = 1000002520000 + contents = length 336, hash 8F740AB1 + input buffer #106: + timeUs = 1000002544000 + contents = length 336, hash 5E3C7E93 + input buffer #107: + timeUs = 1000002568000 + contents = length 336, hash 121B913B + input buffer #108: + timeUs = 1000002592000 + contents = length 336, hash 578FCCF2 + input buffer #109: + timeUs = 1000002616000 + contents = length 336, hash 5B5823DE + input buffer #110: + timeUs = 1000002640000 + contents = length 384, hash D8B83F78 + input buffer #111: + timeUs = 1000002664000 + contents = length 240, hash E649682F + input buffer #112: + timeUs = 1000002688000 + contents = length 96, hash C559A6F4 + input buffer #113: + timeUs = 1000002712000 + contents = length 96, hash 792796BC + input buffer #114: + timeUs = 1000002736000 + contents = length 120, hash 8172CD0E + input buffer #115: + timeUs = 1000002760000 + contents = length 120, hash F562B52F + input buffer #116: + timeUs = 1000002784000 + contents = length 96, hash FF8D5B98 + input buffer #117: + timeUs = 0 + flags = 4 + contents = length 0, hash 1 + outputBuffers: + count = 117 + output buffer #0: + timeUs = 1000000000000 + size = 0 + rendered = false + output buffer #1: + timeUs = 1000000024000 + size = 0 + rendered = false + output buffer #2: + timeUs = 1000000048000 + size = 0 + rendered = false + output buffer #3: + timeUs = 1000000072000 + size = 0 + rendered = false + output buffer #4: + timeUs = 1000000096000 + size = 0 + rendered = false + output buffer #5: + timeUs = 1000000120000 + size = 0 + rendered = false + output buffer #6: + timeUs = 1000000144000 + size = 0 + rendered = false + output buffer #7: + timeUs = 1000000168000 + size = 0 + rendered = false + output buffer #8: + timeUs = 1000000192000 + size = 0 + rendered = false + output buffer #9: + timeUs = 1000000216000 + size = 0 + rendered = false + output buffer #10: + timeUs = 1000000240000 + size = 0 + rendered = false + output buffer #11: + timeUs = 1000000264000 + size = 0 + rendered = false + output buffer #12: + timeUs = 1000000288000 + size = 0 + rendered = false + output buffer #13: + timeUs = 1000000312000 + size = 0 + rendered = false + output buffer #14: + timeUs = 1000000336000 + size = 0 + rendered = false + output buffer #15: + timeUs = 1000000360000 + size = 0 + rendered = false + output buffer #16: + timeUs = 1000000384000 + size = 0 + rendered = false + output buffer #17: + timeUs = 1000000408000 + size = 0 + rendered = false + output buffer #18: + timeUs = 1000000432000 + size = 0 + rendered = false + output buffer #19: + timeUs = 1000000456000 + size = 0 + rendered = false + output buffer #20: + timeUs = 1000000480000 + size = 0 + rendered = false + output buffer #21: + timeUs = 1000000504000 + size = 0 + rendered = false + output buffer #22: + timeUs = 1000000528000 + size = 0 + rendered = false + output buffer #23: + timeUs = 1000000552000 + size = 0 + rendered = false + output buffer #24: + timeUs = 1000000576000 + size = 0 + rendered = false + output buffer #25: + timeUs = 1000000600000 + size = 0 + rendered = false + output buffer #26: + timeUs = 1000000624000 + size = 0 + rendered = false + output buffer #27: + timeUs = 1000000648000 + size = 0 + rendered = false + output buffer #28: + timeUs = 1000000672000 + size = 0 + rendered = false + output buffer #29: + timeUs = 1000000696000 + size = 0 + rendered = false + output buffer #30: + timeUs = 1000000720000 + size = 0 + rendered = false + output buffer #31: + timeUs = 1000000744000 + size = 0 + rendered = false + output buffer #32: + timeUs = 1000000768000 + size = 0 + rendered = false + output buffer #33: + timeUs = 1000000792000 + size = 0 + rendered = false + output buffer #34: + timeUs = 1000000816000 + size = 0 + rendered = false + output buffer #35: + timeUs = 1000000840000 + size = 0 + rendered = false + output buffer #36: + timeUs = 1000000864000 + size = 0 + rendered = false + output buffer #37: + timeUs = 1000000888000 + size = 0 + rendered = false + output buffer #38: + timeUs = 1000000912000 + size = 0 + rendered = false + output buffer #39: + timeUs = 1000000936000 + size = 0 + rendered = false + output buffer #40: + timeUs = 1000000960000 + size = 0 + rendered = false + output buffer #41: + timeUs = 1000000984000 + size = 0 + rendered = false + output buffer #42: + timeUs = 1000001008000 + size = 0 + rendered = false + output buffer #43: + timeUs = 1000001032000 + size = 0 + rendered = false + output buffer #44: + timeUs = 1000001056000 + size = 0 + rendered = false + output buffer #45: + timeUs = 1000001080000 + size = 0 + rendered = false + output buffer #46: + timeUs = 1000001104000 + size = 0 + rendered = false + output buffer #47: + timeUs = 1000001128000 + size = 0 + rendered = false + output buffer #48: + timeUs = 1000001152000 + size = 0 + rendered = false + output buffer #49: + timeUs = 1000001176000 + size = 0 + rendered = false + output buffer #50: + timeUs = 1000001200000 + size = 0 + rendered = false + output buffer #51: + timeUs = 1000001224000 + size = 0 + rendered = false + output buffer #52: + timeUs = 1000001248000 + size = 0 + rendered = false + output buffer #53: + timeUs = 1000001272000 + size = 0 + rendered = false + output buffer #54: + timeUs = 1000001296000 + size = 0 + rendered = false + output buffer #55: + timeUs = 1000001320000 + size = 0 + rendered = false + output buffer #56: + timeUs = 1000001344000 + size = 0 + rendered = false + output buffer #57: + timeUs = 1000001368000 + size = 0 + rendered = false + output buffer #58: + timeUs = 1000001392000 + size = 0 + rendered = false + output buffer #59: + timeUs = 1000001416000 + size = 0 + rendered = false + output buffer #60: + timeUs = 1000001440000 + size = 0 + rendered = false + output buffer #61: + timeUs = 1000001464000 + size = 0 + rendered = false + output buffer #62: + timeUs = 1000001488000 + size = 0 + rendered = false + output buffer #63: + timeUs = 1000001512000 + size = 0 + rendered = false + output buffer #64: + timeUs = 1000001536000 + size = 0 + rendered = false + output buffer #65: + timeUs = 1000001560000 + size = 0 + rendered = false + output buffer #66: + timeUs = 1000001584000 + size = 0 + rendered = false + output buffer #67: + timeUs = 1000001608000 + size = 0 + rendered = false + output buffer #68: + timeUs = 1000001632000 + size = 0 + rendered = false + output buffer #69: + timeUs = 1000001656000 + size = 0 + rendered = false + output buffer #70: + timeUs = 1000001680000 + size = 0 + rendered = false + output buffer #71: + timeUs = 1000001704000 + size = 0 + rendered = false + output buffer #72: + timeUs = 1000001728000 + size = 0 + rendered = false + output buffer #73: + timeUs = 1000001752000 + size = 0 + rendered = false + output buffer #74: + timeUs = 1000001776000 + size = 0 + rendered = false + output buffer #75: + timeUs = 1000001800000 + size = 0 + rendered = false + output buffer #76: + timeUs = 1000001824000 + size = 0 + rendered = false + output buffer #77: + timeUs = 1000001848000 + size = 0 + rendered = false + output buffer #78: + timeUs = 1000001872000 + size = 0 + rendered = false + output buffer #79: + timeUs = 1000001896000 + size = 0 + rendered = false + output buffer #80: + timeUs = 1000001920000 + size = 0 + rendered = false + output buffer #81: + timeUs = 1000001944000 + size = 0 + rendered = false + output buffer #82: + timeUs = 1000001968000 + size = 0 + rendered = false + output buffer #83: + timeUs = 1000001992000 + size = 0 + rendered = false + output buffer #84: + timeUs = 1000002016000 + size = 0 + rendered = false + output buffer #85: + timeUs = 1000002040000 + size = 0 + rendered = false + output buffer #86: + timeUs = 1000002064000 + size = 0 + rendered = false + output buffer #87: + timeUs = 1000002088000 + size = 0 + rendered = false + output buffer #88: + timeUs = 1000002112000 + size = 0 + rendered = false + output buffer #89: + timeUs = 1000002136000 + size = 0 + rendered = false + output buffer #90: + timeUs = 1000002160000 + size = 0 + rendered = false + output buffer #91: + timeUs = 1000002184000 + size = 0 + rendered = false + output buffer #92: + timeUs = 1000002208000 + size = 0 + rendered = false + output buffer #93: + timeUs = 1000002232000 + size = 0 + rendered = false + output buffer #94: + timeUs = 1000002256000 + size = 0 + rendered = false + output buffer #95: + timeUs = 1000002280000 + size = 0 + rendered = false + output buffer #96: + timeUs = 1000002304000 + size = 0 + rendered = false + output buffer #97: + timeUs = 1000002328000 + size = 0 + rendered = false + output buffer #98: + timeUs = 1000002352000 + size = 0 + rendered = false + output buffer #99: + timeUs = 1000002376000 + size = 0 + rendered = false + output buffer #100: + timeUs = 1000002400000 + size = 0 + rendered = false + output buffer #101: + timeUs = 1000002424000 + size = 0 + rendered = false + output buffer #102: + timeUs = 1000002448000 + size = 0 + rendered = false + output buffer #103: + timeUs = 1000002472000 + size = 0 + rendered = false + output buffer #104: + timeUs = 1000002496000 + size = 0 + rendered = false + output buffer #105: + timeUs = 1000002520000 + size = 0 + rendered = false + output buffer #106: + timeUs = 1000002544000 + size = 0 + rendered = false + output buffer #107: + timeUs = 1000002568000 + size = 0 + rendered = false + output buffer #108: + timeUs = 1000002592000 + size = 0 + rendered = false + output buffer #109: + timeUs = 1000002616000 + size = 0 + rendered = false + output buffer #110: + timeUs = 1000002640000 + size = 0 + rendered = false + output buffer #111: + timeUs = 1000002664000 + size = 0 + rendered = false + output buffer #112: + timeUs = 1000002688000 + size = 0 + rendered = false + output buffer #113: + timeUs = 1000002712000 + size = 0 + rendered = false + output buffer #114: + timeUs = 1000002736000 + size = 0 + rendered = false + output buffer #115: + timeUs = 1000002760000 + size = 0 + rendered = false + output buffer #116: + timeUs = 1000002784000 + size = 0 + rendered = false +AudioSink: + buffer count = 117 + config: + pcmEncoding = 2 + channelCount = 2 + sampleRate = 48000 + buffer #0: + time = 1000000000000 + data = 1 + buffer #1: + time = 1000000024000 + data = 1 + buffer #2: + time = 1000000048000 + data = 1 + buffer #3: + time = 1000000072000 + data = 1 + buffer #4: + time = 1000000096000 + data = 1 + buffer #5: + time = 1000000120000 + data = 1 + buffer #6: + time = 1000000144000 + data = 1 + buffer #7: + time = 1000000168000 + data = 1 + buffer #8: + time = 1000000192000 + data = 1 + buffer #9: + time = 1000000216000 + data = 1 + buffer #10: + time = 1000000240000 + data = 1 + buffer #11: + time = 1000000264000 + data = 1 + buffer #12: + time = 1000000288000 + data = 1 + buffer #13: + time = 1000000312000 + data = 1 + buffer #14: + time = 1000000336000 + data = 1 + buffer #15: + time = 1000000360000 + data = 1 + buffer #16: + time = 1000000384000 + data = 1 + buffer #17: + time = 1000000408000 + data = 1 + buffer #18: + time = 1000000432000 + data = 1 + buffer #19: + time = 1000000456000 + data = 1 + buffer #20: + time = 1000000480000 + data = 1 + buffer #21: + time = 1000000504000 + data = 1 + buffer #22: + time = 1000000528000 + data = 1 + buffer #23: + time = 1000000552000 + data = 1 + buffer #24: + time = 1000000576000 + data = 1 + buffer #25: + time = 1000000600000 + data = 1 + buffer #26: + time = 1000000624000 + data = 1 + buffer #27: + time = 1000000648000 + data = 1 + buffer #28: + time = 1000000672000 + data = 1 + buffer #29: + time = 1000000696000 + data = 1 + buffer #30: + time = 1000000720000 + data = 1 + buffer #31: + time = 1000000744000 + data = 1 + buffer #32: + time = 1000000768000 + data = 1 + buffer #33: + time = 1000000792000 + data = 1 + buffer #34: + time = 1000000816000 + data = 1 + buffer #35: + time = 1000000840000 + data = 1 + buffer #36: + time = 1000000864000 + data = 1 + buffer #37: + time = 1000000888000 + data = 1 + buffer #38: + time = 1000000912000 + data = 1 + buffer #39: + time = 1000000936000 + data = 1 + buffer #40: + time = 1000000960000 + data = 1 + buffer #41: + time = 1000000984000 + data = 1 + buffer #42: + time = 1000001008000 + data = 1 + buffer #43: + time = 1000001032000 + data = 1 + buffer #44: + time = 1000001056000 + data = 1 + buffer #45: + time = 1000001080000 + data = 1 + buffer #46: + time = 1000001104000 + data = 1 + buffer #47: + time = 1000001128000 + data = 1 + buffer #48: + time = 1000001152000 + data = 1 + buffer #49: + time = 1000001176000 + data = 1 + buffer #50: + time = 1000001200000 + data = 1 + buffer #51: + time = 1000001224000 + data = 1 + buffer #52: + time = 1000001248000 + data = 1 + buffer #53: + time = 1000001272000 + data = 1 + buffer #54: + time = 1000001296000 + data = 1 + buffer #55: + time = 1000001320000 + data = 1 + buffer #56: + time = 1000001344000 + data = 1 + buffer #57: + time = 1000001368000 + data = 1 + buffer #58: + time = 1000001392000 + data = 1 + buffer #59: + time = 1000001416000 + data = 1 + buffer #60: + time = 1000001440000 + data = 1 + buffer #61: + time = 1000001464000 + data = 1 + buffer #62: + time = 1000001488000 + data = 1 + buffer #63: + time = 1000001512000 + data = 1 + buffer #64: + time = 1000001536000 + data = 1 + buffer #65: + time = 1000001560000 + data = 1 + buffer #66: + time = 1000001584000 + data = 1 + buffer #67: + time = 1000001608000 + data = 1 + buffer #68: + time = 1000001632000 + data = 1 + buffer #69: + time = 1000001656000 + data = 1 + buffer #70: + time = 1000001680000 + data = 1 + buffer #71: + time = 1000001704000 + data = 1 + buffer #72: + time = 1000001728000 + data = 1 + buffer #73: + time = 1000001752000 + data = 1 + buffer #74: + time = 1000001776000 + data = 1 + buffer #75: + time = 1000001800000 + data = 1 + buffer #76: + time = 1000001824000 + data = 1 + buffer #77: + time = 1000001848000 + data = 1 + buffer #78: + time = 1000001872000 + data = 1 + buffer #79: + time = 1000001896000 + data = 1 + buffer #80: + time = 1000001920000 + data = 1 + buffer #81: + time = 1000001944000 + data = 1 + buffer #82: + time = 1000001968000 + data = 1 + buffer #83: + time = 1000001992000 + data = 1 + buffer #84: + time = 1000002016000 + data = 1 + buffer #85: + time = 1000002040000 + data = 1 + buffer #86: + time = 1000002064000 + data = 1 + buffer #87: + time = 1000002088000 + data = 1 + buffer #88: + time = 1000002112000 + data = 1 + buffer #89: + time = 1000002136000 + data = 1 + buffer #90: + time = 1000002160000 + data = 1 + buffer #91: + time = 1000002184000 + data = 1 + buffer #92: + time = 1000002208000 + data = 1 + buffer #93: + time = 1000002232000 + data = 1 + buffer #94: + time = 1000002256000 + data = 1 + buffer #95: + time = 1000002280000 + data = 1 + buffer #96: + time = 1000002304000 + data = 1 + buffer #97: + time = 1000002328000 + data = 1 + buffer #98: + time = 1000002352000 + data = 1 + buffer #99: + time = 1000002376000 + data = 1 + buffer #100: + time = 1000002400000 + data = 1 + buffer #101: + time = 1000002424000 + data = 1 + buffer #102: + time = 1000002448000 + data = 1 + buffer #103: + time = 1000002472000 + data = 1 + buffer #104: + time = 1000002496000 + data = 1 + buffer #105: + time = 1000002520000 + data = 1 + buffer #106: + time = 1000002544000 + data = 1 + buffer #107: + time = 1000002568000 + data = 1 + buffer #108: + time = 1000002592000 + data = 1 + buffer #109: + time = 1000002616000 + data = 1 + buffer #110: + time = 1000002640000 + data = 1 + buffer #111: + time = 1000002664000 + data = 1 + buffer #112: + time = 1000002688000 + data = 1 + buffer #113: + time = 1000002712000 + data = 1 + buffer #114: + time = 1000002736000 + data = 1 + buffer #115: + time = 1000002760000 + data = 1 + buffer #116: + time = 1000002784000 + data = 1