From 8e134411a0a83c539192eb3057f01ecbd2247e7e Mon Sep 17 00:00:00 2001 From: tolriq Date: Fri, 22 May 2026 09:20:55 +0200 Subject: [PATCH] Fix MP3 metadata average bitrates --- .../media3/extractor/mp3/VbriSeeker.java | 28 +++++-- .../media3/extractor/mp3/XingFrame.java | 25 ++++++ .../media3/extractor/mp3/XingSeeker.java | 10 +-- .../media3/extractor/mp3/VbriSeekerTest.java | 81 +++++++++++++++++++ .../media3/extractor/mp3/XingSeekerTest.java | 15 ++++ ...r-vbr-vbri-header-truncated-toc.mp3.0.dump | 2 +- ...r-vbr-vbri-header-truncated-toc.mp3.1.dump | 2 +- ...r-vbr-vbri-header-truncated-toc.mp3.2.dump | 2 +- ...r-vbr-vbri-header-truncated-toc.mp3.3.dump | 2 +- ...ader-truncated-toc.mp3.unknown_length.dump | 2 +- .../mp3/bear-vbr-vbri-header.mp3.0.dump | 2 +- .../mp3/bear-vbr-vbri-header.mp3.1.dump | 2 +- .../mp3/bear-vbr-vbri-header.mp3.2.dump | 2 +- .../mp3/bear-vbr-vbri-header.mp3.3.dump | 2 +- ...ar-vbr-vbri-header.mp3.unknown_length.dump | 2 +- .../bear-vbr-xing-header-no-toc.mp3.0.dump | 2 +- ...xing-header-no-toc.mp3.unknown_length.dump | 2 +- .../mp3/bear-vbr-xing-header.mp3.0.dump | 2 +- .../mp3/bear-vbr-xing-header.mp3.1.dump | 2 +- .../mp3/bear-vbr-xing-header.mp3.2.dump | 2 +- .../mp3/bear-vbr-xing-header.mp3.3.dump | 2 +- ...ar-vbr-xing-header.mp3.unknown_length.dump | 2 +- 22 files changed, 166 insertions(+), 27 deletions(-) create mode 100644 libraries/extractor/src/test/java/androidx/media3/extractor/mp3/VbriSeekerTest.java 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 32619dae5c4..671bb0d8497 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 @@ -24,6 +24,7 @@ import androidx.media3.common.util.Util; import androidx.media3.extractor.MpegAudioUtil; import androidx.media3.extractor.SeekPoint; +import java.math.RoundingMode; /** MP3 seeker that uses metadata from a VBRI header. */ /* package */ final class VbriSeeker implements Seeker { @@ -107,7 +108,12 @@ public static VbriSeeker create( } return new VbriSeeker( - timesUs, positions, durationUs, startOfMp3Data, endOfMp3Data, mpegAudioHeader.bitrate); + timesUs, + positions, + durationUs, + startOfMp3Data, + endOfMp3Data, + computeAverageBitrate(endOfMp3Data - startOfMp3Data, durationUs)); } private final long[] timesUs; @@ -115,7 +121,7 @@ public static VbriSeeker create( private final long durationUs; private final long dataStartPosition; private final long dataEndPosition; - private final int bitrate; + private final int averageBitrate; private VbriSeeker( long[] timesUs, @@ -123,13 +129,13 @@ private VbriSeeker( long durationUs, long dataStartPosition, long dataEndPosition, - int bitrate) { + int averageBitrate) { this.timesUs = timesUs; this.positions = positions; this.durationUs = durationUs; this.dataStartPosition = dataStartPosition; this.dataEndPosition = dataEndPosition; - this.bitrate = bitrate; + this.averageBitrate = averageBitrate; } @Override @@ -171,6 +177,18 @@ public long getDataEndPosition() { @Override public int getAverageBitrate() { - return bitrate; + return averageBitrate; + } + + private static int computeAverageBitrate(long dataSize, long durationUs) { + if (dataSize <= 0 || durationUs <= 0) { + return C.RATE_UNSET_INT; + } + long averageBitrate = + Util.scaleLargeValue( + dataSize, C.BITS_PER_BYTE * C.MICROS_PER_SECOND, durationUs, RoundingMode.HALF_UP); + return averageBitrate > 0 && averageBitrate <= Integer.MAX_VALUE + ? (int) averageBitrate + : C.RATE_UNSET_INT; } } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingFrame.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingFrame.java index b62e0f074e2..9326fdcb210 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingFrame.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp3/XingFrame.java @@ -21,6 +21,7 @@ import androidx.media3.common.util.ParsableByteArray; import androidx.media3.common.util.Util; import androidx.media3.extractor.MpegAudioUtil; +import java.math.RoundingMode; /** Representation of a LAME Xing or Info frame. */ /* package */ final class XingFrame { @@ -155,6 +156,30 @@ public long computeDurationUs() { (frameCount * header.samplesPerFrame) - 1, header.sampleRate); } + /** + * Computes the average bitrate, in bits per second, represented by this frame and {@code + * dataSize}. Returns {@link C#RATE_UNSET_INT} if it can't be computed. + * + * @param dataSize The encoded stream size, including the Xing or Info frame. + */ + public int computeAverageBitrate(long dataSize) { + if (frameCount == C.LENGTH_UNSET + || frameCount == 0 + || dataSize == C.LENGTH_UNSET + || dataSize <= header.frameSize) { + return C.RATE_UNSET_INT; + } + long averageBitrate = + Util.scaleLargeValue( + dataSize - header.frameSize, + C.BITS_PER_BYTE * C.MICROS_PER_SECOND, + computeDurationUs(), + RoundingMode.HALF_UP); + return averageBitrate > 0 && averageBitrate <= Integer.MAX_VALUE + ? (int) averageBitrate + : C.RATE_UNSET_INT; + } + /** Provide the metadata derived from this Xing frame, such as ReplayGain data. */ @Nullable public Metadata getMetadata() { 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 3fe97490def..94afdca2a08 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 @@ -65,7 +65,7 @@ public static XingSeeker create(XingFrame xingFrame, long position, long streamL position, xingFrame.header.frameSize, durationUs, - xingFrame.header.bitrate, + xingFrame.computeAverageBitrate(dataSize), dataSize, xingFrame.tableOfContents); } @@ -73,7 +73,7 @@ public static XingSeeker create(XingFrame xingFrame, long position, long streamL private final long dataStartPosition; private final int xingFrameSize; private final long durationUs; - private final int bitrate; + private final int averageBitrate; /** Data size, including the XING frame. */ private final long dataSize; @@ -90,13 +90,13 @@ private XingSeeker( long dataStartPosition, int xingFrameSize, long durationUs, - int bitrate, + int averageBitrate, long dataSize, @Nullable long[] tableOfContents) { this.dataStartPosition = dataStartPosition; this.xingFrameSize = xingFrameSize; this.durationUs = durationUs; - this.bitrate = bitrate; + this.averageBitrate = averageBitrate; this.dataSize = dataSize; this.tableOfContents = tableOfContents; dataEndPosition = dataSize == C.LENGTH_UNSET ? C.INDEX_UNSET : dataStartPosition + dataSize; @@ -173,7 +173,7 @@ public long getDataEndPosition() { @Override public int getAverageBitrate() { - return bitrate; + return averageBitrate; } /** diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/VbriSeekerTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/VbriSeekerTest.java new file mode 100644 index 00000000000..b1bdb9fccf4 --- /dev/null +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/VbriSeekerTest.java @@ -0,0 +1,81 @@ +/* + * Copyright 2026 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.media3.extractor.mp3; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.truth.Truth.assertThat; + +import androidx.media3.common.C; +import androidx.media3.common.util.ParsableByteArray; +import androidx.media3.common.util.Util; +import androidx.media3.extractor.MpegAudioUtil; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** Tests for {@link VbriSeeker}. */ +@RunWith(AndroidJUnit4.class) +public final class VbriSeekerTest { + + private static final int VBRI_FRAME_HEADER_DATA = 0xFFFB3000; + private static final int VBRI_FRAME_POSITION = 157; + + @Test + public void getAverageBitrate_returnsAverageFromDataSizeAndDuration() { + MpegAudioUtil.Header header = new MpegAudioUtil.Header(); + header.setForHeaderData(VBRI_FRAME_HEADER_DATA); + int dataSize = 1_000; + int frameCount = 40; + VbriSeeker seeker = + checkNotNull( + VbriSeeker.create( + /* inputLength= */ C.LENGTH_UNSET, + VBRI_FRAME_POSITION, + header, + createVbriFrame(dataSize, frameCount, /* segmentSizes= */ 400, 600))); + long durationUs = + Util.sampleCountToDurationUs( + ((long) frameCount * header.samplesPerFrame) - 1, header.sampleRate); + int expectedAverageBitrate = + (int) + Util.scaleLargeValue( + dataSize, + C.BITS_PER_BYTE * C.MICROS_PER_SECOND, + durationUs, + RoundingMode.HALF_UP); + + assertThat(seeker.getAverageBitrate()).isEqualTo(expectedAverageBitrate); + assertThat(seeker.getAverageBitrate()).isNotEqualTo(header.bitrate); + } + + private static ParsableByteArray createVbriFrame( + int dataSize, int frameCount, int... segmentSizes) { + ByteBuffer payload = ByteBuffer.allocate(6 + 4 + 4 + 2 + 2 + 2 + 2 + 2 * segmentSizes.length); + payload.position(6); + payload.putInt(dataSize); + payload.putInt(frameCount); + payload.putShort((short) segmentSizes.length); + payload.putShort((short) 1); // scale + payload.putShort((short) 2); // entry size + payload.putShort((short) 0); + for (int segmentSize : segmentSizes) { + payload.putShort((short) segmentSize); + } + return new ParsableByteArray(payload.array()); + } +} diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/XingSeekerTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/XingSeekerTest.java index c71614bc891..3f33c6749e6 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/XingSeekerTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/XingSeekerTest.java @@ -24,6 +24,7 @@ import androidx.media3.extractor.SeekMap.SeekPoints; import androidx.media3.extractor.SeekPoint; import androidx.test.ext.junit.runners.AndroidJUnit4; +import java.math.RoundingMode; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -86,6 +87,20 @@ public void getTimeUsAtEndOfStream() { assertThat(seeker.getTimeUs(XING_AUDIO_END_POSITION)).isEqualTo(XING_STREAM_DURATION_US); } + @Test + public void getAverageBitrate_returnsAverageFromDataSizeAndDuration() { + int expectedAverageBitrate = + (int) + Util.scaleLargeValue( + XING_FRAME.dataSize - XING_FRAME.header.frameSize, + C.BITS_PER_BYTE * C.MICROS_PER_SECOND, + XING_STREAM_DURATION_US, + RoundingMode.HALF_UP); + + assertThat(seeker.getAverageBitrate()).isEqualTo(expectedAverageBitrate); + assertThat(seeker.getAverageBitrate()).isNotEqualTo(XING_FRAME.header.bitrate); + } + // https://github.com/androidx/media/issues/3117#issuecomment-4046538506 @Test public void getTimeUsAtEndOfStream_xingLengthLongerThanStream() { 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 index f76b5f9d18f..73189b48147 100644 --- 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 @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 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-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 index f76b5f9d18f..73189b48147 100644 --- 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 @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 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-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 index 05cb272f2fd..ff21a50a27c 100644 --- 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 @@ -11,7 +11,7 @@ track 0: sample count = 88 track duration = 2807979 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-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 index 05cb272f2fd..ff21a50a27c 100644 --- 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 @@ -11,7 +11,7 @@ track 0: sample count = 88 track duration = 2807979 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-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 index f76b5f9d18f..73189b48147 100644 --- 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 @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 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-vbri-header.mp3.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump index 9bbdfa04026..22dd2fe8b76 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 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-vbri-header.mp3.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump index 0c709cfaeae..93a0ab2836b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump @@ -11,7 +11,7 @@ track 0: sample count = 88 track duration = 2807979 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-vbri-header.mp3.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump index 4fcaba8671b..5a224a448f6 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump @@ -11,7 +11,7 @@ track 0: sample count = 59 track duration = 2807979 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-vbri-header.mp3.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump index 272241c5906..04293198ca5 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump @@ -11,7 +11,7 @@ track 0: sample count = 30 track duration = 2807979 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-vbri-header.mp3.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump index 9bbdfa04026..22dd2fe8b76 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 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.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.0.dump index 5cfd3266218..82a1edbcf62 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.0.dump @@ -8,7 +8,7 @@ track 0: sample count = 117 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.unknown_length.dump index 5cfd3266218..82a1edbcf62 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header-no-toc.mp3.unknown_length.dump @@ -8,7 +8,7 @@ track 0: sample count = 117 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.mp3.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.0.dump index 9dde5408e01..b5e7e19f405 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.0.dump @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.mp3.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.1.dump index b47319b0f7c..0dc3abaf2af 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.1.dump @@ -11,7 +11,7 @@ track 0: sample count = 77 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.mp3.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.2.dump index 7eabbad4cb7..5cb352f5b1f 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.2.dump @@ -11,7 +11,7 @@ track 0: sample count = 38 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.mp3.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.3.dump index 47ba03e7576..345a32a31d3 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.3.dump @@ -11,7 +11,7 @@ track 0: sample count = 0 track duration = 2807979 format 0: - averageBitrate = 64000 + 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.mp3.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.unknown_length.dump index 9dde5408e01..b5e7e19f405 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-xing-header.mp3.unknown_length.dump @@ -11,7 +11,7 @@ track 0: sample count = 117 track duration = 2807979 format 0: - averageBitrate = 64000 + averageBitrate = 108719 containerMimeType = audio/mpeg sampleMimeType = audio/mpeg maxInputSize = 4096