media: avoid NPE in CodecCapabilities.createFromProfileLevel
Bug: 28980577
Change-Id: Id020ed350e2a16b7772e05bd6a10235481903b40
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 349d67e..95ce9b7 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -745,6 +745,9 @@
* 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.
+ * <p class=note> 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}.</p>
*/
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 cd7b3d3..42ce511 100644
--- a/media/java/android/media/MediaCodecList.java
+++ b/media/java/android/media/MediaCodecList.java
@@ -63,6 +63,11 @@
}
/* package private */ static final Map<String, Object> getGlobalSettings() {
+ synchronized (sInitLock) {
+ if (sGlobalSettings == null) {
+ sGlobalSettings = native_getGlobalSettings();
+ }
+ }
return sGlobalSettings;
}
@@ -74,7 +79,6 @@
private static final void initCodecList() {
synchronized (sInitLock) {
if (sRegularCodecInfos == null) {
- sGlobalSettings = native_getGlobalSettings();
int count = native_getCodecCount();
ArrayList<MediaCodecInfo> regulars = new ArrayList<MediaCodecInfo>();
ArrayList<MediaCodecInfo> all = new ArrayList<MediaCodecInfo>();