diff options
author | Andreas Huber <andih@google.com> | 2010-01-13 11:25:10 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-13 11:30:34 -0800 |
commit | 7be6407f2ad7f2b0782d195d9f792072c084d6f5 (patch) | |
tree | 61fe09168598f2eed26f83ced0fdbc541ef42e96 /media/libstagefright/MPEG4Extractor.cpp | |
parent | bd4bc59262df90dc85752684a1d4a92833a535a3 (diff) | |
download | frameworks_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.cpp | 22 |
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; } |