diff options
author | vivek mehta <mvivek@codeaurora.org> | 2012-12-18 14:55:24 -0800 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2012-12-29 02:11:31 -0800 |
commit | 2fa0f79025df3193bc4353a82206baf4bd3e6e9f (patch) | |
tree | 37cd55e7c3da0b1b2b937925e9010f8476ed035a /media/libstagefright/MediaExtractor.cpp | |
parent | cf0953976bb3d70e6c51b097741016e3b7e095d9 (diff) | |
download | frameworks_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.cpp | 56 |
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; } |