| Index: media/base/android/sdk_media_codec_bridge.cc
|
| diff --git a/media/base/android/sdk_media_codec_bridge.cc b/media/base/android/sdk_media_codec_bridge.cc
|
| index 3247dd8ca859df0bf607f78fca5aa203fc358f95..609370be52d936f569d61d24746a51fff7404923 100644
|
| --- a/media/base/android/sdk_media_codec_bridge.cc
|
| +++ b/media/base/android/sdk_media_codec_bridge.cc
|
| @@ -560,13 +560,16 @@ bool VideoCodecBridge::IsKnownUnaccelerated(const VideoCodec& codec,
|
| }
|
|
|
| // static
|
| -VideoCodecBridge* VideoCodecBridge::CreateDecoder(const VideoCodec& codec,
|
| - bool is_secure,
|
| - const gfx::Size& size,
|
| - jobject surface,
|
| - jobject media_crypto,
|
| - bool allow_adaptive_playback,
|
| - bool require_software_codec) {
|
| +VideoCodecBridge* VideoCodecBridge::CreateDecoder(
|
| + const VideoCodec& codec,
|
| + bool is_secure,
|
| + const gfx::Size& size,
|
| + jobject surface,
|
| + jobject media_crypto,
|
| + const std::vector<uint8_t>& csd0,
|
| + const std::vector<uint8_t>& csd1,
|
| + bool allow_adaptive_playback,
|
| + bool require_software_codec) {
|
| if (!MediaCodecUtil::IsMediaCodecAvailable())
|
| return nullptr;
|
|
|
| @@ -585,6 +588,19 @@ VideoCodecBridge* VideoCodecBridge::CreateDecoder(const VideoCodec& codec,
|
| Java_MediaCodecBridge_createVideoDecoderFormat(env, j_mime, size.width(),
|
| size.height()));
|
| DCHECK(!j_format.is_null());
|
| +
|
| + if (!csd0.empty()) {
|
| + ScopedJavaLocalRef<jbyteArray> j_csd0 =
|
| + base::android::ToJavaByteArray(env, csd0.data(), csd0.size());
|
| + Java_MediaCodecBridge_setCodecSpecificData(env, j_format, 0, j_csd0);
|
| + }
|
| +
|
| + if (!csd1.empty()) {
|
| + ScopedJavaLocalRef<jbyteArray> j_csd1 =
|
| + base::android::ToJavaByteArray(env, csd1.data(), csd1.size());
|
| + Java_MediaCodecBridge_setCodecSpecificData(env, j_format, 1, j_csd1);
|
| + }
|
| +
|
| if (!Java_MediaCodecBridge_configureVideo(env, bridge->media_codec(),
|
| j_format, surface, media_crypto, 0,
|
| allow_adaptive_playback)) {
|
|
|