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 |