Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.media; | 5 package org.chromium.media; |
| 6 | 6 |
| 7 import android.media.AudioFormat; | 7 import android.media.AudioFormat; |
| 8 import android.media.AudioManager; | 8 import android.media.AudioManager; |
| 9 import android.media.AudioTrack; | 9 import android.media.AudioTrack; |
| 10 import android.media.MediaCodec; | 10 import android.media.MediaCodec; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 215 private static MediaCodecBridge create(String mime, boolean isSecure, int di rection) { | 215 private static MediaCodecBridge create(String mime, boolean isSecure, int di rection) { |
| 216 // Creation of ".secure" codecs sometimes crash instead of throwing exce ptions | 216 // Creation of ".secure" codecs sometimes crash instead of throwing exce ptions |
| 217 // on pre-JBMR2 devices. | 217 // on pre-JBMR2 devices. |
| 218 if (isSecure && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_M R2) { | 218 if (isSecure && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_M R2) { |
| 219 return null; | 219 return null; |
| 220 } | 220 } |
| 221 MediaCodec mediaCodec = null; | 221 MediaCodec mediaCodec = null; |
| 222 boolean adaptivePlaybackSupported = false; | 222 boolean adaptivePlaybackSupported = false; |
| 223 try { | 223 try { |
| 224 // |isSecure| only applies to video decoders. | 224 // |isSecure| only applies to video decoders. |
| 225 if (mime.startsWith("video") && isSecure && direction == MEDIA_CODEC _DECODER) { | 225 if (mime.startsWith("video") && direction == MEDIA_CODEC_DECODER) { |
| 226 String decoderName = getDecoderNameForMime(mime); | 226 String decoderName = getDecoderNameForMime(mime); |
| 227 if (decoderName == null) { | 227 if (decoderName == null) { |
| 228 return null; | 228 return null; |
| 229 } | 229 } |
| 230 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | 230 if (isSecure) { |
| 231 // To work around an issue that we cannot get the codec info from the secure | 231 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
| 232 // decoder, create an insecure decoder first so that we can query its codec | 232 // To work around an issue that we cannot get the code c info from the |
| 233 // info. http://b/15587335. | 233 // secure decoder, create an insecure decoder first so that we can query |
| 234 MediaCodec insecureCodec = MediaCodec.createByCodecName(deco derName); | 234 // its codec info. http://b/15587335. |
| 235 adaptivePlaybackSupported = codecSupportsAdaptivePlayback(in secureCodec, mime); | 235 MediaCodec insecureCodec = MediaCodec.createByCodecNam e(decoderName); |
| 236 insecureCodec.release(); | 236 adaptivePlaybackSupported = |
| 237 codecSupportsAdaptivePlayback(insecureCodec, m ime); | |
| 238 insecureCodec.release(); | |
| 239 } | |
| 240 mediaCodec = MediaCodec.createByCodecName(decoderName + ".se cure"); | |
| 241 } else { | |
| 242 mediaCodec = MediaCodec.createByCodecName(decoderName); | |
|
qinmin
2014/09/26 05:00:28
Are you sure this will not cause any other issues?
AlexGlaznev
2014/09/26 18:01:37
No, I am not 100% sure. But I know, that current w
qinmin
2014/09/26 22:45:55
Can you explain why CreateDecoderByType() will end
| |
| 243 adaptivePlaybackSupported = codecSupportsAdaptivePlayback(me diaCodec, mime); | |
| 237 } | 244 } |
| 238 mediaCodec = MediaCodec.createByCodecName(decoderName + ".secure "); | |
| 239 } else { | 245 } else { |
| 240 if (direction == MEDIA_CODEC_ENCODER) { | 246 if (direction == MEDIA_CODEC_ENCODER) { |
| 241 mediaCodec = MediaCodec.createEncoderByType(mime); | 247 mediaCodec = MediaCodec.createEncoderByType(mime); |
| 242 } else { | 248 } else { |
| 243 mediaCodec = MediaCodec.createDecoderByType(mime); | 249 mediaCodec = MediaCodec.createDecoderByType(mime); |
| 244 adaptivePlaybackSupported = codecSupportsAdaptivePlayback(me diaCodec, mime); | 250 adaptivePlaybackSupported = codecSupportsAdaptivePlayback(me diaCodec, mime); |
| 245 } | 251 } |
| 246 } | 252 } |
| 247 } catch (Exception e) { | 253 } catch (Exception e) { |
| 248 Log.e(TAG, "Failed to create MediaCodec: " + mime + ", isSecure: " | 254 Log.e(TAG, "Failed to create MediaCodec: " + mime + ", isSecure: " |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 641 return AudioFormat.CHANNEL_OUT_QUAD; | 647 return AudioFormat.CHANNEL_OUT_QUAD; |
| 642 case 6: | 648 case 6: |
| 643 return AudioFormat.CHANNEL_OUT_5POINT1; | 649 return AudioFormat.CHANNEL_OUT_5POINT1; |
| 644 case 8: | 650 case 8: |
| 645 return AudioFormat.CHANNEL_OUT_7POINT1; | 651 return AudioFormat.CHANNEL_OUT_7POINT1; |
| 646 default: | 652 default: |
| 647 return AudioFormat.CHANNEL_OUT_DEFAULT; | 653 return AudioFormat.CHANNEL_OUT_DEFAULT; |
| 648 } | 654 } |
| 649 } | 655 } |
| 650 } | 656 } |
| OLD | NEW |