summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Extractor.cpp
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2010-02-09 14:02:16 -0800
committerMarco Nelissen <marcone@google.com>2010-02-09 14:15:38 -0800
commit26bae54d7a3d04215eba34c62c349f1be6ab1493 (patch)
tree2aacb7af959e3475f1cbb747ab06b71a435b6fc7 /media/libstagefright/MPEG4Extractor.cpp
parent22c85664fead28bf376084de20d2f3a90552e000 (diff)
downloadframeworks_av-26bae54d7a3d04215eba34c62c349f1be6ab1493.zip
frameworks_av-26bae54d7a3d04215eba34c62c349f1be6ab1493.tar.gz
frameworks_av-26bae54d7a3d04215eba34c62c349f1be6ab1493.tar.bz2
Support the disc number and custom genre tags for mp4.
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp36
1 files changed, 33 insertions, 3 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index e41b366..4458006 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -1070,6 +1070,11 @@ status_t MPEG4Extractor::parseMetaData(off_t offset, size_t size) {
metadataKey = kKeyGenre;
break;
}
+ case FOURCC(0xa9, 'g', 'e', 'n'):
+ {
+ metadataKey = kKeyGenre;
+ break;
+ }
case FOURCC('t', 'r', 'k', 'n'):
{
if (size == 16 && flags == 0) {
@@ -1077,11 +1082,22 @@ status_t MPEG4Extractor::parseMetaData(off_t offset, size_t size) {
sprintf(tmp, "%d/%d",
(int)buffer[size - 5], (int)buffer[size - 3]);
- printf("track: %s\n", tmp);
mFileMetaData->setCString(kKeyCDTrackNumber, tmp);
}
break;
}
+ case FOURCC('d', 'i', 's', 'k'):
+ {
+ if (size == 14 && flags == 0) {
+ char tmp[16];
+ sprintf(tmp, "%d/%d",
+ (int)buffer[size - 3], (int)buffer[size - 1]);
+
+ mFileMetaData->setCString(kKeyDiscNumber, tmp);
+ }
+ break;
+ }
+
default:
break;
}
@@ -1093,11 +1109,25 @@ status_t MPEG4Extractor::parseMetaData(off_t offset, size_t size) {
buffer + 8, size - 8);
} else if (metadataKey == kKeyGenre) {
if (flags == 0) {
- // uint8_t
+ // uint8_t genre code, iTunes genre codes are
+ // the standard id3 codes, except they start
+ // at 1 instead of 0 (e.g. Pop is 14, not 13)
+ // We use standard id3 numbering, so subtract 1.
+ int genrecode = (int)buffer[size - 1];
+ genrecode--;
+ if (genrecode < 0) {
+ genrecode = 255; // reserved for 'unknown genre'
+ }
char genre[10];
- sprintf(genre, "%d", (int)buffer[size - 1]);
+ sprintf(genre, "%d", genrecode);
mFileMetaData->setCString(metadataKey, genre);
+ } else if (flags == 1) {
+ // custom genre string
+ buffer[size] = '\0';
+
+ mFileMetaData->setCString(
+ metadataKey, (const char *)buffer + 8);
}
} else {
buffer[size] = '\0';