summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Extractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-13 11:25:10 -0800
committerAndreas Huber <andih@google.com>2010-01-13 11:30:34 -0800
commit7be6407f2ad7f2b0782d195d9f792072c084d6f5 (patch)
tree61fe09168598f2eed26f83ced0fdbc541ef42e96 /media/libstagefright/MPEG4Extractor.cpp
parentbd4bc59262df90dc85752684a1d4a92833a535a3 (diff)
downloadframeworks_av-7be6407f2ad7f2b0782d195d9f792072c084d6f5.zip
frameworks_av-7be6407f2ad7f2b0782d195d9f792072c084d6f5.tar.gz
frameworks_av-7be6407f2ad7f2b0782d195d9f792072c084d6f5.tar.bz2
Support for determining the mime type of media via metadata extraction.
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index b340b29..9e7f1c7 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -152,6 +152,7 @@ static const char *FourCC2MIME(uint32_t fourcc) {
MPEG4Extractor::MPEG4Extractor(const sp<DataSource> &source)
: mDataSource(source),
mHaveMetadata(false),
+ mHasVideo(false),
mFirstTrack(NULL),
mLastTrack(NULL) {
}
@@ -167,6 +168,23 @@ MPEG4Extractor::~MPEG4Extractor() {
mFirstTrack = mLastTrack = NULL;
}
+sp<MetaData> MPEG4Extractor::getMetaData() {
+ sp<MetaData> meta = new MetaData;
+
+ status_t err;
+ if ((err = readMetaData()) != OK) {
+ return meta;
+ }
+
+ if (mHasVideo) {
+ meta->setCString(kKeyMIMEType, "video/mp4");
+ } else {
+ meta->setCString(kKeyMIMEType, "audio/mp4");
+ }
+
+ return meta;
+}
+
size_t MPEG4Extractor::countTracks() {
status_t err;
if ((err = readMetaData()) != OK) {
@@ -235,7 +253,7 @@ status_t MPEG4Extractor::readMetaData() {
status_t err;
while ((err = parseChunk(&offset, 0)) == OK) {
}
-
+
if (mHaveMetadata) {
return OK;
}
@@ -561,6 +579,8 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
case FOURCC('s', '2', '6', '3'):
case FOURCC('a', 'v', 'c', '1'):
{
+ mHasVideo = true;
+
if (mHandlerType != FOURCC('v', 'i', 'd', 'e')) {
return ERROR_MALFORMED;
}