Chromium Code Reviews| 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..1aaa09c8f20898a66cb09191733447b52a10e1a4 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. |
|
wjia(left Chromium)
2013/11/06 02:23:27
Could you add the bug link here? Just for others'
|
| + 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( |