stagefright: use OMXCodec's QueryCodec for capabilities
Bug: 27142863
Change-Id: Ica00f5395477a416e1ca4db2697310eef3d635a0
diff --git a/include/media/MediaCodecInfo.h b/include/media/MediaCodecInfo.h
index 26dc1ce..3ce5433 100644
--- a/include/media/MediaCodecInfo.h
+++ b/include/media/MediaCodecInfo.h
@@ -33,6 +33,7 @@
struct AMessage;
class Parcel;
+struct CodecCapabilities;
typedef KeyedVector<AString, AString> CodecSettings;
@@ -126,9 +127,7 @@
void addQuirk(const char *name);
status_t addMime(const char *mime);
status_t updateMime(const char *mime);
-
- // after this call |caps| will be owned by MediaCodecInfo, which may modify it
- status_t setCapabilitiesFromCodec(const sp<Capabilities> &caps);
+ status_t initializeCapabilities(const CodecCapabilities &caps);
void addDetail(const AString &key, const AString &value);
void addFeature(const AString &key, int32_t value);
void addFeature(const AString &key, const char *value);
diff --git a/media/libmedia/MediaCodecInfo.cpp b/media/libmedia/MediaCodecInfo.cpp
index 8351af6..7a16c4e 100644
--- a/media/libmedia/MediaCodecInfo.cpp
+++ b/media/libmedia/MediaCodecInfo.cpp
@@ -26,6 +26,8 @@
#include <media/stagefright/foundation/AMessage.h>
#include <binder/Parcel.h>
+#include <media/stagefright/OMXCodec.h>
+
namespace android {
void MediaCodecInfo::Capabilities::getSupportedProfileLevels(
@@ -238,12 +240,26 @@
}
}
-status_t MediaCodecInfo::setCapabilitiesFromCodec(const sp<Capabilities> &caps) {
- if (mCurrentCaps != NULL) {
- // keep current capabilities map
- caps->mDetails = mCurrentCaps->mDetails;
+status_t MediaCodecInfo::initializeCapabilities(const CodecCapabilities &caps) {
+ mCurrentCaps->mProfileLevels.clear();
+ mCurrentCaps->mColorFormats.clear();
+
+ for (size_t i = 0; i < caps.mProfileLevels.size(); ++i) {
+ const CodecProfileLevel &src = caps.mProfileLevels.itemAt(i);
+
+ ProfileLevel profileLevel;
+ profileLevel.mProfile = src.mProfile;
+ profileLevel.mLevel = src.mLevel;
+ mCurrentCaps->mProfileLevels.push_back(profileLevel);
}
- mCurrentCaps = caps;
+
+ for (size_t i = 0; i < caps.mColorFormats.size(); ++i) {
+ mCurrentCaps->mColorFormats.push_back(caps.mColorFormats.itemAt(i));
+ }
+
+ mCurrentCaps->mFlags = caps.mFlags;
+ mCurrentCaps->mDetails = new AMessage;
+
return OK;
}
diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp
index 200796c..c049097 100644
--- a/media/libstagefright/MediaCodecList.cpp
+++ b/media/libstagefright/MediaCodecList.cpp
@@ -31,10 +31,10 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/ACodec.h>
-#include <media/stagefright/MediaCodec.h>
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/OMXClient.h>
+#include <media/stagefright/OMXCodec.h>
#include <sys/stat.h>
#include <utils/threads.h>
@@ -752,22 +752,18 @@
ALOGV("initializeCapabilities %s:%s",
mCurrentInfo->mName.c_str(), type);
- sp<MediaCodecInfo::Capabilities> caps;
- status_t err = MediaCodec::QueryCapabilities(
- mCurrentInfo->mName,
+ CodecCapabilities caps;
+ status_t err = QueryCodec(
+ mOMX,
+ mCurrentInfo->mName.c_str(),
type,
mCurrentInfo->mIsEncoder,
&caps);
if (err != OK) {
return err;
- } else if (caps == NULL) {
- ALOGE("MediaCodec::QueryCapabilities returned OK but no capabilities for '%s':'%s':'%s'",
- mCurrentInfo->mName.c_str(), type,
- mCurrentInfo->mIsEncoder ? "encoder" : "decoder");
- return UNKNOWN_ERROR;
}
- return mCurrentInfo->setCapabilitiesFromCodec(caps);
+ return mCurrentInfo->initializeCapabilities(caps);
}
status_t MediaCodecList::addQuirk(const char **attrs) {