diff options
author | Marco Nelissen <marcone@google.com> | 2010-02-08 16:30:14 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-02-08 16:30:14 -0800 |
commit | 7499ef3e68e920c07e990deb600ceb6cf9b0c4c2 (patch) | |
tree | 40fa738620d787e318668eadb08a91e5082465fb /media | |
parent | ec5df83c5b44ad2f2b28a1a4420c4c4056dd6103 (diff) | |
parent | 3887ac7eb473b2cb6da37ed360c836adf0a479f3 (diff) | |
download | frameworks_base-7499ef3e68e920c07e990deb600ceb6cf9b0c4c2.zip frameworks_base-7499ef3e68e920c07e990deb600ceb6cf9b0c4c2.tar.gz frameworks_base-7499ef3e68e920c07e990deb600ceb6cf9b0c4c2.tar.bz2 |
Merge "Skip the endianness marker when converting UCS-2 to UTF-8, since it ends up in the UTF-8 string otherwise."
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/id3/ID3.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp index 6d64717..65a4ae4 100644 --- a/media/libstagefright/id3/ID3.cpp +++ b/media/libstagefright/id3/ID3.cpp @@ -24,6 +24,7 @@ #include <media/stagefright/MediaDebug.h> #include <media/stagefright/Utils.h> #include <utils/String8.h> +#include <sys/endian.h> namespace android { @@ -336,7 +337,26 @@ void ID3::Iterator::getString(String8 *id) const { } else { // UCS-2 // API wants number of characters, not number of bytes... - id->setTo((const char16_t *)(mFrameData + 1), n / 2); + int len = n / 2; + const char16_t *framedata = (const char16_t *) (mFrameData + 1); + char16_t *framedatacopy = NULL; + if (*framedata == 0xfffe) { + // endianness marker doesn't match host endianness, convert + framedatacopy = new char16_t[len]; + for (int i = 0; i < len; i++) { + framedatacopy[i] = swap16(framedata[i]); + } + framedata = framedatacopy; + } + // If the string starts with an endianness marker, skip it + if (*framedata == 0xfeff) { + framedata++; + len--; + } + id->setTo(framedata, len); + if (framedatacopy != NULL) { + delete[] framedatacopy; + } } } |