Index: media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
index 74bec56745e80833f653dc3a06a9b248c24638bf..b240fc4a0713be19b5e830787d6cef20316e8540 100644 |
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
@@ -12,8 +12,9 @@ import android.media.MediaCodecInfo; |
import android.media.MediaCodecList; |
import android.media.MediaCrypto; |
import android.media.MediaFormat; |
-import android.view.Surface; |
+import android.os.Build; |
import android.util.Log; |
+import android.view.Surface; |
import java.io.IOException; |
import java.nio.ByteBuffer; |
@@ -151,17 +152,25 @@ class MediaCodecBridge { |
continue; |
} |
- String[] supportedTypes = info.getSupportedTypes(); |
- String codecString = info.getName(); |
- String secureCodecName = codecString + ".secure"; |
boolean secureDecoderSupported = false; |
- try { |
- MediaCodec secureCodec = MediaCodec.createByCodecName(secureCodecName); |
- secureDecoderSupported = true; |
- secureCodec.release(); |
- } catch (Exception e) { |
- Log.e(TAG, "Failed to create " + secureCodecName); |
+ String codecString = info.getName(); |
+ // ".secure" codecs sometimes crash instead of throwing on pre-JBMR2 |
+ // platforms, but this code isn't run on them anyway (MediaDrm |
+ // unavailable) so we side-step the issue. http://crbug.com/314868 |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
+ String secureCodecName = codecString + ".secure"; |
+ try { |
+ MediaCodec secureCodec = MediaCodec.createByCodecName(secureCodecName); |
+ if (secureCodec != null) { |
+ secureDecoderSupported = true; |
+ secureCodec.release(); |
+ } |
+ } catch (Exception e) { |
+ Log.e(TAG, "Failed to create " + secureCodecName); |
+ } |
} |
+ |
+ String[] supportedTypes = info.getSupportedTypes(); |
for (int j = 0; j < supportedTypes.length; ++j) { |
if (!CodecInfoMap.containsKey(supportedTypes[j]) || secureDecoderSupported) { |
CodecInfoMap.put(supportedTypes[j], new CodecInfo( |