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 b1580d17dca91fec24575c2e8374523e76fe3443..8e7af583cc9e79276df4bb7546ea400cbb99982e 100644 |
| --- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| +++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
| @@ -8,6 +8,8 @@ import android.media.AudioFormat; |
| import android.media.AudioManager; |
| import android.media.AudioTrack; |
| import android.media.MediaCodec; |
| +import android.media.MediaCodecInfo; |
| +import android.media.MediaCodecList; |
| import android.media.MediaCrypto; |
| import android.media.MediaFormat; |
| import android.view.Surface; |
| @@ -80,22 +82,50 @@ class MediaCodecBridge { |
| private int numBytes() { return mNumBytes; } |
| } |
| - private MediaCodecBridge(String mime) throws IOException { |
| - mMediaCodec = MediaCodec.createDecoderByType(mime); |
| + private static String getSecureDecoderNameForMime(String mime) { |
| + int count = MediaCodecList.getCodecCount(); |
| + for (int i = 0; i < count; ++i) { |
| + MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i); |
| + if (info.isEncoder()) { |
| + continue; |
| + } |
| + |
| + String[] supportedTypes = info.getSupportedTypes(); |
| + for (int j = 0; j < supportedTypes.length; ++j) { |
| + if (supportedTypes[j].equalsIgnoreCase(mime)) { |
| + return info.getName() + ".secure"; |
| + } |
| + } |
| + } |
| + |
| + return null; |
| + } |
| + |
| + private MediaCodecBridge(MediaCodec media_codec) { |
| + assert(media_codec != null); |
| + mMediaCodec = media_codec; |
| mLastPresentationTimeUs = 0; |
| mFlushed = true; |
| } |
| @CalledByNative |
| - private static MediaCodecBridge create(String mime) { |
| - MediaCodecBridge mediaCodecBridge = null; |
| + private static MediaCodecBridge create(String mime, boolean secure) { |
| + MediaCodec media_codec = null; |
|
qinmin
2013/08/27 21:41:12
java coding style use camelCase
xhwang
2013/08/28 01:21:24
Done.
|
| try { |
| - mediaCodecBridge = new MediaCodecBridge(mime); |
| - } catch (IOException e) { |
| - Log.e(TAG, "Failed to create MediaCodecBridge " + e.toString()); |
| + if (secure) { |
| + media_codec = MediaCodec.createByCodecName(getSecureDecoderNameForMime(mime)); |
| + } else { |
| + media_codec = MediaCodec.createDecoderByType(mime); |
| + } |
| + } catch (Exception e) { |
|
qinmin
2013/08/27 21:41:12
use specific exception type
xhwang
2013/08/28 01:21:24
Well this is complicated. The old code assumes Med
|
| + Log.e(TAG, "Failed to create MediaCodec " + e.toString()); |
| + } |
| + |
| + if (media_codec == null) { |
| + return null; |
| } |
| - return mediaCodecBridge; |
| + return new MediaCodecBridge(media_codec); |
| } |
| @CalledByNative |