Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffd6ffc5 authored by Dylan Powers's avatar Dylan Powers
Browse files

Bug fix for the MediaPlayer::prepare() api.

For an MP3 source, within the prepare command, ID3 tags are checked in search of
gapless playback info. This causes problems for streamed sources. If ID3v2 tags
aren't present, then a check is done for ID3v1 tags. This results in a read
command that asks the cache to jump to the end of the file, and subsequently
make an extra http call to request those bytes. For a streamed source, this
causes the file to not be downloaded automatically when MediaPlayer::prepare()
is called, and causes stuttering and extra buffering time to be needed when
start() is finally called.
The solution is to ignore the ID3v1 tags as the gapless info would never exist
there, and only check for ID3v2 tags.

Change-Id: I7d1b94cffbfe7c38ca094834dedbc92a58855e20
parent 5768fa03
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -350,8 +350,10 @@ MP3Extractor::MP3Extractor(

    mInitCheck = OK;

    // get iTunes-style gapless info if present
    ID3 id3(mDataSource);
    // Get iTunes-style gapless info if present.
    // When getting the id3 tag, skip the V1 tags to prevent the source cache
    // from being iterated to the end of the file.
    ID3 id3(mDataSource, true);
    if (id3.isValid()) {
        ID3::Iterator *com = new ID3::Iterator(id3, "COM");
        if (com->done()) {
+2 −2
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ namespace android {

static const size_t kMaxMetadataSize = 3 * 1024 * 1024;

ID3::ID3(const sp<DataSource> &source)
ID3::ID3(const sp<DataSource> &source, bool ignoreV1)
    : mIsValid(false),
      mData(NULL),
      mSize(0),
@@ -38,7 +38,7 @@ ID3::ID3(const sp<DataSource> &source)
      mVersion(ID3_UNKNOWN) {
    mIsValid = parseV2(source);

    if (!mIsValid) {
    if (!mIsValid && !ignoreV1) {
        mIsValid = parseV1(source);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ struct ID3 {
        ID3_V2_4,
    };

    ID3(const sp<DataSource> &source);
    ID3(const sp<DataSource> &source, bool ignoreV1 = false);
    ~ID3();

    bool isValid() const;