diff options
author | Andreas Huber <andih@google.com> | 2010-02-08 11:04:56 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-02-08 16:46:27 -0800 |
commit | 9be54d400d68c735013bc8069fbcb66c3f98c3ee (patch) | |
tree | 70556ab40222a104f8dd610471c6fe7aa6372703 /media | |
parent | ba5306824519ed12c15be28a3e46bd92773266fe (diff) | |
download | frameworks_base-9be54d400d68c735013bc8069fbcb66c3f98c3ee.zip frameworks_base-9be54d400d68c735013bc8069fbcb66c3f98c3ee.tar.gz frameworks_base-9be54d400d68c735013bc8069fbcb66c3f98c3ee.tar.bz2 |
ID3v1 tag's strings are ISO8859, not UTF-8, so do the proper conversion when extracting metadata.
related-to-bug: 2399408
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/id3/ID3.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp index 65a4ae4..e022bb0 100644 --- a/media/libstagefright/id3/ID3.cpp +++ b/media/libstagefright/id3/ID3.cpp @@ -274,7 +274,9 @@ static void convertISO8859ToString8( String8 *s) { size_t utf8len = 0; for (size_t i = 0; i < size; ++i) { - if (data[i] < 0x80) { + if (data[i] == '\0') { + break; + } else if (data[i] < 0x80) { ++utf8len; } else { utf8len += 2; @@ -291,7 +293,9 @@ static void convertISO8859ToString8( char *tmp = new char[utf8len]; char *ptr = tmp; for (size_t i = 0; i < size; ++i) { - if (data[i] < 0x80) { + if (data[i] == '\0') { + break; + } else if (data[i] < 0x80) { *ptr++ = data[i]; } else if (data[i] < 0xc0) { *ptr++ = 0xc2; @@ -325,7 +329,7 @@ void ID3::Iterator::getString(String8 *id) const { return; } - id->setTo((const char *)mFrameData, mFrameSize); + convertISO8859ToString8(mFrameData, mFrameSize, id); return; } |