Skip to content

Commit

Permalink
Revert to using header bitrate for CBR MP3s
Browse files Browse the repository at this point in the history
A previous change switched to calculation of the bitrate based on the
first MPEG audio header in the stream. This had the effect of fixing
seeking to be consistent with playing from the start for streams where
every frame has the same padding value, but broke streams where the
encoder (correctly) modifies the padding value to match the declared
bitrate in the header.

Issue: google#6238
PiperOrigin-RevId: 261163904
  • Loading branch information
andrewlewis authored and ojw28 committed Aug 2, 2019
1 parent 88b68e5 commit 80bc50b
Show file tree
Hide file tree
Showing 6 changed files with 9 additions and 11 deletions.
8 changes: 5 additions & 3 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@
tags instead of 3-letter ISO 639-2 language tags.
* Ensure the `SilenceMediaSource` position is in range
([#6229](https://github.com/google/ExoPlayer/issues/6229)).
* Calculate correct duration for clipped WAV streams
* WAV: Calculate correct duration for clipped streams
([#6241](https://github.com/google/ExoPlayer/issues/6241)).
* MP3: Use CBR header bitrate, not calculated bitrate. This reverts a change
from 2.9.3 ([#6238](https://github.com/google/ExoPlayer/issues/6238)).
* Flac extension: Parse `VORBIS_COMMENT` and `PICTURE` metadata
([#5527](https://github.com/google/ExoPlayer/issues/5527)).
* Fix issue where initial seek positions get ignored when playing a preroll ad
([#6201](https://github.com/google/ExoPlayer/issues/6201)).
* Fix issue where invalid language tags were normalized to "und" instead of
Expand All @@ -20,8 +24,6 @@
([#6192](https://github.com/google/ExoPlayer/issues/6192)).
* Fix Flac and ALAC playback on some LG devices
([#5938](https://github.com/google/ExoPlayer/issues/5938)).
* Flac extension: Parse `VORBIS_COMMENT` and `PICTURE` metadata
([#5527](https://github.com/google/ExoPlayer/issues/5527)).

### 2.10.3 ###

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,6 @@ public static boolean populateHeader(int headerData, MpegAudioHeader header) {
}
}

// Calculate the bitrate in the same way Mp3Extractor calculates sample timestamps so that
// seeking to a given timestamp and playing from the start up to that timestamp give the same
// results for CBR streams. See also [internal: b/120390268].
bitrate = 8 * frameSize * sampleRate / samplesPerFrame;
String mimeType = MIME_TYPE_BY_LAYER[3 - layer];
int channels = ((headerData >> 6) & 3) == 3 ? 1 : 2;
header.setValues(version, mimeType, frameSize, sampleRate, channels, bitrate, samplesPerFrame);
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/test/assets/mp3/play-trimmed.mp3.0.dump
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
seekMap:
isSeekable = true
duration = 26122
duration = 26125
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/test/assets/mp3/play-trimmed.mp3.1.dump
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
seekMap:
isSeekable = true
duration = 26122
duration = 26125
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/test/assets/mp3/play-trimmed.mp3.2.dump
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
seekMap:
isSeekable = true
duration = 26122
duration = 26125
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
Expand Down
2 changes: 1 addition & 1 deletion library/core/src/test/assets/mp3/play-trimmed.mp3.3.dump
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
seekMap:
isSeekable = true
duration = 26122
duration = 26125
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
Expand Down

0 comments on commit 80bc50b

Please sign in to comment.