Index: ui/gl/android/surface_texture_bridge.cc |
diff --git a/ui/gl/android/surface_texture_bridge.cc b/ui/gl/android/surface_texture_bridge.cc |
index c4206a983e67b1c3fa3d068e26459a1104b4be5c..9f2a3372e84e19137a06ffc0268222985e532a7d 100644 |
--- a/ui/gl/android/surface_texture_bridge.cc |
+++ b/ui/gl/android/surface_texture_bridge.cc |
@@ -10,26 +10,11 @@ |
#include "base/android/build_info.h" |
#include "base/android/jni_android.h" |
#include "base/logging.h" |
-#include "jni/SurfaceTexture_jni.h" |
+#include "jni/SurfaceTextureBridge_jni.h" |
#include "ui/gl/android/scoped_java_surface.h" |
#include "ui/gl/android/surface_texture_listener.h" |
#include "ui/gl/gl_bindings.h" |
-using base::android::AttachCurrentThread; |
-using base::android::CheckException; |
-using base::android::GetClass; |
-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; |
- } |
-} |
- |
// TODO(boliu): Remove this method when when we move off ICS. See |
// http://crbug.com/161864. |
bool GlContextMethodsAvailable() { |
@@ -39,66 +24,38 @@ bool GlContextMethodsAvailable() { |
return available; |
} |
-} // namespace |
- |
namespace gfx { |
SurfaceTextureBridge::SurfaceTextureBridge(int texture_id) { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
- RegisterNativesIfNeeded(env); |
- |
- ScopedJavaLocalRef<jobject> tmp( |
- JNI_SurfaceTexture::Java_SurfaceTexture_Constructor( |
- env, texture_id)); |
- DCHECK(!tmp.is_null()); |
- j_surface_texture_.Reset(tmp); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ j_surface_texture_.Reset(Java_SurfaceTextureBridge_create(env, texture_id)); |
} |
SurfaceTextureBridge::~SurfaceTextureBridge() { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
- |
- // Release the listener. |
- JNI_SurfaceTexture::Java_SurfaceTexture_setOnFrameAvailableListener( |
- env, j_surface_texture_.obj(), NULL); |
- |
- // Release graphics memory. |
- JNI_SurfaceTexture::Java_SurfaceTexture_release( |
- env, j_surface_texture_.obj()); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTextureBridge_destroy(env, j_surface_texture_.obj()); |
} |
void SurfaceTextureBridge::SetFrameAvailableCallback( |
const base::Closure& callback) { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
- |
- // Since the listener is owned by the Java SurfaceTexture object, setting |
- // a new listener here will release an existing one at the same time. |
- ScopedJavaLocalRef<jobject> j_listener( |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTextureBridge_setFrameAvailableCallback( |
env, |
- SurfaceTextureListener::CreateSurfaceTextureListener(env, callback)); |
- DCHECK(!j_listener.is_null()); |
- |
- // Set it as the onFrameAvailableListener for our SurfaceTexture instance. |
- JNI_SurfaceTexture::Java_SurfaceTexture_setOnFrameAvailableListener( |
- env, j_surface_texture_.obj(), j_listener.obj()); |
+ j_surface_texture_.obj(), |
+ reinterpret_cast<int>(new SurfaceTextureListener(callback))); |
} |
void SurfaceTextureBridge::UpdateTexImage() { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
- |
- JNI_SurfaceTexture::Java_SurfaceTexture_updateTexImage( |
- env, j_surface_texture_.obj()); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTextureBridge_updateTexImage(env, j_surface_texture_.obj()); |
} |
void SurfaceTextureBridge::GetTransformMatrix(float mtx[16]) { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
- ScopedJavaLocalRef<jfloatArray> jmatrix(env, env->NewFloatArray(16)); |
- JNI_SurfaceTexture::Java_SurfaceTexture_getTransformMatrix( |
+ base::android::ScopedJavaLocalRef<jfloatArray> jmatrix( |
+ env, env->NewFloatArray(16)); |
+ Java_SurfaceTextureBridge_getTransformMatrix( |
env, j_surface_texture_.obj(), jmatrix.obj()); |
jboolean is_copy; |
@@ -110,11 +67,10 @@ void SurfaceTextureBridge::GetTransformMatrix(float mtx[16]) { |
} |
void SurfaceTextureBridge::SetDefaultBufferSize(int width, int height) { |
- JNIEnv* env = AttachCurrentThread(); |
- CHECK(env); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
if (width > 0 && height > 0) { |
- JNI_SurfaceTexture::Java_SurfaceTexture_setDefaultBufferSize( |
+ Java_SurfaceTextureBridge_setDefaultBufferSize( |
env, j_surface_texture_.obj(), static_cast<jint>(width), |
static_cast<jint>(height)); |
} else { |
@@ -128,28 +84,31 @@ void SurfaceTextureBridge::AttachToGLContext() { |
int texture_id; |
glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &texture_id); |
DCHECK(texture_id); |
- JNIEnv* env = AttachCurrentThread(); |
- // Note: This method is only available on JB and greater. |
- JNI_SurfaceTexture::Java_SurfaceTexture_attachToGLContext( |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTextureBridge_attachToGLContext( |
env, j_surface_texture_.obj(), texture_id); |
} |
} |
void SurfaceTextureBridge::DetachFromGLContext() { |
if (GlContextMethodsAvailable()) { |
- JNIEnv* env = AttachCurrentThread(); |
- // Note: This method is only available on JB and greater. |
- JNI_SurfaceTexture::Java_SurfaceTexture_detachFromGLContext( |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTextureBridge_detachFromGLContext( |
env, j_surface_texture_.obj()); |
} |
} |
ANativeWindow* SurfaceTextureBridge::CreateSurface() { |
- JNIEnv* env = AttachCurrentThread(); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
ScopedJavaSurface surface(this); |
- ANativeWindow* native_window = |
- ANativeWindow_fromSurface(env, surface.j_surface().obj()); |
+ ANativeWindow* native_window = ANativeWindow_fromSurface( |
+ env, surface.j_surface().obj()); |
return native_window; |
} |
+// static |
+bool SurfaceTextureBridge::RegisterSurfaceTextureBridge(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
} // namespace gfx |