Index: content/common/android/surface_texture_bridge.cc |
diff --git a/content/common/android/surface_texture_bridge.cc b/content/common/android/surface_texture_bridge.cc |
index e2376485a6fdc7d04b9471c53e189588a2846782..531aadda00ff68f2e3a81f6d3cf77e159c928fbb 100644 |
--- a/content/common/android/surface_texture_bridge.cc |
+++ b/content/common/android/surface_texture_bridge.cc |
@@ -7,6 +7,7 @@ |
#include "base/android/jni_android.h" |
#include "base/logging.h" |
#include "content/common/android/surface_texture_listener.h" |
+#include "jni/SurfaceTexture_jni.h" |
using base::android::AttachCurrentThread; |
using base::android::CheckException; |
@@ -14,17 +15,28 @@ using base::android::GetClass; |
using base::android::GetMethodID; |
using base::android::ScopedJavaLocalRef; |
+namespace { |
+bool g_jni_initialized = false; |
+ |
+void RegisterNativesIfNeeded(JNIEnv* env) { |
+ if (!g_jni_initialized) { |
+ JNI_SurfaceTexture::RegisterNativesImpl(env); |
+ g_jni_initialized = true; |
+ } |
+} |
+} // namespace |
+ |
namespace content { |
SurfaceTextureBridge::SurfaceTextureBridge(int texture_id) |
: texture_id_(texture_id) { |
JNIEnv* env = AttachCurrentThread(); |
CHECK(env); |
+ RegisterNativesIfNeeded(env); |
- j_class_.Reset(GetClass(env, "android/graphics/SurfaceTexture")); |
- jmethodID constructor = GetMethodID(env, j_class_, "<init>", "(I)V"); |
- ScopedJavaLocalRef<jobject> tmp(env, |
- env->NewObject(j_class_.obj(), constructor, texture_id)); |
+ ScopedJavaLocalRef<jobject> tmp( |
+ JNI_SurfaceTexture::Java_SurfaceTexture_Constructor(env, |
jam
2012/09/20 16:04:15
nit: the indentation of the parameters here (and t
bulach
2012/09/20 16:31:18
thanks jam! I'm not sure I fully understood, but..
jam
2012/09/20 16:53:20
doh. i just saw that. that's against the google st
|
+ texture_id)); |
DCHECK(!tmp.is_null()); |
j_surface_texture_.Reset(tmp); |
} |
@@ -34,17 +46,12 @@ SurfaceTextureBridge::~SurfaceTextureBridge() { |
CHECK(env); |
// Release the listener. |
- const char* method_signature = |
- "(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V"; |
- jmethodID method = GetMethodID(env, j_class_, "setOnFrameAvailableListener", |
- method_signature); |
- env->CallVoidMethod(j_surface_texture_.obj(), method, NULL); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_setOnFrameAvailableListener(env, |
+ j_surface_texture_.obj(), NULL); |
// Release graphics memory. |
- jmethodID release = GetMethodID(env, j_class_, "release", "()V"); |
- env->CallVoidMethod(j_surface_texture_.obj(), release); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_release(env, |
+ j_surface_texture_.obj()); |
} |
void SurfaceTextureBridge::SetFrameAvailableCallback( |
@@ -59,21 +66,16 @@ void SurfaceTextureBridge::SetFrameAvailableCallback( |
DCHECK(!j_listener.is_null()); |
// Set it as the onFrameAvailableListener for our SurfaceTexture instance. |
- const char* method_signature = |
- "(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V"; |
- jmethodID method = GetMethodID(env, j_class_, "setOnFrameAvailableListener", |
- method_signature); |
- env->CallVoidMethod(j_surface_texture_.obj(), method, j_listener.obj()); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_setOnFrameAvailableListener(env, |
+ j_surface_texture_.obj(), j_listener.obj()); |
} |
void SurfaceTextureBridge::UpdateTexImage() { |
JNIEnv* env = AttachCurrentThread(); |
CHECK(env); |
- jmethodID method = GetMethodID(env, j_class_, "updateTexImage", "()V"); |
- env->CallVoidMethod(j_surface_texture_.obj(), method); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_updateTexImage(env, |
+ j_surface_texture_.obj()); |
} |
void SurfaceTextureBridge::GetTransformMatrix(float mtx[16]) { |
@@ -81,9 +83,8 @@ void SurfaceTextureBridge::GetTransformMatrix(float mtx[16]) { |
CHECK(env); |
ScopedJavaLocalRef<jfloatArray> jmatrix(env, env->NewFloatArray(16)); |
- jmethodID method = GetMethodID(env, j_class_, "getTransformMatrix", "([F)V"); |
- env->CallVoidMethod(j_surface_texture_.obj(), method, jmatrix.obj()); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_getTransformMatrix(env, |
+ j_surface_texture_.obj(), jmatrix.obj()); |
jboolean is_copy; |
jfloat* elements = env->GetFloatArrayElements(jmatrix.obj(), &is_copy); |
@@ -97,11 +98,9 @@ void SurfaceTextureBridge::SetDefaultBufferSize(int width, int height) { |
JNIEnv* env = AttachCurrentThread(); |
CHECK(env); |
- jmethodID method = GetMethodID(env, j_class_, |
- "setDefaultBufferSize", "(II)V"); |
- env->CallVoidMethod(j_surface_texture_.obj(), method, |
- static_cast<jint>(width), static_cast<jint>(height)); |
- CheckException(env); |
+ JNI_SurfaceTexture::Java_SurfaceTexture_setDefaultBufferSize(env, |
+ j_surface_texture_.obj(), static_cast<jint>(width), |
+ static_cast<jint>(height)); |
} |
} // namespace content |