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

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

Issue 14932020: Add Create() function to AudioCodecBridge and VideoCodecBridge to allow return of null pointers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove dependency, remove target in another CL Created 7 years, 7 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
« no previous file with comments | « media/base/android/media_codec_bridge.h ('k') | media/base/android/media_codec_bridge_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 37949f48d0237bca29abb5292b70e36fd8f5ff5c..2587fc494d0d062fa8ddeb656e8433ae19338c2a 100644
--- a/media/base/android/media_codec_bridge.cc
+++ b/media/base/android/media_codec_bridge.cc
@@ -17,36 +17,11 @@
#include "base/stringprintf.h"
#include "jni/MediaCodecBridge_jni.h"
-#include "jni/MediaFormat_jni.h"
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
-namespace {
-
-class MediaCodecNativeRegisterer {
- public:
- MediaCodecNativeRegisterer() {
- JNIEnv* env = AttachCurrentThread();
- jni_initialized_ =
- media::RegisterNativesImpl(env) &&
- JNI_MediaFormat::RegisterNativesImpl(env);
- }
-
- bool IsRegistered() {
- return jni_initialized_;
- }
-
- private:
- bool jni_initialized_;
-};
-
-static base::LazyInstance<MediaCodecNativeRegisterer> g_native_registerer =
- LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
namespace media {
enum { kBufferFlagEndOfStream = 4 };
@@ -92,7 +67,6 @@ bool MediaCodecBridge::IsAvailable() {
MediaCodecBridge::MediaCodecBridge(const char* mime) {
JNIEnv* env = AttachCurrentThread();
CHECK(env);
- CHECK(g_native_registerer.Pointer()->IsRegistered());
DCHECK(mime);
ScopedJavaLocalRef<jstring> j_type = ConvertUTF8ToJavaString(env, mime);
@@ -124,19 +98,8 @@ void MediaCodecBridge::Stop() {
void MediaCodecBridge::GetOutputFormat(int* width, int* height) {
JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> j_format(
- Java_MediaCodecBridge_getOutputFormat(env, j_media_codec_.obj()));
- if (!j_format.is_null()) {
- ScopedJavaLocalRef<jstring> j_key_width =
- ConvertUTF8ToJavaString(env, "width");
- *width = JNI_MediaFormat::Java_MediaFormat_getInteger(
- env, j_format.obj(), j_key_width.obj());
-
- ScopedJavaLocalRef<jstring> j_key_height =
- ConvertUTF8ToJavaString(env, "height");
- *height = JNI_MediaFormat::Java_MediaFormat_getInteger(
- env, j_format.obj(), j_key_height.obj());
- }
+ *width = Java_MediaCodecBridge_getOutputWidth(env, j_media_codec_.obj());
+ *height = Java_MediaCodecBridge_getOutputHeight(env, j_media_codec_.obj());
}
size_t MediaCodecBridge::QueueInputBuffer(
@@ -213,8 +176,8 @@ void MediaCodecBridge::GetOutputBuffers() {
Java_MediaCodecBridge_getOutputBuffers(env, j_media_codec_.obj());
}
-AudioCodecBridge::AudioCodecBridge(const AudioCodec codec)
- : MediaCodecBridge(AudioCodecToMimeType(codec)) {
+AudioCodecBridge::AudioCodecBridge(const char* mime)
+ : MediaCodecBridge(mime) {
}
bool AudioCodecBridge::Start(
@@ -226,7 +189,7 @@ bool AudioCodecBridge::Start(
ScopedJavaLocalRef<jstring> j_mime =
ConvertUTF8ToJavaString(env, AudioCodecToMimeType(codec));
ScopedJavaLocalRef<jobject> j_format(
- JNI_MediaFormat::Java_MediaFormat_createAudioFormat(
+ Java_MediaCodecBridge_createAudioFormat(
env, j_mime.obj(), sample_rate, channel_count));
DCHECK(!j_format.is_null());
@@ -266,16 +229,14 @@ bool AudioCodecBridge::Start(
// The first header is identification header.
jobject identification_header = env->NewDirectByteBuffer(
const_cast<uint8*>(current_pos), header_length[0]);
- ScopedJavaLocalRef<jstring> j_csd_0 = ConvertUTF8ToJavaString(env, "csd-0");
- JNI_MediaFormat::Java_MediaFormat_setByteBuffer(
- env, j_format.obj(), j_csd_0.obj(), identification_header);
+ Java_MediaCodecBridge_setCodecSpecificData(
+ env, j_format.obj(), 0, identification_header);
// The last header is codec header.
jobject codec_header = env->NewDirectByteBuffer(
const_cast<uint8*>(extra_data + total_length),
extra_data_size - total_length);
- ScopedJavaLocalRef<jstring> j_csd_1 = ConvertUTF8ToJavaString(env, "csd-1");
- JNI_MediaFormat::Java_MediaFormat_setByteBuffer(
- env, j_format.obj(), j_csd_1.obj(), codec_header);
+ Java_MediaCodecBridge_setCodecSpecificData(
+ env, j_format.obj(), 1, codec_header);
env->DeleteLocalRef(codec_header);
env->DeleteLocalRef(identification_header);
}
@@ -300,8 +261,8 @@ void AudioCodecBridge::PlayOutputBuffer(int index, size_t size) {
env, media_codec(), byte_array.obj());
}
-VideoCodecBridge::VideoCodecBridge(const VideoCodec codec)
- : MediaCodecBridge(VideoCodecToMimeType(codec)) {
+VideoCodecBridge::VideoCodecBridge(const char* mime)
+ : MediaCodecBridge(mime) {
}
bool VideoCodecBridge::Start(
@@ -312,7 +273,7 @@ bool VideoCodecBridge::Start(
ScopedJavaLocalRef<jstring> j_mime =
ConvertUTF8ToJavaString(env, VideoCodecToMimeType(codec));
ScopedJavaLocalRef<jobject> j_format(
- JNI_MediaFormat::Java_MediaFormat_createVideoFormat(
+ Java_MediaCodecBridge_createVideoFormat(
env, j_mime.obj(), size.width(), size.height()));
DCHECK(!j_format.is_null());
Java_MediaCodecBridge_configureVideo(
@@ -321,5 +282,19 @@ bool VideoCodecBridge::Start(
return true;
}
+AudioCodecBridge* AudioCodecBridge::Create(const AudioCodec codec) {
+ const char* mime = AudioCodecToMimeType(codec);
+ return mime ? new AudioCodecBridge(mime) : NULL;
+}
+
+VideoCodecBridge* VideoCodecBridge::Create(const VideoCodec codec) {
+ const char* mime = VideoCodecToMimeType(codec);
+ return mime ? new VideoCodecBridge(mime) : NULL;
+}
+
+bool MediaCodecBridge::RegisterMediaCodecBridge(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
} // namespace media
« no previous file with comments | « media/base/android/media_codec_bridge.h ('k') | media/base/android/media_codec_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698