summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaExtractor.cpp
diff options
context:
space:
mode:
authorvivek mehta <mvivek@codeaurora.org>2012-12-18 14:55:24 -0800
committerSteve Kondik <shade@chemlab.org>2012-12-29 02:11:31 -0800
commit2fa0f79025df3193bc4353a82206baf4bd3e6e9f (patch)
tree37cd55e7c3da0b1b2b937925e9010f8476ed035a /media/libstagefright/MediaExtractor.cpp
parentcf0953976bb3d70e6c51b097741016e3b7e095d9 (diff)
downloadframeworks_av-2fa0f79025df3193bc4353a82206baf4bd3e6e9f.zip
frameworks_av-2fa0f79025df3193bc4353a82206baf4bd3e6e9f.tar.gz
frameworks_av-2fa0f79025df3193bc4353a82206baf4bd3e6e9f.tar.bz2
Squashed commit of updates from CodeAurora
libstagefright: Add support for VC1 clips - configure decoder in frame-by-frame or arbitrary mode based on the codec type. Change-Id: I6404e5b7ee217045e6456f51f914dbd8a651d98a CRs-Fixed: 432847 stagefright: Miscellaneous fixes for LPA and Tunnel playback 1. Fix for AV sync issue with Tunnel playback APIs for returning correct timestamps were implemented 2. Crash while exiting TunnelPlayer Check whether sink is open before flushing or closing it. Check for mIsAudioRouted is good to know if we are closing it 3. Seekbar freezes after seek and pause Check pause status before writing Change-Id: Id8ab7b258e9c05b20e121bdf3c4dc30d519f6c15 frameworks/av: Add support for surround sound recording - Add 5.1 channel as supported input channel Change-Id: I50fcd87245c5c855ede8f09ea1a7c5be2e684640 stagefright: Add tunnel decode for amr-wb/wb+ When tunnel.decode is true, playback of AMR-WB and AMR-WB+ uses tunnel decode. Change-Id: Ic06cb3faaac18f605402c98a27cb4dfa4b7faee2 stagefright: Skip LPA if #channels > 2 Skip LPA for Multi channel playback Change-Id: I5b97471ef55aea260d1c02db672eb4bd64c3edef
Diffstat (limited to 'media/libstagefright/MediaExtractor.cpp')
-rw-r--r--media/libstagefright/MediaExtractor.cpp56
1 files changed, 51 insertions, 5 deletions
diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp
index cca49fe..833084a 100644
--- a/media/libstagefright/MediaExtractor.cpp
+++ b/media/libstagefright/MediaExtractor.cpp
@@ -17,6 +17,7 @@
//#define LOG_NDEBUG 0
#define LOG_TAG "MediaExtractor"
#include <utils/Log.h>
+#include <cutils/properties.h>
#include "include/AMRExtractor.h"
#include "include/MP3Extractor.h"
@@ -57,6 +58,7 @@ uint32_t MediaExtractor::flags() const {
sp<MediaExtractor> MediaExtractor::Create(
const sp<DataSource> &source, const char *mime) {
sp<AMessage> meta;
+ bool bCheckExtendedExtractor = false;
String8 tmp;
if (mime == NULL) {
@@ -103,6 +105,15 @@ sp<MediaExtractor> MediaExtractor::Create(
} else {
ret = new MPEG4Extractor(source);
}
+#ifdef QCOM_ENHANCED_AUDIO
+ char tunnelDecode[PROPERTY_VALUE_MAX];
+ ALOGV("MediaExtractor::Create checking tunnel.decode");
+ property_get("tunnel.decode",tunnelDecode,"0");
+ if( (strncmp("true",tunnelDecode,4) == 0) || (atoi(tunnelDecode)) ) {
+ bCheckExtendedExtractor = true;
+ ALOGV("MediaExtractor::Create detected tunnel.decode as true...");
+ }
+#endif
} else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_MPEG)) {
ret = new MP3Extractor(source, meta);
} else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)
@@ -136,13 +147,48 @@ sp<MediaExtractor> MediaExtractor::Create(
}
#ifdef QCOM_HARDWARE
- if(ret == NULL) {
- //Create Extended Extractor only if default extractor are not selected
- ALOGV("Using ExtendedExtractor\n");
- ret = ExtendedExtractor::CreateExtractor(source, mime);
+ //If default extractor created and flag is not set to check extended extractor,
+ // then pass default extractor.
+ if (ret && (!bCheckExtendedExtractor) ) {
+ ALOGD("returning default extractor");
+ return ret;
}
-#endif
+ //Create Extended Extractor only if default extractor are not selected
+ ALOGV("Using ExtendedExtractor");
+ sp<MediaExtractor> retextParser = ExtendedExtractor::CreateExtractor(source, mime);
+ //if we came here, it means we do not have to use the default extractor, if created above.
+ bool bUseDefaultExtractor = false;
+
+ if(bCheckExtendedExtractor) {
+ ALOGV("bCheckExtendedExtractor is true");
+ //bCheckExtendedExtractor is true which means default extractor was found
+ // but we want to give preference to extended extractor based on certain
+ // codec type.Set bUseDefaultExtractor to true if extended extractor
+ //does not return specific codec type that we are looking for.
+ bUseDefaultExtractor = true;
+ ALOGV(" bCheckExtendedExtractor is true..checking extended extractor");
+ for (size_t i = 0; (retextParser!=NULL) && (i < retextParser->countTracks()); ++i) {
+ sp<MetaData> meta = retextParser->getTrackMetaData(i);
+ const char *mime;
+ bool success = meta->findCString(kKeyMIMEType, &mime);
+ if( (success == true) && !strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_WB_PLUS)) {
+ ALOGV("Discarding default extractor and using the extended one");
+ //We found what we were looking for, set bUseDefaultExtractor to false;
+ bUseDefaultExtractor = false;
+ if(ret) {
+ //delete the default extractor as we will be using extended extractor..
+ delete ret;
+ }
+ break;
+ }
+ }
+ }
+ if( (retextParser != NULL) && (!bUseDefaultExtractor) ) {
+ ALOGV("returning retextParser");
+ return retextParser;
+ }
+#endif
return ret;
}