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

Commit 71e28ba2 authored by Android Build Merger (Role)'s avatar Android Build Merger (Role)
Browse files

[automerger] Speed up id3v2 unsynchronization am: f9d87cc8 am: 4da1490a...

[automerger] Speed up id3v2 unsynchronization am: f9d87cc8 am: 4da1490a am: 136be01d am: c0367b94 am: 27d756fb am: 6801c150

Change-Id: Ib6be75c9ec42de4990778c4809fa43a1753aeb93
parents 18308ee1 6801c150
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -328,12 +328,25 @@ struct id3_header {
}

void ID3::removeUnsynchronization() {
    for (size_t i = 0; i + 1 < mSize; ++i) {
        if (mData[i] == 0xff && mData[i + 1] == 0x00) {
            memmove(&mData[i + 1], &mData[i + 2], mSize - i - 2);
            --mSize;

    // This file has "unsynchronization", so we have to replace occurrences
    // of 0xff 0x00 with just 0xff in order to get the real data.

    size_t writeOffset = 1;
    for (size_t readOffset = 1; readOffset < mSize; ++readOffset) {
        if (mData[readOffset - 1] == 0xff && mData[readOffset] == 0x00) {
            continue;
        }
        // Only move data if there's actually something to move.
        // This handles the special case of the data being only [0xff, 0x00]
        // which should be converted to just 0xff if unsynchronization is on.
        mData[writeOffset++] = mData[readOffset];
    }

    if (writeOffset < mSize) {
        mSize = writeOffset;
    }

}

static void WriteSyncsafeInteger(uint8_t *dst, size_t x) {