diff options
author | Marco Nelissen <marcone@google.com> | 2013-09-06 16:58:25 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-09-06 16:58:25 +0000 |
commit | c23981d9375d4a55f5701a4090b36deecda92f92 (patch) | |
tree | e8c15d600856ea80b91ad4ffd38c8ea79c71e46e /media/libstagefright | |
parent | 36a8b33a23dca49c9617e97e22e5d67f7d25c268 (diff) | |
parent | 6f9439efd2a6004b588605f6a9d4af20c98e8e80 (diff) | |
download | frameworks_av-c23981d9375d4a55f5701a4090b36deecda92f92.zip frameworks_av-c23981d9375d4a55f5701a4090b36deecda92f92.tar.gz frameworks_av-c23981d9375d4a55f5701a4090b36deecda92f92.tar.bz2 |
Merge "Better workaround for slow decoders." into klp-dev
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 66a0b4e..e0686be 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -31,6 +31,7 @@ #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/ACodec.h> #include <media/stagefright/BufferProducerWrapper.h> +#include <media/stagefright/MediaCodecList.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> #include <media/stagefright/MetaData.h> @@ -104,10 +105,24 @@ status_t MediaCodec::init(const char *name, bool nameIsType, bool encoder) { bool needDedicatedLooper = false; if (nameIsType && !strncasecmp(name, "video/", 6)) { needDedicatedLooper = true; - } else if (!nameIsType && !strncmp(name, "OMX.TI.DUCATI1.VIDEO.", 21)) { - needDedicatedLooper = true; - } else if (!nameIsType && !strncmp(name, "OMX.qcom.video.decoder.avc.secure", 33)) { - needDedicatedLooper = true; + } else { + AString tmp = name; + if (tmp.endsWith(".secure")) { + tmp.erase(tmp.size() - 7, 7); + } + const MediaCodecList *mcl = MediaCodecList::getInstance(); + ssize_t codecIdx = mcl->findCodecByName(tmp.c_str()); + if (codecIdx >= 0) { + Vector<AString> types; + if (mcl->getSupportedTypes(codecIdx, &types) == OK) { + for (int i = 0; i < types.size(); i++) { + if (types[i].startsWith("video/")) { + needDedicatedLooper = true; + break; + } + } + } + } } if (needDedicatedLooper) { |