diff options
-rw-r--r-- | include/media/mediametadataretriever.h | 1 | ||||
-rw-r--r-- | media/java/android/media/MediaMetadataRetriever.java | 1 | ||||
-rw-r--r-- | media/libstagefright/AMRExtractor.cpp | 12 | ||||
-rw-r--r-- | media/libstagefright/MP3Extractor.cpp | 4 | ||||
-rw-r--r-- | media/libstagefright/MPEG4Extractor.cpp | 22 | ||||
-rw-r--r-- | media/libstagefright/StagefrightMediaScanner.cpp | 6 | ||||
-rw-r--r-- | media/libstagefright/StagefrightMetadataRetriever.cpp | 1 | ||||
-rw-r--r-- | media/libstagefright/WAVExtractor.cpp | 12 | ||||
-rw-r--r-- | media/libstagefright/include/AMRExtractor.h | 2 | ||||
-rw-r--r-- | media/libstagefright/include/MPEG4Extractor.h | 9 | ||||
-rw-r--r-- | media/libstagefright/include/WAVExtractor.h | 2 |
11 files changed, 68 insertions, 4 deletions
diff --git a/include/media/mediametadataretriever.h b/include/media/mediametadataretriever.h index cfc205c..113c452 100644 --- a/include/media/mediametadataretriever.h +++ b/include/media/mediametadataretriever.h @@ -53,6 +53,7 @@ enum { METADATA_KEY_VIDEO_HEIGHT = 19, METADATA_KEY_VIDEO_WIDTH = 20, METADATA_KEY_WRITER = 21, + METADATA_KEY_MIMETYPE = 22, // Add more here... }; diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java index cecf4f8..04f8b5d 100644 --- a/media/java/android/media/MediaMetadataRetriever.java +++ b/media/java/android/media/MediaMetadataRetriever.java @@ -255,5 +255,6 @@ public class MediaMetadataRetriever public static final int METADATA_KEY_VIDEO_HEIGHT = 19; public static final int METADATA_KEY_VIDEO_WIDTH = 20; public static final int METADATA_KEY_WRITER = 21; + public static final int METADATA_KEY_MIMETYPE = 22; // Add more here... } diff --git a/media/libstagefright/AMRExtractor.cpp b/media/libstagefright/AMRExtractor.cpp index bdd7550..3193d5e 100644 --- a/media/libstagefright/AMRExtractor.cpp +++ b/media/libstagefright/AMRExtractor.cpp @@ -128,6 +128,18 @@ AMRExtractor::AMRExtractor(const sp<DataSource> &source) AMRExtractor::~AMRExtractor() { } +sp<MetaData> AMRExtractor::getMetaData() { + sp<MetaData> meta = new MetaData; + + if (mInitCheck != OK) { + return meta; + } + + meta->setCString(kKeyMIMEType, mIsWide ? "audio/amr-wb" : "audio/amr"); + + return meta; +} + size_t AMRExtractor::countTracks() { return mInitCheck == OK ? 1 : 0; } diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp index 48130fc..accd94d 100644 --- a/media/libstagefright/MP3Extractor.cpp +++ b/media/libstagefright/MP3Extractor.cpp @@ -711,6 +711,10 @@ status_t MP3Source::read( sp<MetaData> MP3Extractor::getMetaData() { sp<MetaData> meta = new MetaData; + if (mFirstFramePos < 0) { + return meta; + } + meta->setCString(kKeyMIMEType, "audio/mpeg"); ID3 id3(mDataSource); 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; } diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp index 4815db2..3451383 100644 --- a/media/libstagefright/StagefrightMediaScanner.cpp +++ b/media/libstagefright/StagefrightMediaScanner.cpp @@ -179,6 +179,12 @@ status_t StagefrightMediaScanner::processFile( if (mRetriever->setDataSource(path) == OK && mRetriever->setMode( METADATA_MODE_METADATA_RETRIEVAL_ONLY) == OK) { + const char *value; + if ((value = mRetriever->extractMetadata( + METADATA_KEY_MIMETYPE)) != NULL) { + client.setMimeType(value); + } + struct KeyMap { const char *tag; int key; diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp index 4cc56e3..c7877a9 100644 --- a/media/libstagefright/StagefrightMetadataRetriever.cpp +++ b/media/libstagefright/StagefrightMetadataRetriever.cpp @@ -275,6 +275,7 @@ void StagefrightMetadataRetriever::parseMetaData() { int to; }; static const Map kMap[] = { + { kKeyMIMEType, METADATA_KEY_MIMETYPE }, { kKeyCDTrackNumber, METADATA_KEY_CD_TRACK_NUMBER }, { kKeyAlbum, METADATA_KEY_ALBUM }, { kKeyArtist, METADATA_KEY_ARTIST }, diff --git a/media/libstagefright/WAVExtractor.cpp b/media/libstagefright/WAVExtractor.cpp index 542c764..959a767 100644 --- a/media/libstagefright/WAVExtractor.cpp +++ b/media/libstagefright/WAVExtractor.cpp @@ -82,6 +82,18 @@ WAVExtractor::WAVExtractor(const sp<DataSource> &source) WAVExtractor::~WAVExtractor() { } +sp<MetaData> WAVExtractor::getMetaData() { + sp<MetaData> meta = new MetaData; + + if (mInitCheck != OK) { + return meta; + } + + meta->setCString(kKeyMIMEType, "audio/x-wav"); + + return meta; +} + size_t WAVExtractor::countTracks() { return mInitCheck == OK ? 1 : 0; } diff --git a/media/libstagefright/include/AMRExtractor.h b/media/libstagefright/include/AMRExtractor.h index 1972a1c..db49fe4 100644 --- a/media/libstagefright/include/AMRExtractor.h +++ b/media/libstagefright/include/AMRExtractor.h @@ -32,6 +32,8 @@ public: virtual sp<MediaSource> getTrack(size_t index); virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); + virtual sp<MetaData> getMetaData(); + protected: virtual ~AMRExtractor(); diff --git a/media/libstagefright/include/MPEG4Extractor.h b/media/libstagefright/include/MPEG4Extractor.h index ce4736d..0e360e8 100644 --- a/media/libstagefright/include/MPEG4Extractor.h +++ b/media/libstagefright/include/MPEG4Extractor.h @@ -31,9 +31,11 @@ public: // Extractor assumes ownership of "source". MPEG4Extractor(const sp<DataSource> &source); - size_t countTracks(); - sp<MediaSource> getTrack(size_t index); - sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); + virtual size_t countTracks(); + virtual sp<MediaSource> getTrack(size_t index); + virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); + + virtual sp<MetaData> getMetaData(); protected: virtual ~MPEG4Extractor(); @@ -49,6 +51,7 @@ private: sp<DataSource> mDataSource; bool mHaveMetadata; + bool mHasVideo; Track *mFirstTrack, *mLastTrack; diff --git a/media/libstagefright/include/WAVExtractor.h b/media/libstagefright/include/WAVExtractor.h index 10b9700..8545efc 100644 --- a/media/libstagefright/include/WAVExtractor.h +++ b/media/libstagefright/include/WAVExtractor.h @@ -34,6 +34,8 @@ public: virtual sp<MediaSource> getTrack(size_t index); virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); + virtual sp<MetaData> getMetaData(); + protected: virtual ~WAVExtractor(); |