diff options
author | Marco Nelissen <marcone@google.com> | 2013-06-17 23:16:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-06-17 23:16:10 +0000 |
commit | 0063bbff7db6096a877deaaf48787ca78a3a37c8 (patch) | |
tree | c5ef39bee08ab75f22953ccc8f84155fd1abf273 /media | |
parent | d983cb0ca409eb6df6bc9dc0f19cb110a9cf098e (diff) | |
parent | 72a43b68da48890273508cb1c9d646b7d75fc101 (diff) | |
download | frameworks_av-0063bbff7db6096a877deaaf48787ca78a3a37c8.zip frameworks_av-0063bbff7db6096a877deaaf48787ca78a3a37c8.tar.gz frameworks_av-0063bbff7db6096a877deaaf48787ca78a3a37c8.tar.bz2 |
Merge "Speed up id3v2 unsynchronization"
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/id3/ID3.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp index 8d3013b..34d671a 100644 --- a/media/libstagefright/id3/ID3.cpp +++ b/media/libstagefright/id3/ID3.cpp @@ -357,17 +357,22 @@ bool ID3::removeUnsynchronizationV2_4(bool iTunesHack) { } if (flags & 2) { - // Unsynchronization added. + // 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 readOffset = offset + 11; + size_t writeOffset = offset + 11; for (size_t i = 0; i + 1 < dataSize; ++i) { - if (mData[offset + 10 + i] == 0xff - && mData[offset + 11 + i] == 0x00) { - memmove(&mData[offset + 11 + i], &mData[offset + 12 + i], - mSize - offset - 12 - i); + if (mData[readOffset - 1] == 0xff + && mData[readOffset] == 0x00) { + ++readOffset; --mSize; --dataSize; } + mData[writeOffset++] = mData[readOffset++]; } + // move the remaining data following this frame + memmove(&mData[writeOffset], &mData[readOffset], oldSize - readOffset); flags &= ~2; } |