Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: media/base/android/media_codec_bridge.cc

Issue 23480036: Support creating secure decoder in MediaCodecBridge. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include "media/base/android/media_codec_bridge.h" 5 #include "media/base/android/media_codec_bridge.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <string> 8 #include <string>
9 9
10 #include "base/android/build_info.h" 10 #include "base/android/build_info.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 // static 81 // static
82 bool MediaCodecBridge::CanDecode(const std::string& codec, bool is_secure) { 82 bool MediaCodecBridge::CanDecode(const std::string& codec, bool is_secure) {
83 JNIEnv* env = AttachCurrentThread(); 83 JNIEnv* env = AttachCurrentThread();
84 std::string mime = CodecTypeToMimeType(codec); 84 std::string mime = CodecTypeToMimeType(codec);
85 if (mime.empty()) 85 if (mime.empty())
86 return false; 86 return false;
87 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime); 87 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime);
88 return !Java_MediaCodecBridge_create(env, j_mime.obj(), is_secure).is_null(); 88 return !Java_MediaCodecBridge_create(env, j_mime.obj(), is_secure).is_null();
89 } 89 }
90 90
91 // TODO(xhwang): Support creating secure MediaCodecBridge. 91 MediaCodecBridge::MediaCodecBridge(const std::string& mime, bool is_secure) {
92 MediaCodecBridge::MediaCodecBridge(const std::string& mime) {
93 JNIEnv* env = AttachCurrentThread(); 92 JNIEnv* env = AttachCurrentThread();
94 CHECK(env); 93 CHECK(env);
95 94
96 DCHECK(!mime.empty()); 95 DCHECK(!mime.empty());
97 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime); 96 ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime);
98 j_media_codec_.Reset(Java_MediaCodecBridge_create(env, j_mime.obj(), false)); 97 j_media_codec_.Reset(
98 Java_MediaCodecBridge_create(env, j_mime.obj(), is_secure));
99 } 99 }
100 100
101 MediaCodecBridge::~MediaCodecBridge() { 101 MediaCodecBridge::~MediaCodecBridge() {
102 JNIEnv* env = AttachCurrentThread(); 102 JNIEnv* env = AttachCurrentThread();
103 CHECK(env); 103 CHECK(env);
104 if (j_media_codec_.obj()) 104 if (j_media_codec_.obj())
105 Java_MediaCodecBridge_release(env, j_media_codec_.obj()); 105 Java_MediaCodecBridge_release(env, j_media_codec_.obj());
106 } 106 }
107 107
108 void MediaCodecBridge::StartInternal() { 108 void MediaCodecBridge::StartInternal() {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 // TODO(qinmin): Handling the case that not all the data can be copied. 254 // TODO(qinmin): Handling the case that not all the data can be copied.
255 DCHECK(size_to_copy == size) << 255 DCHECK(size_to_copy == size) <<
256 "Failed to fill all the data into the input buffer. Size to fill: " 256 "Failed to fill all the data into the input buffer. Size to fill: "
257 << size << ". Size filled: " << size_to_copy; 257 << size << ". Size filled: " << size_to_copy;
258 if (size_to_copy > 0) 258 if (size_to_copy > 0)
259 memcpy(direct_buffer, data, size_to_copy); 259 memcpy(direct_buffer, data, size_to_copy);
260 return size_to_copy; 260 return size_to_copy;
261 } 261 }
262 262
263 AudioCodecBridge::AudioCodecBridge(const std::string& mime) 263 AudioCodecBridge::AudioCodecBridge(const std::string& mime)
264 : MediaCodecBridge(mime) { 264 // Audio codec doesn't care about security level.
265 : MediaCodecBridge(mime, false) {
265 } 266 }
266 267
267 bool AudioCodecBridge::Start( 268 bool AudioCodecBridge::Start(
268 const AudioCodec codec, int sample_rate, int channel_count, 269 const AudioCodec codec, int sample_rate, int channel_count,
269 const uint8* extra_data, size_t extra_data_size, bool play_audio, 270 const uint8* extra_data, size_t extra_data_size, bool play_audio,
270 jobject media_crypto) { 271 jobject media_crypto) {
271 JNIEnv* env = AttachCurrentThread(); 272 JNIEnv* env = AttachCurrentThread();
272 273
273 if (!media_codec()) 274 if (!media_codec())
274 return false; 275 return false;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 base::android::ToJavaByteArray(env, buffer, numBytes); 413 base::android::ToJavaByteArray(env, buffer, numBytes);
413 Java_MediaCodecBridge_playOutputBuffer( 414 Java_MediaCodecBridge_playOutputBuffer(
414 env, media_codec(), byte_array.obj()); 415 env, media_codec(), byte_array.obj());
415 } 416 }
416 417
417 void AudioCodecBridge::SetVolume(double volume) { 418 void AudioCodecBridge::SetVolume(double volume) {
418 JNIEnv* env = AttachCurrentThread(); 419 JNIEnv* env = AttachCurrentThread();
419 Java_MediaCodecBridge_setVolume(env, media_codec(), volume); 420 Java_MediaCodecBridge_setVolume(env, media_codec(), volume);
420 } 421 }
421 422
422 VideoCodecBridge::VideoCodecBridge(const std::string& mime) 423 VideoCodecBridge::VideoCodecBridge(const std::string& mime, bool is_secure)
423 : MediaCodecBridge(mime) { 424 : MediaCodecBridge(mime, is_secure) {
424 } 425 }
425 426
426 bool VideoCodecBridge::Start( 427 bool VideoCodecBridge::Start(
427 const VideoCodec codec, const gfx::Size& size, jobject surface, 428 const VideoCodec codec, const gfx::Size& size, jobject surface,
428 jobject media_crypto) { 429 jobject media_crypto) {
429 JNIEnv* env = AttachCurrentThread(); 430 JNIEnv* env = AttachCurrentThread();
430 431
431 if (!media_codec()) 432 if (!media_codec())
432 return false; 433 return false;
433 434
(...skipping 13 matching lines...) Expand all
447 } 448 }
448 StartInternal(); 449 StartInternal();
449 return true; 450 return true;
450 } 451 }
451 452
452 AudioCodecBridge* AudioCodecBridge::Create(const AudioCodec codec) { 453 AudioCodecBridge* AudioCodecBridge::Create(const AudioCodec codec) {
453 const std::string mime = AudioCodecToMimeType(codec); 454 const std::string mime = AudioCodecToMimeType(codec);
454 return mime.empty() ? NULL : new AudioCodecBridge(mime); 455 return mime.empty() ? NULL : new AudioCodecBridge(mime);
455 } 456 }
456 457
457 VideoCodecBridge* VideoCodecBridge::Create(const VideoCodec codec) { 458 VideoCodecBridge* VideoCodecBridge::Create(const VideoCodec codec,
459 bool is_secure) {
458 const std::string mime = VideoCodecToMimeType(codec); 460 const std::string mime = VideoCodecToMimeType(codec);
459 return mime.empty() ? NULL : new VideoCodecBridge(mime); 461 return mime.empty() ? NULL : new VideoCodecBridge(mime, is_secure);
460 } 462 }
461 463
462 bool MediaCodecBridge::RegisterMediaCodecBridge(JNIEnv* env) { 464 bool MediaCodecBridge::RegisterMediaCodecBridge(JNIEnv* env) {
463 return RegisterNativesImpl(env); 465 return RegisterNativesImpl(env);
464 } 466 }
465 467
466 } // namespace media 468 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698