diff options
author | Andreas Huber <andih@google.com> | 2011-03-04 10:24:54 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-03-04 10:32:36 -0800 |
commit | c4c38fc1ea06086ea3c7ba12f59ecfacd5fa716b (patch) | |
tree | 6fb5765d2f6998ae4098d262561dfca7b6f15871 | |
parent | fdcdd418e9f1b93c38cabca4f3203ba92032d515 (diff) | |
download | frameworks_base-c4c38fc1ea06086ea3c7ba12f59ecfacd5fa716b.zip frameworks_base-c4c38fc1ea06086ea3c7ba12f59ecfacd5fa716b.tar.gz frameworks_base-c4c38fc1ea06086ea3c7ba12f59ecfacd5fa716b.tar.bz2 |
Added more metadata published by the MediaMetaDataRetriever
- presence of audio/video content
- video dimensions
- avg. bitrate
Change-Id: Ie6d478a3c2d0bb6bebaea99ac0a20a4c17808934
related-to-bug: 3506316
-rw-r--r-- | api/current.xml | 55 | ||||
-rw-r--r-- | include/media/mediametadataretriever.h | 6 | ||||
-rw-r--r-- | media/java/android/media/MediaMetadataRetriever.java | 20 | ||||
-rw-r--r-- | media/libstagefright/StagefrightMetadataRetriever.cpp | 49 |
4 files changed, 130 insertions, 0 deletions
diff --git a/api/current.xml b/api/current.xml index b482602..0f591b2 100644 --- a/api/current.xml +++ b/api/current.xml @@ -105768,6 +105768,17 @@ visibility="public" > </field> +<field name="METADATA_KEY_BITRATE" + type="int" + transient="false" + volatile="false" + value="20" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="METADATA_KEY_CD_TRACK_NUMBER" type="int" transient="false" @@ -105845,6 +105856,28 @@ visibility="public" > </field> +<field name="METADATA_KEY_HAS_AUDIO" + type="int" + transient="false" + volatile="false" + value="16" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="METADATA_KEY_HAS_VIDEO" + type="int" + transient="false" + volatile="false" + value="17" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="METADATA_KEY_MIMETYPE" type="int" transient="false" @@ -105878,6 +105911,28 @@ visibility="public" > </field> +<field name="METADATA_KEY_VIDEO_HEIGHT" + type="int" + transient="false" + volatile="false" + value="19" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> +<field name="METADATA_KEY_VIDEO_WIDTH" + type="int" + transient="false" + volatile="false" + value="18" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="METADATA_KEY_WRITER" type="int" transient="false" diff --git a/include/media/mediametadataretriever.h b/include/media/mediametadataretriever.h index e905006..a5cb949 100644 --- a/include/media/mediametadataretriever.h +++ b/include/media/mediametadataretriever.h @@ -47,6 +47,12 @@ enum { METADATA_KEY_ALBUMARTIST = 13, METADATA_KEY_DISC_NUMBER = 14, METADATA_KEY_COMPILATION = 15, + METADATA_KEY_HAS_AUDIO = 16, + METADATA_KEY_HAS_VIDEO = 17, + METADATA_KEY_VIDEO_WIDTH = 18, + METADATA_KEY_VIDEO_HEIGHT = 19, + METADATA_KEY_BITRATE = 20, + // Add more here... }; diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java index 77e939e..13e1732 100644 --- a/media/java/android/media/MediaMetadataRetriever.java +++ b/media/java/android/media/MediaMetadataRetriever.java @@ -398,5 +398,25 @@ public class MediaMetadataRetriever * The metadata key to retrieve the music album compilation status. */ public static final int METADATA_KEY_COMPILATION = 15; + /** + * If this key exists the media contains audio content. + */ + public static final int METADATA_KEY_HAS_AUDIO = 16; + /** + * If this key exists the media contains video content. + */ + public static final int METADATA_KEY_HAS_VIDEO = 17; + /** + * If the media contains video, this key retrieves its width. + */ + public static final int METADATA_KEY_VIDEO_WIDTH = 18; + /** + * If the media contains video, this key retrieves its height. + */ + public static final int METADATA_KEY_VIDEO_HEIGHT = 19; + /** + * This key retrieves the average bitrate (in bits/sec), if available. + */ + public static final int METADATA_KEY_BITRATE = 20; // Add more here... } diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp index ea3b801..c371cd0 100644 --- a/media/libstagefright/StagefrightMetadataRetriever.cpp +++ b/media/libstagefright/StagefrightMetadataRetriever.cpp @@ -411,6 +411,12 @@ void StagefrightMetadataRetriever::parseMetaData() { mMetaData.add(METADATA_KEY_NUM_TRACKS, String8(tmp)); + bool hasAudio = false; + bool hasVideo = false; + int32_t videoWidth = -1; + int32_t videoHeight = -1; + int32_t audioBitrate = -1; + // The overall duration is the duration of the longest track. int64_t maxDurationUs = 0; for (size_t i = 0; i < numTracks; ++i) { @@ -422,12 +428,55 @@ void StagefrightMetadataRetriever::parseMetaData() { maxDurationUs = durationUs; } } + + const char *mime; + if (trackMeta->findCString(kKeyMIMEType, &mime)) { + if (!hasAudio && !strncasecmp("audio/", mime, 6)) { + hasAudio = true; + + if (!trackMeta->findInt32(kKeyBitRate, &audioBitrate)) { + audioBitrate = -1; + } + } else if (!hasVideo && !strncasecmp("video/", mime, 6)) { + hasVideo = true; + + CHECK(trackMeta->findInt32(kKeyWidth, &videoWidth)); + CHECK(trackMeta->findInt32(kKeyHeight, &videoHeight)); + } + } } // The duration value is a string representing the duration in ms. sprintf(tmp, "%lld", (maxDurationUs + 500) / 1000); mMetaData.add(METADATA_KEY_DURATION, String8(tmp)); + if (hasAudio) { + mMetaData.add(METADATA_KEY_HAS_AUDIO, String8("yes")); + } + + if (hasVideo) { + mMetaData.add(METADATA_KEY_HAS_VIDEO, String8("yes")); + + sprintf(tmp, "%d", videoWidth); + mMetaData.add(METADATA_KEY_VIDEO_WIDTH, String8(tmp)); + + sprintf(tmp, "%d", videoHeight); + mMetaData.add(METADATA_KEY_VIDEO_HEIGHT, String8(tmp)); + } + + if (numTracks == 1 && hasAudio && audioBitrate >= 0) { + sprintf(tmp, "%ld", audioBitrate); + mMetaData.add(METADATA_KEY_BITRATE, String8(tmp)); + } else { + off64_t sourceSize; + if (mSource->getSize(&sourceSize) == OK) { + int64_t avgBitRate = (int64_t)(sourceSize * 8E6 / maxDurationUs); + + sprintf(tmp, "%lld", avgBitRate); + mMetaData.add(METADATA_KEY_BITRATE, String8(tmp)); + } + } + if (numTracks == 1) { const char *fileMIME; CHECK(meta->findCString(kKeyMIMEType, &fileMIME)); |