summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2015-04-21 14:23:06 -0700
committerRonghua Wu <ronghuawu@google.com>2015-05-08 09:51:26 -0700
commit9ba21b9418d10ddcc39f08901e24fbf43d82b2bc (patch)
tree363f0598085516cf16ddd4ee5df2d1043e2955da /media
parentba21a9ac7b6b76f85681cfb5e756e947c0ae3b53 (diff)
downloadframeworks_av-9ba21b9418d10ddcc39f08901e24fbf43d82b2bc.zip
frameworks_av-9ba21b9418d10ddcc39f08901e24fbf43d82b2bc.tar.gz
frameworks_av-9ba21b9418d10ddcc39f08901e24fbf43d82b2bc.tar.bz2
libstagefright: config resource manager with secure codec co-existing policy.
Bug: 19620911 Change-Id: I0d729782c1622f23e9c37b7a9231e58e3f807470
Diffstat (limited to 'media')
-rw-r--r--media/libmedia/MediaResourcePolicy.cpp10
-rw-r--r--media/libstagefright/MediaCodecList.cpp21
-rw-r--r--media/libstagefright/MediaCodecListOverrides.cpp15
-rw-r--r--media/libstagefright/MediaCodecListOverrides.h3
-rw-r--r--media/libstagefright/tests/MediaCodecListOverrides_test.cpp4
5 files changed, 43 insertions, 10 deletions
diff --git a/media/libmedia/MediaResourcePolicy.cpp b/media/libmedia/MediaResourcePolicy.cpp
index 139a38c..5210825 100644
--- a/media/libmedia/MediaResourcePolicy.cpp
+++ b/media/libmedia/MediaResourcePolicy.cpp
@@ -24,25 +24,25 @@ namespace android {
const char kPolicySupportsMultipleSecureCodecs[] = "supports-multiple-secure-codecs";
const char kPolicySupportsSecureWithNonSecureCodec[] = "supports-secure-with-non-secure-codec";
-MediaResourcePolicy::MediaResourcePolicy() : mValue(0) {}
+MediaResourcePolicy::MediaResourcePolicy() {}
-MediaResourcePolicy::MediaResourcePolicy(String8 type, uint64_t value)
+MediaResourcePolicy::MediaResourcePolicy(String8 type, String8 value)
: mType(type),
mValue(value) {}
void MediaResourcePolicy::readFromParcel(const Parcel &parcel) {
mType = parcel.readString8();
- mValue = parcel.readUint64();
+ mValue = parcel.readString8();
}
void MediaResourcePolicy::writeToParcel(Parcel *parcel) const {
parcel->writeString8(mType);
- parcel->writeUint64(mValue);
+ parcel->writeString8(mValue);
}
String8 MediaResourcePolicy::toString() const {
String8 str;
- str.appendFormat("%s:%llu", mType.string(), (unsigned long long)mValue);
+ str.appendFormat("%s:%s", mType.string(), mValue.string());
return str;
}
diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp
index e212fb8..d2352bc 100644
--- a/media/libstagefright/MediaCodecList.cpp
+++ b/media/libstagefright/MediaCodecList.cpp
@@ -24,7 +24,9 @@
#include <media/IMediaCodecList.h>
#include <media/IMediaPlayerService.h>
+#include <media/IResourceManagerService.h>
#include <media/MediaCodecInfo.h>
+#include <media/MediaResourcePolicy.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -171,6 +173,25 @@ void MediaCodecList::parseTopLevelXMLFile(const char *codecs_xml, bool ignore_er
return;
}
+ Vector<MediaResourcePolicy> policies;
+ AString value;
+ if (mGlobalSettings->findString(kPolicySupportsMultipleSecureCodecs, &value)) {
+ policies.push_back(
+ MediaResourcePolicy(
+ String8(kPolicySupportsMultipleSecureCodecs),
+ String8(value.c_str())));
+ }
+ if (policies.size() > 0) {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IBinder> binder = sm->getService(String16("media.resource_manager"));
+ sp<IResourceManagerService> service = interface_cast<IResourceManagerService>(binder);
+ if (service == NULL) {
+ ALOGE("MediaCodecList: failed to get ResourceManagerService");
+ } else {
+ service->config(policies);
+ }
+ }
+
for (size_t i = mCodecInfos.size(); i-- > 0;) {
const MediaCodecInfo &info = *mCodecInfos.itemAt(i).get();
if (info.mCaps.size() == 0) {
diff --git a/media/libstagefright/MediaCodecListOverrides.cpp b/media/libstagefright/MediaCodecListOverrides.cpp
index 535db09..0d95676 100644
--- a/media/libstagefright/MediaCodecListOverrides.cpp
+++ b/media/libstagefright/MediaCodecListOverrides.cpp
@@ -24,7 +24,7 @@
#include <media/ICrypto.h>
#include <media/IMediaCodecList.h>
#include <media/MediaCodecInfo.h>
-
+#include <media/MediaResourcePolicy.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/MediaCodec.h>
@@ -196,19 +196,21 @@ bool splitString(
}
void profileCodecs(const Vector<sp<MediaCodecInfo>> &infos) {
- CodecSettings global_results; // TODO: add global results.
+ CodecSettings global_results;
KeyedVector<AString, CodecSettings> encoder_results;
KeyedVector<AString, CodecSettings> decoder_results;
- profileCodecs(infos, &encoder_results, &decoder_results);
+ profileCodecs(infos, &global_results, &encoder_results, &decoder_results);
exportResultsToXML(kProfilingResults, global_results, encoder_results, decoder_results);
}
void profileCodecs(
const Vector<sp<MediaCodecInfo>> &infos,
+ CodecSettings *global_results,
KeyedVector<AString, CodecSettings> *encoder_results,
KeyedVector<AString, CodecSettings> *decoder_results,
bool forceToMeasure) {
KeyedVector<AString, sp<MediaCodecInfo::Capabilities>> codecsNeedMeasure;
+ AString supportMultipleSecureCodecs = "true";
for (size_t i = 0; i < infos.size(); ++i) {
const sp<MediaCodecInfo> info = infos[i];
AString name = info->getCodecName();
@@ -243,9 +245,16 @@ void profileCodecs(
} else {
decoder_results->add(key, settings);
}
+
+ if (name.endsWith(".secure")) {
+ if (max <= 1) {
+ supportMultipleSecureCodecs = "false";
+ }
+ }
}
}
}
+ global_results->add(kPolicySupportsMultipleSecureCodecs, supportMultipleSecureCodecs);
}
static AString globalResultsToXml(const CodecSettings& results) {
diff --git a/media/libstagefright/MediaCodecListOverrides.h b/media/libstagefright/MediaCodecListOverrides.h
index c4758fa..e350d2a 100644
--- a/media/libstagefright/MediaCodecListOverrides.h
+++ b/media/libstagefright/MediaCodecListOverrides.h
@@ -35,9 +35,10 @@ bool splitString(const AString &s, const AString &delimiter, AString *s1, AStrin
// profile codecs and save the result to xml file named kProfilingResults.
void profileCodecs(const Vector<sp<MediaCodecInfo>> &infos);
-// profile codecs and save the result to encoder_results and decoder_results.
+// profile codecs and save the result to global_results, encoder_results and decoder_results.
void profileCodecs(
const Vector<sp<MediaCodecInfo>> &infos,
+ CodecSettings *global_results,
KeyedVector<AString, CodecSettings> *encoder_results,
KeyedVector<AString, CodecSettings> *decoder_results,
bool forceToMeasure = false);
diff --git a/media/libstagefright/tests/MediaCodecListOverrides_test.cpp b/media/libstagefright/tests/MediaCodecListOverrides_test.cpp
index 146a244..cee62a3 100644
--- a/media/libstagefright/tests/MediaCodecListOverrides_test.cpp
+++ b/media/libstagefright/tests/MediaCodecListOverrides_test.cpp
@@ -121,9 +121,11 @@ TEST_F(MediaCodecListOverridesTest, DISABLED_profileCodecs) {
for (size_t i = 0; i < list->countCodecs(); ++i) {
infos.push_back(list->getCodecInfo(i));
}
+ CodecSettings global_results;
KeyedVector<AString, CodecSettings> encoder_results;
KeyedVector<AString, CodecSettings> decoder_results;
- profileCodecs(infos, &encoder_results, &decoder_results, true /* forceToMeasure */);
+ profileCodecs(
+ infos, &global_results, &encoder_results, &decoder_results, true /* forceToMeasure */);
verifyProfileResults(encoder_results);
verifyProfileResults(decoder_results);
}