MediaCodecInfo: allow getting info for secure codec
3 minor fixes:
- return correct codec's info from MediaCodec.getCodecInfo()
- treat required features supported
- make feature spec optional in isFormatSupported
Bug: 17154761
Change-Id: Ie98af35ec16caf48a76358fe178f9cc243abad4f
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 032f07f..de2f2fd 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -1619,8 +1619,7 @@
* @throws IllegalStateException if in the Uninitialized state.
*/
public MediaCodecInfo getCodecInfo() {
- return MediaCodecList.getCodecInfoAt(
- MediaCodecList.findCodecByName(getName()));
+ return MediaCodecList.getInfoFor(getName());
}
private native final ByteBuffer[] getBuffers(boolean input);
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 323a3e3..baf6e5a 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -321,6 +321,9 @@
// check feature support
for (Feature feat: getValidFeatures()) {
Integer yesNo = (Integer)map.get(MediaFormat.KEY_FEATURE_ + feat.mName);
+ if (yesNo == null) {
+ continue;
+ }
if ((yesNo == 1 && !isFeatureSupported(feat.mName)) ||
(yesNo == 0 && isFeatureRequired(feat.mName))) {
return false;
@@ -470,13 +473,12 @@
Integer yesNo = (Integer)map.get(key);
if (yesNo == null) {
continue;
- } else if (yesNo > 0) {
- mFlagsRequired |= feat.mValue;
- mDefaultFormat.setInteger(key, 1);
- } else {
- mFlagsSupported |= feat.mValue;
- mDefaultFormat.setInteger(key, 1);
}
+ if (yesNo > 0) {
+ mFlagsRequired |= feat.mValue;
+ }
+ mFlagsSupported |= feat.mValue;
+ mDefaultFormat.setInteger(key, 1);
// TODO restrict features by mFlagsVerified once all codecs reliably verify them
}
}
diff --git a/media/java/android/media/MediaCodecList.java b/media/java/android/media/MediaCodecList.java
index 5084c5c..85e9b16 100644
--- a/media/java/android/media/MediaCodecList.java
+++ b/media/java/android/media/MediaCodecList.java
@@ -116,6 +116,11 @@
/* package private */ static native final int findCodecByName(String codec);
+ /** @hide */
+ public static MediaCodecInfo getInfoFor(String codec) {
+ return sAllCodecInfos[findCodecByName(codec)];
+ }
+
private static native final void native_init();
/**