From 99767c6e25139b550e4d37b4178a70d678932af3 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 12 Mar 2025 05:48:47 -0700 Subject: [PATCH] Use info from unseekable Xing frame when falling back to CBR seeking This change uses the duration and byte count of the Xing frame, if they're present, to estimate the bitrate of the stream. The seeking will still be inaccurate (because we're doing CBR seeking in a VBR stream), but it will be more accurate than basing the bitrate on the first MP3 frame we read. It will also mean the duration reported is accurate. This change also ensures that if the Xing frame contains the number of audio bytes but no ToC, the audio data length is still propagated into the `XingSeeker` (and therefore into the `ConstantBitrateSeeker` too). Issue: androidx/media#2194 PiperOrigin-RevId: 736100104 --- RELEASENOTES.md | 4 + .../extractor/mp3/ConstantBitrateSeeker.java | 5 + .../media3/extractor/mp3/IndexSeeker.java | 7 + .../media3/extractor/mp3/MlltSeeker.java | 5 + .../media3/extractor/mp3/Mp3Extractor.java | 44 ++++- .../androidx/media3/extractor/mp3/Seeker.java | 11 ++ .../media3/extractor/mp3/VbriSeeker.java | 20 +- .../media3/extractor/mp3/XingSeeker.java | 20 +- ...eader-no-toc.mp3.cbr-seeking-always.0.dump | 12 +- ...eader-no-toc.mp3.cbr-seeking-always.1.dump | 172 +++++++++--------- ...eader-no-toc.mp3.cbr-seeking-always.2.dump | 96 +++++----- ...eader-no-toc.mp3.cbr-seeking-always.3.dump | 20 +- ...mp3.cbr-seeking-always.unknown_length.dump | 9 +- ...-xing-header-no-toc.mp3.cbr-seeking.0.dump | 12 +- ...-xing-header-no-toc.mp3.cbr-seeking.1.dump | 172 +++++++++--------- ...-xing-header-no-toc.mp3.cbr-seeking.2.dump | 96 +++++----- ...-xing-header-no-toc.mp3.cbr-seeking.3.dump | 20 +- ...no-toc.mp3.cbr-seeking.unknown_length.dump | 10 +- 18 files changed, 403 insertions(+), 332 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1ba09076c9..1c924235a3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -7,6 +7,10 @@ * Transformer: * Track Selection: * Extractors: + * MP3: Use duration and data size from unseekable Xing, VBRI and similar + variable bitrate metadata when falling back to constant bitrate seeking + due to `FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)` + ([#2194](https://github.com/androidx/media/issues/2194)). * DataSource: * Audio: * Allow constant power upmixing/downmixing in DefaultAudioMixer. 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 6b4ceb5101..19df8cc87a 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 @@ -75,6 +75,11 @@ import androidx.media3.extractor.MpegAudioUtil; return getTimeUsAtPosition(position); } + @Override + public long getDataStartPosition() { + return firstFramePosition; + } + @Override public long getDataEndPosition() { return dataEndPosition; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/IndexSeeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/IndexSeeker.java index d2a58e8c84..d7834a05dd 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/IndexSeeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/IndexSeeker.java @@ -27,6 +27,7 @@ import java.math.RoundingMode; @VisibleForTesting /* package */ static final long MIN_TIME_BETWEEN_POINTS_US = C.MICROS_PER_SECOND / 10; + private final long dataStartPosition; private final long dataEndPosition; private final int averageBitrate; private final IndexSeekMap indexSeekMap; @@ -37,6 +38,7 @@ import java.math.RoundingMode; /* positions= */ new long[] {dataStartPosition}, /* timesUs= */ new long[] {0L}, durationUs); + this.dataStartPosition = dataStartPosition; this.dataEndPosition = dataEndPosition; if (durationUs != C.TIME_UNSET) { long bitrate = @@ -54,6 +56,11 @@ import java.math.RoundingMode; return indexSeekMap.getTimeUs(position); } + @Override + public long getDataStartPosition() { + return dataStartPosition; + } + @Override public long getDataEndPosition() { return dataEndPosition; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/MlltSeeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/MlltSeeker.java index 63e62343cc..298fe09392 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/MlltSeeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/MlltSeeker.java @@ -123,6 +123,11 @@ import androidx.media3.extractor.metadata.id3.MlltFrame; } } + @Override + public long getDataStartPosition() { + return 0; + } + @Override public long getDataEndPosition() { return C.INDEX_UNSET; 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 e7f0718ead..ba9ea8dd39 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 @@ -501,11 +501,43 @@ public final class Mp3Extractor implements Extractor { resultSeeker = seekFrameSeeker; } - if (resultSeeker == null - || (!resultSeeker.isSeekable() && (flags & FLAG_ENABLE_CONSTANT_BITRATE_SEEKING) != 0)) { + if (resultSeeker != null + && shouldFallbackToConstantBitrateSeeking(resultSeeker) + && resultSeeker.getDurationUs() != C.TIME_UNSET + && (resultSeeker.getDataEndPosition() != C.INDEX_UNSET + || input.getLength() != C.LENGTH_UNSET)) { + // resultSeeker does not allow seeking, but does provide a duration and constant bitrate + // seeking has been requested, so we can do 'enhanced' CBR seeking using this duration info. + long dataStart = + resultSeeker.getDataStartPosition() != C.INDEX_UNSET + ? resultSeeker.getDataStartPosition() + : 0; + long inputLength = + resultSeeker.getDataEndPosition() != C.INDEX_UNSET + ? resultSeeker.getDataEndPosition() + : input.getLength(); + long audioLength = inputLength - dataStart; + int bitrate = + Ints.saturatedCast( + Util.scaleLargeValue( + audioLength, + Byte.SIZE * C.MICROS_PER_SECOND, + resultSeeker.getDurationUs(), + RoundingMode.HALF_UP)); + // inputLength will never be LENGTH_UNSET because of the outer if-condition, so we can pass + // (vacuously) false here for allowSeeksIfLengthUnknown. + resultSeeker = + new ConstantBitrateSeeker( + inputLength, + dataStart, + bitrate, + C.LENGTH_UNSET, + /* allowSeeksIfLengthUnknown= */ false); + } else if (resultSeeker == null || shouldFallbackToConstantBitrateSeeking(resultSeeker)) { // Either we found no seek or VBR info, so we must assume the file is CBR (even without the - // flag(s) being set), or an 'enable CBR seeking flag' is set and we found some seek info, - // but not enough to seek with. In either case, we fall back to CBR seeking. + // flag(s) being set), or an 'enable CBR seeking flag' is set and we found some seek info, but + // not enough to do 'enhanced' CBR seeking with. In either case, we fall back to CBR seeking + // without any additional info from the file. resultSeeker = getConstantBitrateSeeker( input, (flags & FLAG_ENABLE_CONSTANT_BITRATE_SEEKING_ALWAYS) != 0); @@ -514,6 +546,10 @@ public final class Mp3Extractor implements Extractor { return resultSeeker; } + private boolean shouldFallbackToConstantBitrateSeeking(Seeker seeker) { + return !seeker.isSeekable() && (flags & FLAG_ENABLE_CONSTANT_BITRATE_SEEKING) != 0; + } + /** * Consumes the next frame from the {@code input} if it contains VBRI or Xing seeking metadata, * returning a {@link Seeker} if the metadata was present and valid, or {@code null} otherwise. diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Seeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Seeker.java index 19e2514be5..4f2d50e366 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Seeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/Seeker.java @@ -33,6 +33,12 @@ import androidx.media3.extractor.SeekMap; */ long getTimeUs(long position); + /** + * Returns the position (byte offset) in the stream that is immediately before audio data, or 0 if + * not known. + */ + long getDataStartPosition(); + /** * Returns the position (byte offset) in the stream that is immediately after audio data, or * {@link C#INDEX_UNSET} if not known. @@ -57,6 +63,11 @@ import androidx.media3.extractor.SeekMap; return 0; } + @Override + public long getDataStartPosition() { + return 0; + } + @Override public long getDataEndPosition() { // Position unset as we do not know the data end position. Note that returning 0 doesn't work. 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 232f160bad..32619dae5c 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 @@ -51,7 +51,8 @@ import androidx.media3.extractor.SeekPoint; ParsableByteArray frame) { frame.skipBytes(6); int bytes = frame.readInt(); - long endOfMp3Data = position + mpegAudioHeader.frameSize + bytes; + long startOfMp3Data = position + mpegAudioHeader.frameSize; + long endOfMp3Data = startOfMp3Data + bytes; int numFrames = frame.readInt(); if (numFrames <= 0) { return null; @@ -105,20 +106,28 @@ import androidx.media3.extractor.SeekPoint; endOfMp3Data = max(endOfMp3Data, position); } - return new VbriSeeker(timesUs, positions, durationUs, endOfMp3Data, mpegAudioHeader.bitrate); + return new VbriSeeker( + timesUs, positions, durationUs, startOfMp3Data, endOfMp3Data, mpegAudioHeader.bitrate); } private final long[] timesUs; private final long[] positions; private final long durationUs; + private final long dataStartPosition; private final long dataEndPosition; private final int bitrate; private VbriSeeker( - long[] timesUs, long[] positions, long durationUs, long dataEndPosition, int bitrate) { + long[] timesUs, + long[] positions, + long durationUs, + long dataStartPosition, + long dataEndPosition, + int bitrate) { this.timesUs = timesUs; this.positions = positions; this.durationUs = durationUs; + this.dataStartPosition = dataStartPosition; this.dataEndPosition = dataEndPosition; this.bitrate = bitrate; } @@ -150,6 +159,11 @@ import androidx.media3.extractor.SeekPoint; return durationUs; } + @Override + public long getDataStartPosition() { + return dataStartPosition; + } + @Override public long getDataEndPosition() { return dataEndPosition; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingSeeker.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingSeeker.java index f979931b87..2bcdd378c1 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingSeeker.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingSeeker.java @@ -42,11 +42,6 @@ import androidx.media3.extractor.SeekPoint; if (durationUs == C.TIME_UNSET) { return null; } - if (xingFrame.dataSize == C.LENGTH_UNSET || xingFrame.tableOfContents == null) { - // If the size in bytes or table of contents is missing, the stream is not seekable. - return new XingSeeker( - position, xingFrame.header.frameSize, durationUs, xingFrame.header.bitrate); - } return new XingSeeker( position, xingFrame.header.frameSize, @@ -72,16 +67,6 @@ import androidx.media3.extractor.SeekPoint; */ @Nullable private final long[] tableOfContents; - private XingSeeker(long dataStartPosition, int xingFrameSize, long durationUs, int bitrate) { - this( - dataStartPosition, - xingFrameSize, - durationUs, - bitrate, - /* dataSize= */ C.LENGTH_UNSET, - /* tableOfContents= */ null); - } - private XingSeeker( long dataStartPosition, int xingFrameSize, @@ -157,6 +142,11 @@ import androidx.media3.extractor.SeekPoint; return durationUs; } + @Override + public long getDataStartPosition() { + return dataStartPosition + xingFrameSize; + } + @Override public long getDataEndPosition() { return dataEndPosition; diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.0.dump index 96ba8e1f41..deb9adcbd9 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.0.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 38160 sample count = 117 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.1.dump index 9dc03367b3..8cebd97c77 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.1.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 25344 sample count = 80 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -21,323 +21,323 @@ track 0: encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] sample 0: - time = 3204000 + time = 943055 flags = 1 data = length 336, hash E917C122 sample 1: - time = 3228000 + time = 967055 flags = 1 data = length 336, hash 10ED1470 sample 2: - time = 3252000 + time = 991055 flags = 1 data = length 288, hash 706B8A7C sample 3: - time = 3276000 + time = 1015055 flags = 1 data = length 336, hash 71FFE4A0 sample 4: - time = 3300000 + time = 1039055 flags = 1 data = length 336, hash D4160463 sample 5: - time = 3324000 + time = 1063055 flags = 1 data = length 336, hash EC557B14 sample 6: - time = 3348000 + time = 1087055 flags = 1 data = length 288, hash 5598CF8B sample 7: - time = 3372000 + time = 1111055 flags = 1 data = length 336, hash 7E0AB41 sample 8: - time = 3396000 + time = 1135055 flags = 1 data = length 336, hash 1C585FEF sample 9: - time = 3420000 + time = 1159055 flags = 1 data = length 336, hash A4A4855E sample 10: - time = 3444000 + time = 1183055 flags = 1 data = length 336, hash CECA51D3 sample 11: - time = 3468000 + time = 1207055 flags = 1 data = length 288, hash 2D362DC5 sample 12: - time = 3492000 + time = 1231055 flags = 1 data = length 336, hash 9EB2609D sample 13: - time = 3516000 + time = 1255055 flags = 1 data = length 336, hash 28FFB3FE sample 14: - time = 3540000 + time = 1279055 flags = 1 data = length 288, hash 2AA2D216 sample 15: - time = 3564000 + time = 1303055 flags = 1 data = length 336, hash CDBC7032 sample 16: - time = 3588000 + time = 1327055 flags = 1 data = length 336, hash 25B13FE7 sample 17: - time = 3612000 + time = 1351055 flags = 1 data = length 336, hash DB6BB1E sample 18: - time = 3636000 + time = 1375055 flags = 1 data = length 336, hash EBE951F4 sample 19: - time = 3660000 + time = 1399055 flags = 1 data = length 288, hash 9E2EBFF7 sample 20: - time = 3684000 + time = 1423055 flags = 1 data = length 336, hash 36A7D455 sample 21: - time = 3708000 + time = 1447055 flags = 1 data = length 336, hash 84545F8C sample 22: - time = 3732000 + time = 1471055 flags = 1 data = length 336, hash F66F3045 sample 23: - time = 3756000 + time = 1495055 flags = 1 data = length 576, hash 5AB089EA sample 24: - time = 3780000 + time = 1519055 flags = 1 data = length 336, hash 8868086 sample 25: - time = 3804000 + time = 1543055 flags = 1 data = length 336, hash D5EB6D63 sample 26: - time = 3828000 + time = 1567055 flags = 1 data = length 288, hash 7A5374B7 sample 27: - time = 3852000 + time = 1591055 flags = 1 data = length 336, hash BEB27A75 sample 28: - time = 3876000 + time = 1615055 flags = 1 data = length 336, hash E251E0FD sample 29: - time = 3900000 + time = 1639055 flags = 1 data = length 288, hash D54C970 sample 30: - time = 3924000 + time = 1663055 flags = 1 data = length 336, hash 52C473B9 sample 31: - time = 3948000 + time = 1687055 flags = 1 data = length 336, hash F5F13334 sample 32: - time = 3972000 + time = 1711055 flags = 1 data = length 480, hash A5F1E987 sample 33: - time = 3996000 + time = 1735055 flags = 1 data = length 288, hash 453A1267 sample 34: - time = 4020000 + time = 1759055 flags = 1 data = length 288, hash 7C6C2EA9 sample 35: - time = 4044000 + time = 1783055 flags = 1 data = length 336, hash F4BFECA4 sample 36: - time = 4068000 + time = 1807055 flags = 1 data = length 336, hash 751A395A sample 37: - time = 4092000 + time = 1831055 flags = 1 data = length 336, hash EE38DB02 sample 38: - time = 4116000 + time = 1855055 flags = 1 data = length 336, hash F18837E2 sample 39: - time = 4140000 + time = 1879055 flags = 1 data = length 336, hash ED36B78E sample 40: - time = 4164000 + time = 1903055 flags = 1 data = length 336, hash B3D28289 sample 41: - time = 4188000 + time = 1927055 flags = 1 data = length 288, hash 8BDE28E1 sample 42: - time = 4212000 + time = 1951055 flags = 1 data = length 336, hash CFD5E966 sample 43: - time = 4236000 + time = 1975055 flags = 1 data = length 288, hash DC08E267 sample 44: - time = 4260000 + time = 1999055 flags = 1 data = length 336, hash 6530CB78 sample 45: - time = 4284000 + time = 2023055 flags = 1 data = length 336, hash 6CC6636E sample 46: - time = 4308000 + time = 2047055 flags = 1 data = length 336, hash 613047C1 sample 47: - time = 4332000 + time = 2071055 flags = 1 data = length 288, hash CDC747BF sample 48: - time = 4356000 + time = 2095055 flags = 1 data = length 336, hash AF22AA74 sample 49: - time = 4380000 + time = 2119055 flags = 1 data = length 384, hash 82F326AA sample 50: - time = 4404000 + time = 2143055 flags = 1 data = length 384, hash EDA26C4D sample 51: - time = 4428000 + time = 2167055 flags = 1 data = length 336, hash 94C643DC sample 52: - time = 4452000 + time = 2191055 flags = 1 data = length 288, hash CB5D9C40 sample 53: - time = 4476000 + time = 2215055 flags = 1 data = length 336, hash 1E69DE3F sample 54: - time = 4500000 + time = 2239055 flags = 1 data = length 336, hash 7E472219 sample 55: - time = 4524000 + time = 2263055 flags = 1 data = length 336, hash DA47B9FA sample 56: - time = 4548000 + time = 2287055 flags = 1 data = length 336, hash DD0ABB7C sample 57: - time = 4572000 + time = 2311055 flags = 1 data = length 288, hash DBF93FAC sample 58: - time = 4596000 + time = 2335055 flags = 1 data = length 336, hash 243F4B2 sample 59: - time = 4620000 + time = 2359055 flags = 1 data = length 336, hash 2E881490 sample 60: - time = 4644000 + time = 2383055 flags = 1 data = length 288, hash 1C28C8BE sample 61: - time = 4668000 + time = 2407055 flags = 1 data = length 336, hash C73E5D30 sample 62: - time = 4692000 + time = 2431055 flags = 1 data = length 288, hash 98B5BFF6 sample 63: - time = 4716000 + time = 2455055 flags = 1 data = length 336, hash E0135533 sample 64: - time = 4740000 + time = 2479055 flags = 1 data = length 336, hash D13C9DBC sample 65: - time = 4764000 + time = 2503055 flags = 1 data = length 336, hash 63D524CA sample 66: - time = 4788000 + time = 2527055 flags = 1 data = length 288, hash A28514C3 sample 67: - time = 4812000 + time = 2551055 flags = 1 data = length 336, hash 72B647FF sample 68: - time = 4836000 + time = 2575055 flags = 1 data = length 336, hash 8F740AB1 sample 69: - time = 4860000 + time = 2599055 flags = 1 data = length 336, hash 5E3C7E93 sample 70: - time = 4884000 + time = 2623055 flags = 1 data = length 336, hash 121B913B sample 71: - time = 4908000 + time = 2647055 flags = 1 data = length 336, hash 578FCCF2 sample 72: - time = 4932000 + time = 2671055 flags = 1 data = length 336, hash 5B5823DE sample 73: - time = 4956000 + time = 2695055 flags = 1 data = length 384, hash D8B83F78 sample 74: - time = 4980000 + time = 2719055 flags = 1 data = length 240, hash E649682F sample 75: - time = 5004000 + time = 2743055 flags = 1 data = length 96, hash C559A6F4 sample 76: - time = 5028000 + time = 2767055 flags = 1 data = length 96, hash 792796BC sample 77: - time = 5052000 + time = 2791055 flags = 1 data = length 120, hash 8172CD0E sample 78: - time = 5076000 + time = 2815055 flags = 1 data = length 120, hash F562B52F sample 79: - time = 5100000 + time = 2839055 flags = 1 data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.2.dump index 8a43f0f186..ee5e5a6f7d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.2.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 12624 sample count = 42 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -21,171 +21,171 @@ track 0: encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] sample 0: - time = 6384000 + time = 1879045 flags = 1 data = length 336, hash F18837E2 sample 1: - time = 6408000 + time = 1903045 flags = 1 data = length 336, hash ED36B78E sample 2: - time = 6432000 + time = 1927045 flags = 1 data = length 336, hash B3D28289 sample 3: - time = 6456000 + time = 1951045 flags = 1 data = length 288, hash 8BDE28E1 sample 4: - time = 6480000 + time = 1975045 flags = 1 data = length 336, hash CFD5E966 sample 5: - time = 6504000 + time = 1999045 flags = 1 data = length 288, hash DC08E267 sample 6: - time = 6528000 + time = 2023045 flags = 1 data = length 336, hash 6530CB78 sample 7: - time = 6552000 + time = 2047045 flags = 1 data = length 336, hash 6CC6636E sample 8: - time = 6576000 + time = 2071045 flags = 1 data = length 336, hash 613047C1 sample 9: - time = 6600000 + time = 2095045 flags = 1 data = length 288, hash CDC747BF sample 10: - time = 6624000 + time = 2119045 flags = 1 data = length 336, hash AF22AA74 sample 11: - time = 6648000 + time = 2143045 flags = 1 data = length 384, hash 82F326AA sample 12: - time = 6672000 + time = 2167045 flags = 1 data = length 384, hash EDA26C4D sample 13: - time = 6696000 + time = 2191045 flags = 1 data = length 336, hash 94C643DC sample 14: - time = 6720000 + time = 2215045 flags = 1 data = length 288, hash CB5D9C40 sample 15: - time = 6744000 + time = 2239045 flags = 1 data = length 336, hash 1E69DE3F sample 16: - time = 6768000 + time = 2263045 flags = 1 data = length 336, hash 7E472219 sample 17: - time = 6792000 + time = 2287045 flags = 1 data = length 336, hash DA47B9FA sample 18: - time = 6816000 + time = 2311045 flags = 1 data = length 336, hash DD0ABB7C sample 19: - time = 6840000 + time = 2335045 flags = 1 data = length 288, hash DBF93FAC sample 20: - time = 6864000 + time = 2359045 flags = 1 data = length 336, hash 243F4B2 sample 21: - time = 6888000 + time = 2383045 flags = 1 data = length 336, hash 2E881490 sample 22: - time = 6912000 + time = 2407045 flags = 1 data = length 288, hash 1C28C8BE sample 23: - time = 6936000 + time = 2431045 flags = 1 data = length 336, hash C73E5D30 sample 24: - time = 6960000 + time = 2455045 flags = 1 data = length 288, hash 98B5BFF6 sample 25: - time = 6984000 + time = 2479045 flags = 1 data = length 336, hash E0135533 sample 26: - time = 7008000 + time = 2503045 flags = 1 data = length 336, hash D13C9DBC sample 27: - time = 7032000 + time = 2527045 flags = 1 data = length 336, hash 63D524CA sample 28: - time = 7056000 + time = 2551045 flags = 1 data = length 288, hash A28514C3 sample 29: - time = 7080000 + time = 2575045 flags = 1 data = length 336, hash 72B647FF sample 30: - time = 7104000 + time = 2599045 flags = 1 data = length 336, hash 8F740AB1 sample 31: - time = 7128000 + time = 2623045 flags = 1 data = length 336, hash 5E3C7E93 sample 32: - time = 7152000 + time = 2647045 flags = 1 data = length 336, hash 121B913B sample 33: - time = 7176000 + time = 2671045 flags = 1 data = length 336, hash 578FCCF2 sample 34: - time = 7200000 + time = 2695045 flags = 1 data = length 336, hash 5B5823DE sample 35: - time = 7224000 + time = 2719045 flags = 1 data = length 384, hash D8B83F78 sample 36: - time = 7248000 + time = 2743045 flags = 1 data = length 240, hash E649682F sample 37: - time = 7272000 + time = 2767045 flags = 1 data = length 96, hash C559A6F4 sample 38: - time = 7296000 + time = 2791045 flags = 1 data = length 96, hash 792796BC sample 39: - time = 7320000 + time = 2815045 flags = 1 data = length 120, hash 8172CD0E sample 40: - time = 7344000 + time = 2839045 flags = 1 data = length 120, hash F562B52F sample 41: - time = 7368000 + time = 2863045 flags = 1 data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.3.dump index 8d0441818e..daec3f6833 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.3.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: - total output bytes = 96 - sample count = 1 - track duration = 9540000 + total output bytes = 0 + sample count = 0 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -20,8 +20,4 @@ track 0: encoderDelay = 576 encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] - sample 0: - time = 9516000 - flags = 1 - data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.unknown_length.dump index 22bbb4f038..deb9adcbd9 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking-always.unknown_length.dump @@ -1,14 +1,17 @@ seekMap: isSeekable = true - duration = UNSET TIME + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 38160 sample count = 117 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.0.dump index 96ba8e1f41..deb9adcbd9 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.0.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 38160 sample count = 117 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.1.dump index 9dc03367b3..8cebd97c77 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.1.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 25344 sample count = 80 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -21,323 +21,323 @@ track 0: encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] sample 0: - time = 3204000 + time = 943055 flags = 1 data = length 336, hash E917C122 sample 1: - time = 3228000 + time = 967055 flags = 1 data = length 336, hash 10ED1470 sample 2: - time = 3252000 + time = 991055 flags = 1 data = length 288, hash 706B8A7C sample 3: - time = 3276000 + time = 1015055 flags = 1 data = length 336, hash 71FFE4A0 sample 4: - time = 3300000 + time = 1039055 flags = 1 data = length 336, hash D4160463 sample 5: - time = 3324000 + time = 1063055 flags = 1 data = length 336, hash EC557B14 sample 6: - time = 3348000 + time = 1087055 flags = 1 data = length 288, hash 5598CF8B sample 7: - time = 3372000 + time = 1111055 flags = 1 data = length 336, hash 7E0AB41 sample 8: - time = 3396000 + time = 1135055 flags = 1 data = length 336, hash 1C585FEF sample 9: - time = 3420000 + time = 1159055 flags = 1 data = length 336, hash A4A4855E sample 10: - time = 3444000 + time = 1183055 flags = 1 data = length 336, hash CECA51D3 sample 11: - time = 3468000 + time = 1207055 flags = 1 data = length 288, hash 2D362DC5 sample 12: - time = 3492000 + time = 1231055 flags = 1 data = length 336, hash 9EB2609D sample 13: - time = 3516000 + time = 1255055 flags = 1 data = length 336, hash 28FFB3FE sample 14: - time = 3540000 + time = 1279055 flags = 1 data = length 288, hash 2AA2D216 sample 15: - time = 3564000 + time = 1303055 flags = 1 data = length 336, hash CDBC7032 sample 16: - time = 3588000 + time = 1327055 flags = 1 data = length 336, hash 25B13FE7 sample 17: - time = 3612000 + time = 1351055 flags = 1 data = length 336, hash DB6BB1E sample 18: - time = 3636000 + time = 1375055 flags = 1 data = length 336, hash EBE951F4 sample 19: - time = 3660000 + time = 1399055 flags = 1 data = length 288, hash 9E2EBFF7 sample 20: - time = 3684000 + time = 1423055 flags = 1 data = length 336, hash 36A7D455 sample 21: - time = 3708000 + time = 1447055 flags = 1 data = length 336, hash 84545F8C sample 22: - time = 3732000 + time = 1471055 flags = 1 data = length 336, hash F66F3045 sample 23: - time = 3756000 + time = 1495055 flags = 1 data = length 576, hash 5AB089EA sample 24: - time = 3780000 + time = 1519055 flags = 1 data = length 336, hash 8868086 sample 25: - time = 3804000 + time = 1543055 flags = 1 data = length 336, hash D5EB6D63 sample 26: - time = 3828000 + time = 1567055 flags = 1 data = length 288, hash 7A5374B7 sample 27: - time = 3852000 + time = 1591055 flags = 1 data = length 336, hash BEB27A75 sample 28: - time = 3876000 + time = 1615055 flags = 1 data = length 336, hash E251E0FD sample 29: - time = 3900000 + time = 1639055 flags = 1 data = length 288, hash D54C970 sample 30: - time = 3924000 + time = 1663055 flags = 1 data = length 336, hash 52C473B9 sample 31: - time = 3948000 + time = 1687055 flags = 1 data = length 336, hash F5F13334 sample 32: - time = 3972000 + time = 1711055 flags = 1 data = length 480, hash A5F1E987 sample 33: - time = 3996000 + time = 1735055 flags = 1 data = length 288, hash 453A1267 sample 34: - time = 4020000 + time = 1759055 flags = 1 data = length 288, hash 7C6C2EA9 sample 35: - time = 4044000 + time = 1783055 flags = 1 data = length 336, hash F4BFECA4 sample 36: - time = 4068000 + time = 1807055 flags = 1 data = length 336, hash 751A395A sample 37: - time = 4092000 + time = 1831055 flags = 1 data = length 336, hash EE38DB02 sample 38: - time = 4116000 + time = 1855055 flags = 1 data = length 336, hash F18837E2 sample 39: - time = 4140000 + time = 1879055 flags = 1 data = length 336, hash ED36B78E sample 40: - time = 4164000 + time = 1903055 flags = 1 data = length 336, hash B3D28289 sample 41: - time = 4188000 + time = 1927055 flags = 1 data = length 288, hash 8BDE28E1 sample 42: - time = 4212000 + time = 1951055 flags = 1 data = length 336, hash CFD5E966 sample 43: - time = 4236000 + time = 1975055 flags = 1 data = length 288, hash DC08E267 sample 44: - time = 4260000 + time = 1999055 flags = 1 data = length 336, hash 6530CB78 sample 45: - time = 4284000 + time = 2023055 flags = 1 data = length 336, hash 6CC6636E sample 46: - time = 4308000 + time = 2047055 flags = 1 data = length 336, hash 613047C1 sample 47: - time = 4332000 + time = 2071055 flags = 1 data = length 288, hash CDC747BF sample 48: - time = 4356000 + time = 2095055 flags = 1 data = length 336, hash AF22AA74 sample 49: - time = 4380000 + time = 2119055 flags = 1 data = length 384, hash 82F326AA sample 50: - time = 4404000 + time = 2143055 flags = 1 data = length 384, hash EDA26C4D sample 51: - time = 4428000 + time = 2167055 flags = 1 data = length 336, hash 94C643DC sample 52: - time = 4452000 + time = 2191055 flags = 1 data = length 288, hash CB5D9C40 sample 53: - time = 4476000 + time = 2215055 flags = 1 data = length 336, hash 1E69DE3F sample 54: - time = 4500000 + time = 2239055 flags = 1 data = length 336, hash 7E472219 sample 55: - time = 4524000 + time = 2263055 flags = 1 data = length 336, hash DA47B9FA sample 56: - time = 4548000 + time = 2287055 flags = 1 data = length 336, hash DD0ABB7C sample 57: - time = 4572000 + time = 2311055 flags = 1 data = length 288, hash DBF93FAC sample 58: - time = 4596000 + time = 2335055 flags = 1 data = length 336, hash 243F4B2 sample 59: - time = 4620000 + time = 2359055 flags = 1 data = length 336, hash 2E881490 sample 60: - time = 4644000 + time = 2383055 flags = 1 data = length 288, hash 1C28C8BE sample 61: - time = 4668000 + time = 2407055 flags = 1 data = length 336, hash C73E5D30 sample 62: - time = 4692000 + time = 2431055 flags = 1 data = length 288, hash 98B5BFF6 sample 63: - time = 4716000 + time = 2455055 flags = 1 data = length 336, hash E0135533 sample 64: - time = 4740000 + time = 2479055 flags = 1 data = length 336, hash D13C9DBC sample 65: - time = 4764000 + time = 2503055 flags = 1 data = length 336, hash 63D524CA sample 66: - time = 4788000 + time = 2527055 flags = 1 data = length 288, hash A28514C3 sample 67: - time = 4812000 + time = 2551055 flags = 1 data = length 336, hash 72B647FF sample 68: - time = 4836000 + time = 2575055 flags = 1 data = length 336, hash 8F740AB1 sample 69: - time = 4860000 + time = 2599055 flags = 1 data = length 336, hash 5E3C7E93 sample 70: - time = 4884000 + time = 2623055 flags = 1 data = length 336, hash 121B913B sample 71: - time = 4908000 + time = 2647055 flags = 1 data = length 336, hash 578FCCF2 sample 72: - time = 4932000 + time = 2671055 flags = 1 data = length 336, hash 5B5823DE sample 73: - time = 4956000 + time = 2695055 flags = 1 data = length 384, hash D8B83F78 sample 74: - time = 4980000 + time = 2719055 flags = 1 data = length 240, hash E649682F sample 75: - time = 5004000 + time = 2743055 flags = 1 data = length 96, hash C559A6F4 sample 76: - time = 5028000 + time = 2767055 flags = 1 data = length 96, hash 792796BC sample 77: - time = 5052000 + time = 2791055 flags = 1 data = length 120, hash 8172CD0E sample 78: - time = 5076000 + time = 2815055 flags = 1 data = length 120, hash F562B52F sample 79: - time = 5100000 + time = 2839055 flags = 1 data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.2.dump index 8a43f0f186..ee5e5a6f7d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.2.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 12624 sample count = 42 - track duration = 9540000 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -21,171 +21,171 @@ track 0: encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] sample 0: - time = 6384000 + time = 1879045 flags = 1 data = length 336, hash F18837E2 sample 1: - time = 6408000 + time = 1903045 flags = 1 data = length 336, hash ED36B78E sample 2: - time = 6432000 + time = 1927045 flags = 1 data = length 336, hash B3D28289 sample 3: - time = 6456000 + time = 1951045 flags = 1 data = length 288, hash 8BDE28E1 sample 4: - time = 6480000 + time = 1975045 flags = 1 data = length 336, hash CFD5E966 sample 5: - time = 6504000 + time = 1999045 flags = 1 data = length 288, hash DC08E267 sample 6: - time = 6528000 + time = 2023045 flags = 1 data = length 336, hash 6530CB78 sample 7: - time = 6552000 + time = 2047045 flags = 1 data = length 336, hash 6CC6636E sample 8: - time = 6576000 + time = 2071045 flags = 1 data = length 336, hash 613047C1 sample 9: - time = 6600000 + time = 2095045 flags = 1 data = length 288, hash CDC747BF sample 10: - time = 6624000 + time = 2119045 flags = 1 data = length 336, hash AF22AA74 sample 11: - time = 6648000 + time = 2143045 flags = 1 data = length 384, hash 82F326AA sample 12: - time = 6672000 + time = 2167045 flags = 1 data = length 384, hash EDA26C4D sample 13: - time = 6696000 + time = 2191045 flags = 1 data = length 336, hash 94C643DC sample 14: - time = 6720000 + time = 2215045 flags = 1 data = length 288, hash CB5D9C40 sample 15: - time = 6744000 + time = 2239045 flags = 1 data = length 336, hash 1E69DE3F sample 16: - time = 6768000 + time = 2263045 flags = 1 data = length 336, hash 7E472219 sample 17: - time = 6792000 + time = 2287045 flags = 1 data = length 336, hash DA47B9FA sample 18: - time = 6816000 + time = 2311045 flags = 1 data = length 336, hash DD0ABB7C sample 19: - time = 6840000 + time = 2335045 flags = 1 data = length 288, hash DBF93FAC sample 20: - time = 6864000 + time = 2359045 flags = 1 data = length 336, hash 243F4B2 sample 21: - time = 6888000 + time = 2383045 flags = 1 data = length 336, hash 2E881490 sample 22: - time = 6912000 + time = 2407045 flags = 1 data = length 288, hash 1C28C8BE sample 23: - time = 6936000 + time = 2431045 flags = 1 data = length 336, hash C73E5D30 sample 24: - time = 6960000 + time = 2455045 flags = 1 data = length 288, hash 98B5BFF6 sample 25: - time = 6984000 + time = 2479045 flags = 1 data = length 336, hash E0135533 sample 26: - time = 7008000 + time = 2503045 flags = 1 data = length 336, hash D13C9DBC sample 27: - time = 7032000 + time = 2527045 flags = 1 data = length 336, hash 63D524CA sample 28: - time = 7056000 + time = 2551045 flags = 1 data = length 288, hash A28514C3 sample 29: - time = 7080000 + time = 2575045 flags = 1 data = length 336, hash 72B647FF sample 30: - time = 7104000 + time = 2599045 flags = 1 data = length 336, hash 8F740AB1 sample 31: - time = 7128000 + time = 2623045 flags = 1 data = length 336, hash 5E3C7E93 sample 32: - time = 7152000 + time = 2647045 flags = 1 data = length 336, hash 121B913B sample 33: - time = 7176000 + time = 2671045 flags = 1 data = length 336, hash 578FCCF2 sample 34: - time = 7200000 + time = 2695045 flags = 1 data = length 336, hash 5B5823DE sample 35: - time = 7224000 + time = 2719045 flags = 1 data = length 384, hash D8B83F78 sample 36: - time = 7248000 + time = 2743045 flags = 1 data = length 240, hash E649682F sample 37: - time = 7272000 + time = 2767045 flags = 1 data = length 96, hash C559A6F4 sample 38: - time = 7296000 + time = 2791045 flags = 1 data = length 96, hash 792796BC sample 39: - time = 7320000 + time = 2815045 flags = 1 data = length 120, hash 8172CD0E sample 40: - time = 7344000 + time = 2839045 flags = 1 data = length 120, hash F562B52F sample 41: - time = 7368000 + time = 2863045 flags = 1 data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.3.dump index 8d0441818e..daec3f6833 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.3.dump @@ -1,17 +1,17 @@ seekMap: isSeekable = true - duration = 9540000 + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] - getPosition(1) = [[timeUs=0, position=237], [timeUs=24000, position=333]] - getPosition(4770000) = [[timeUs=4752000, position=19245], [timeUs=4776000, position=19341]] - getPosition(9540000) = [[timeUs=9516000, position=38301]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: - total output bytes = 96 - sample count = 1 - track duration = 9540000 + total output bytes = 0 + sample count = 0 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096 @@ -20,8 +20,4 @@ track 0: encoderDelay = 576 encoderPadding = 576 metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] - sample 0: - time = 9516000 - flags = 1 - data = length 96, hash FF8D5B98 tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.unknown_length.dump index 9e73c15444..deb9adcbd9 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.cbr-seeking.unknown_length.dump @@ -1,13 +1,17 @@ seekMap: - isSeekable = false - duration = UNSET TIME + isSeekable = true + duration = 2807972 getPosition(0) = [[timeUs=0, position=237]] + getPosition(1) = [[timeUs=0, position=237], [timeUs=73, position=238]] + getPosition(1403986) = [[timeUs=1403912, position=19316], [timeUs=1403986, position=19317]] + getPosition(2807972) = [[timeUs=2807899, position=38396]] numberOfTracks = 1 track 0: total output bytes = 38160 sample count = 117 + track duration = 2807972 format 0: - averageBitrate = 32000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096