From dbf1552d526e62859e7a40cfea8e68b614a7d413 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Thu, 28 Aug 2014 06:39:01 -0700 Subject: [PATCH] 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 --- media/java/android/media/MediaCodec.java | 3 +-- media/java/android/media/MediaCodecInfo.java | 14 ++++++++------ media/java/android/media/MediaCodecList.java | 5 +++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 032f07f116463..de2f2fdf41913 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -1619,8 +1619,7 @@ final public class MediaCodec { * @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 323a3e33a91f5..baf6e5afb5b51 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -321,6 +321,9 @@ public final class MediaCodecInfo { // 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 @@ public final class MediaCodecInfo { 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 5084c5cf6adff..85e9b1654a65d 100644 --- a/media/java/android/media/MediaCodecList.java +++ b/media/java/android/media/MediaCodecList.java @@ -116,6 +116,11 @@ final public class MediaCodecList { /* 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(); /**