From 0d8337c3143867f51a52814830b0dd48535338b7 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Thu, 26 May 2016 11:15:57 -0700 Subject: [PATCH] media: avoid NPE in CodecCapabilities.createFromProfileLevel Bug: 28980577 Change-Id: Id020ed350e2a16b7772e05bd6a10235481903b40 --- media/java/android/media/MediaCodecInfo.java | 3 +++ media/java/android/media/MediaCodecList.java | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java index 349d67ec91459..95ce9b77b9f3a 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -745,6 +745,9 @@ public final class MediaCodecInfo { * Retrieve the codec capabilities for a certain {@code mime type}, {@code * profile} and {@code level}. If the type, or profile-level combination * is not understood by the framework, it returns null. + *

In {@link android.os.Build.VERSION_CODES#M}, calling this + * method without calling any method of the {@link MediaCodecList} class beforehand + * results in a {@link NullPointerException}.

*/ public static CodecCapabilities createFromProfileLevel( String mime, int profile, int level) { diff --git a/media/java/android/media/MediaCodecList.java b/media/java/android/media/MediaCodecList.java index cd7b3d35a5907..42ce5110f134b 100644 --- a/media/java/android/media/MediaCodecList.java +++ b/media/java/android/media/MediaCodecList.java @@ -63,6 +63,11 @@ final public class MediaCodecList { } /* package private */ static final Map getGlobalSettings() { + synchronized (sInitLock) { + if (sGlobalSettings == null) { + sGlobalSettings = native_getGlobalSettings(); + } + } return sGlobalSettings; } @@ -74,7 +79,6 @@ final public class MediaCodecList { private static final void initCodecList() { synchronized (sInitLock) { if (sRegularCodecInfos == null) { - sGlobalSettings = native_getGlobalSettings(); int count = native_getCodecCount(); ArrayList regulars = new ArrayList(); ArrayList all = new ArrayList();