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..9e261c7b2aeedcd3dfa78392b91202c4c3984b9e 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 mediaCodec) { |
+ assert(mediaCodec != null); |
+ mMediaCodec = mediaCodec; |
mLastPresentationTimeUs = 0; |
mFlushed = true; |
} |
@CalledByNative |
- private static MediaCodecBridge create(String mime) { |
- MediaCodecBridge mediaCodecBridge = null; |
+ private static MediaCodecBridge create(String mime, boolean secure) { |
qinmin
2013/08/28 18:39:59
nit: s/secure/isSecure/
xhwang
2013/08/30 05:32:38
Done.
|
+ MediaCodec mediaCodec = null; |
try { |
- mediaCodecBridge = new MediaCodecBridge(mime); |
- } catch (IOException e) { |
- Log.e(TAG, "Failed to create MediaCodecBridge " + e.toString()); |
+ if (secure) { |
+ mediaCodec = MediaCodec.createByCodecName(getSecureDecoderNameForMime(mime)); |
+ } else { |
+ mediaCodec = MediaCodec.createDecoderByType(mime); |
+ } |
+ } catch (Exception e) { |
+ Log.e(TAG, "Failed to create MediaCodec " + e.toString()); |
+ } |
+ |
+ if (mediaCodec == null) { |
+ return null; |
} |
- return mediaCodecBridge; |
+ return new MediaCodecBridge(mediaCodec); |
} |
@CalledByNative |