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

Unified Diff: media/base/android/media_codec_bridge.cc

Issue 23517002: MediaSourcePlayer implements IsTypeSupported(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: media/base/android/media_codec_bridge.cc
diff --git a/media/base/android/media_codec_bridge.cc b/media/base/android/media_codec_bridge.cc
index bb5ddccfd7e5a239961ba4761ee8903da0a84e56..cc73f700cfe8e271b42c3979446f7020eb6eec02 100644
--- a/media/base/android/media_codec_bridge.cc
+++ b/media/base/android/media_codec_bridge.cc
@@ -5,6 +5,7 @@
#include "media/base/android/media_codec_bridge.h"
#include <jni.h>
+#include <string>
#include "base/android/build_info.h"
#include "base/android/jni_android.h"
@@ -27,7 +28,7 @@ namespace media {
enum { kBufferFlagEndOfStream = 4 };
-static const char* AudioCodecToMimeType(const AudioCodec codec) {
+static const std::string AudioCodecToMimeType(const AudioCodec codec) {
switch (codec) {
case kCodecMP3:
return "audio/mpeg";
@@ -36,18 +37,18 @@ static const char* AudioCodecToMimeType(const AudioCodec codec) {
case kCodecAAC:
return "audio/mp4a-latm";
default:
- return NULL;
+ return "";
ddorwin 2013/08/28 02:28:50 std::string()
xhwang 2013/08/28 18:19:15 Done.
}
}
-static const char* VideoCodecToMimeType(const VideoCodec codec) {
+static const std::string VideoCodecToMimeType(const VideoCodec codec) {
switch (codec) {
case kCodecH264:
return "video/avc";
case kCodecVP8:
return "video/x-vnd.on2.vp8";
default:
- return NULL;
+ return "";
}
}
@@ -72,14 +73,22 @@ bool MediaCodecBridge::IsAvailable() {
return base::android::BuildInfo::GetInstance()->sdk_int() >= 16;
}
-MediaCodecBridge::MediaCodecBridge(const char* mime) {
+// static
+bool MediaCodecBridge::IsDecoderSupported(const std::string& mime,
+ bool secure) {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime);
+ return !Java_MediaCodecBridge_create(env, j_mime.obj(), secure).is_null();
+}
+
+// TODO(xhwang): Support creating secure MediaCodecBridge.
+MediaCodecBridge::MediaCodecBridge(const std::string& mime) {
JNIEnv* env = AttachCurrentThread();
CHECK(env);
- DCHECK(mime);
- ScopedJavaLocalRef<jstring> j_type = ConvertUTF8ToJavaString(env, mime);
- j_media_codec_.Reset(Java_MediaCodecBridge_create(
- env, j_type.obj()));
+ DCHECK(!mime.empty());
+ ScopedJavaLocalRef<jstring> j_mime = ConvertUTF8ToJavaString(env, mime);
+ j_media_codec_.Reset(Java_MediaCodecBridge_create(env, j_mime.obj(), false));
}
MediaCodecBridge::~MediaCodecBridge() {
@@ -227,7 +236,7 @@ size_t MediaCodecBridge::FillInputBuffer(
return size_to_copy;
}
-AudioCodecBridge::AudioCodecBridge(const char* mime)
+AudioCodecBridge::AudioCodecBridge(const std::string& mime)
: MediaCodecBridge(mime) {
}
@@ -236,13 +245,14 @@ bool AudioCodecBridge::Start(
const uint8* extra_data, size_t extra_data_size, bool play_audio,
jobject media_crypto) {
JNIEnv* env = AttachCurrentThread();
- DCHECK(AudioCodecToMimeType(codec));
if (!media_codec())
return false;
+ std::string codec_string = AudioCodecToMimeType(codec);
+ DCHECK(!codec_string.empty());
ddorwin 2013/08/28 02:28:50 Who calls Start()? Are we sure invalid types won't
xhwang 2013/08/28 18:19:15 Good point. It comes from renderer. So we could hi
ScopedJavaLocalRef<jstring> j_mime =
- ConvertUTF8ToJavaString(env, AudioCodecToMimeType(codec));
+ ConvertUTF8ToJavaString(env, codec_string);
ScopedJavaLocalRef<jobject> j_format(
Java_MediaCodecBridge_createAudioFormat(
env, j_mime.obj(), sample_rate, channel_count));
@@ -255,6 +265,7 @@ bool AudioCodecBridge::Start(
env, media_codec(), j_format.obj(), media_crypto, 0, play_audio)) {
return false;
}
+
StartInternal();
return true;
}
@@ -382,7 +393,7 @@ void AudioCodecBridge::SetVolume(double volume) {
Java_MediaCodecBridge_setVolume(env, media_codec(), volume);
}
-VideoCodecBridge::VideoCodecBridge(const char* mime)
+VideoCodecBridge::VideoCodecBridge(const std::string& mime)
: MediaCodecBridge(mime) {
}
@@ -390,13 +401,14 @@ bool VideoCodecBridge::Start(
const VideoCodec codec, const gfx::Size& size, jobject surface,
jobject media_crypto) {
JNIEnv* env = AttachCurrentThread();
- DCHECK(VideoCodecToMimeType(codec));
if (!media_codec())
return false;
+ std::string codec_string = VideoCodecToMimeType(codec);
+ DCHECK(!codec_string.empty());
ScopedJavaLocalRef<jstring> j_mime =
- ConvertUTF8ToJavaString(env, VideoCodecToMimeType(codec));
+ ConvertUTF8ToJavaString(env, codec_string);
ScopedJavaLocalRef<jobject> j_format(
Java_MediaCodecBridge_createVideoFormat(
env, j_mime.obj(), size.width(), size.height()));
@@ -410,13 +422,13 @@ bool VideoCodecBridge::Start(
}
AudioCodecBridge* AudioCodecBridge::Create(const AudioCodec codec) {
- const char* mime = AudioCodecToMimeType(codec);
- return mime ? new AudioCodecBridge(mime) : NULL;
+ const std::string mime = AudioCodecToMimeType(codec);
+ return mime.empty() ? NULL: new AudioCodecBridge(mime);
ddorwin 2013/08/28 02:28:50 space before ':' below too
xhwang 2013/08/28 18:19:15 Done.
}
VideoCodecBridge* VideoCodecBridge::Create(const VideoCodec codec) {
- const char* mime = VideoCodecToMimeType(codec);
- return mime ? new VideoCodecBridge(mime) : NULL;
+ const std::string mime = VideoCodecToMimeType(codec);
+ return mime.empty() ? NULL: new VideoCodecBridge(mime);
}
bool MediaCodecBridge::RegisterMediaCodecBridge(JNIEnv* env) {

Powered by Google App Engine
This is Rietveld 408576698