summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2013-06-17 23:16:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-06-17 23:16:10 +0000
commit0063bbff7db6096a877deaaf48787ca78a3a37c8 (patch)
treec5ef39bee08ab75f22953ccc8f84155fd1abf273 /media
parentd983cb0ca409eb6df6bc9dc0f19cb110a9cf098e (diff)
parent72a43b68da48890273508cb1c9d646b7d75fc101 (diff)
downloadframeworks_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.cpp15
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;
}