diff options
-rw-r--r-- | media/libavextensions/stagefright/AVExtensions.h | 3 | ||||
-rw-r--r-- | media/libavextensions/stagefright/AVUtils.cpp | 6 | ||||
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 7 |
3 files changed, 14 insertions, 2 deletions
diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h index 43d61be..08dbeeb 100644 --- a/media/libavextensions/stagefright/AVExtensions.h +++ b/media/libavextensions/stagefright/AVExtensions.h @@ -36,6 +36,7 @@ namespace android { struct ACodec; class MediaExtractor; +struct MediaCodec; /* * Factory to create objects of base-classes in libstagefright @@ -58,6 +59,8 @@ struct AVUtils { const sp<MetaData> &meta, sp<AMessage> *format); virtual DataSource::SnifferFunc getExtendedSniffer(); + virtual sp<MediaCodec> createCustomComponentByName(const sp<ALooper> &looper, + const char* mime, bool encoder); // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVUtils); }; diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp index 3c2ecd9..8fe0c53 100644 --- a/media/libavextensions/stagefright/AVUtils.cpp +++ b/media/libavextensions/stagefright/AVUtils.cpp @@ -37,6 +37,7 @@ #include <media/stagefright/MediaCodecList.h> #include <media/stagefright/MetaData.h> #include <media/stagefright/ACodec.h> +#include <media/stagefright/MediaCodec.h> #include "common/ExtensionsLoader.hpp" #include "stagefright/AVExtensions.h" @@ -58,6 +59,11 @@ DataSource::SnifferFunc AVUtils::getExtendedSniffer() { return dumbSniffer; } +sp<MediaCodec> AVUtils::createCustomComponentByName( + const sp<ALooper> &, const char* , bool ) { + return NULL; +} + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVUtils::AVUtils() { } diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index 3646828..aa77071 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -34,6 +34,7 @@ #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> +#include <stagefright/AVExtensions.h> #include <gui/Surface.h> #include "avc_utils.h" @@ -251,8 +252,10 @@ void NuPlayer::Decoder::onConfigure(const sp<AMessage> &format) { mComponentName.append(" decoder"); ALOGV("[%s] onConfigure (surface=%p)", mComponentName.c_str(), mSurface.get()); - mCodec = MediaCodec::CreateByType( - mCodecLooper, mime.c_str(), false /* encoder */, NULL /* err */, mPid); + mCodec = AVUtils::get()->createCustomComponentByName(mCodecLooper, mime.c_str(), false /* encoder */); + if (mCodec == NULL) { + mCodec = MediaCodec::CreateByType(mCodecLooper, mime.c_str(), false /* encoder */); + } int32_t secure = 0; if (format->findInt32("secure", &secure) && secure != 0) { if (mCodec != NULL) { |