From 6199a3731d583f8e203fbecf2889ed7be48ed379 Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Tue, 14 Nov 2017 13:03:08 +0100 Subject: [PATCH] Android: Annotate and generate JNI code for SurfaceTextureHelper.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:8278 Change-Id: I96966e3e7f589a1dde8d4c8079d3fdd1e32bc023 Reviewed-on: https://webrtc-review.googlesource.com/22721 Reviewed-by: Sami Kalliomäki Commit-Queue: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#20673} --- sdk/android/BUILD.gn | 1 + .../api/org/webrtc/SurfaceTextureHelper.java | 4 +++ .../src/jni/surfacetexturehelper_jni.cc | 33 ++++--------------- .../src/jni/surfacetexturehelper_jni.h | 1 - 4 files changed, 11 insertions(+), 28 deletions(-) diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 80b716415b..e1b9a60a6e 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -103,6 +103,7 @@ rtc_static_library("null_audio_jni") { generate_jni("generated_video_jni") { sources = [ + "api/org/webrtc/SurfaceTextureHelper.java", "api/org/webrtc/VideoCodecStatus.java", "api/org/webrtc/VideoEncoder.java", "api/org/webrtc/VideoSink.java", diff --git a/sdk/android/api/org/webrtc/SurfaceTextureHelper.java b/sdk/android/api/org/webrtc/SurfaceTextureHelper.java index 8e260856d5..dbdf2684d6 100644 --- a/sdk/android/api/org/webrtc/SurfaceTextureHelper.java +++ b/sdk/android/api/org/webrtc/SurfaceTextureHelper.java @@ -23,6 +23,7 @@ import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; +import org.webrtc.EglBase; import org.webrtc.VideoFrame.I420Buffer; import org.webrtc.VideoFrame.TextureBuffer; @@ -53,6 +54,7 @@ public class SurfaceTextureHelper { * thread and handler is created for handling the SurfaceTexture. May return null if EGL fails to * initialize a pixel buffer surface and make it current. */ + @CalledByNative public static SurfaceTextureHelper create( final String threadName, final EglBase.Context sharedContext) { final HandlerThread thread = new HandlerThread(threadName); @@ -195,6 +197,7 @@ public class SurfaceTextureHelper { * onTextureFrameAvailable(). Only one texture frame can be in flight at once, so you must call * this function in order to receive a new frame. */ + @CalledByNative public void returnTextureFrame() { handler.post(new Runnable() { @Override @@ -218,6 +221,7 @@ public class SurfaceTextureHelper { * stopped when the texture frame has been returned by a call to returnTextureFrame(). You are * guaranteed to not receive any more onTextureFrameAvailable() after this function returns. */ + @CalledByNative public void dispose() { Logging.d(TAG, "dispose()"); ThreadUtils.invokeAtFrontUninterruptibly(handler, new Runnable() { diff --git a/sdk/android/src/jni/surfacetexturehelper_jni.cc b/sdk/android/src/jni/surfacetexturehelper_jni.cc index 4f53b9fe64..0b7cf4ebaf 100644 --- a/sdk/android/src/jni/surfacetexturehelper_jni.cc +++ b/sdk/android/src/jni/surfacetexturehelper_jni.cc @@ -12,9 +12,8 @@ #include "sdk/android/src/jni/surfacetexturehelper_jni.h" #include "rtc_base/bind.h" -#include "rtc_base/checks.h" #include "rtc_base/logging.h" -#include "sdk/android/src/jni/classreferenceholder.h" +#include "sdk/android/generated_video_jni/jni/SurfaceTextureHelper_jni.h" namespace webrtc { namespace jni { @@ -23,13 +22,8 @@ rtc::scoped_refptr SurfaceTextureHelper::create( JNIEnv* jni, const char* thread_name, jobject j_egl_context) { - jobject j_surface_texture_helper = jni->CallStaticObjectMethod( - FindClass(jni, "org/webrtc/SurfaceTextureHelper"), - GetStaticMethodID(jni, FindClass(jni, "org/webrtc/SurfaceTextureHelper"), - "create", - "(Ljava/lang/String;Lorg/webrtc/EglBase$Context;)" - "Lorg/webrtc/SurfaceTextureHelper;"), - jni->NewStringUTF(thread_name), j_egl_context); + jobject j_surface_texture_helper = Java_SurfaceTextureHelper_create( + jni, jni->NewStringUTF(thread_name), j_egl_context); CHECK_EXCEPTION(jni) << "error during initialization of Java SurfaceTextureHelper"; if (IsNull(jni, j_surface_texture_helper)) @@ -40,24 +34,12 @@ rtc::scoped_refptr SurfaceTextureHelper::create( SurfaceTextureHelper::SurfaceTextureHelper(JNIEnv* jni, jobject j_surface_texture_helper) - : j_surface_texture_helper_(jni, j_surface_texture_helper), - j_return_texture_method_( - GetMethodID(jni, - FindClass(jni, "org/webrtc/SurfaceTextureHelper"), - "returnTextureFrame", - "()V")) { - CHECK_EXCEPTION(jni) << "error during initialization of SurfaceTextureHelper"; -} + : j_surface_texture_helper_(jni, j_surface_texture_helper) {} SurfaceTextureHelper::~SurfaceTextureHelper() { RTC_LOG(LS_INFO) << "SurfaceTextureHelper dtor"; JNIEnv* jni = AttachCurrentThreadIfNeeded(); - jni->CallVoidMethod( - *j_surface_texture_helper_, - GetMethodID(jni, FindClass(jni, "org/webrtc/SurfaceTextureHelper"), - "dispose", "()V")); - - CHECK_EXCEPTION(jni) << "error during SurfaceTextureHelper.dispose()"; + Java_SurfaceTextureHelper_dispose(jni, *j_surface_texture_helper_); } jobject SurfaceTextureHelper::GetJavaSurfaceTextureHelper() const { @@ -66,10 +48,7 @@ jobject SurfaceTextureHelper::GetJavaSurfaceTextureHelper() const { void SurfaceTextureHelper::ReturnTextureFrame() const { JNIEnv* jni = AttachCurrentThreadIfNeeded(); - jni->CallVoidMethod(*j_surface_texture_helper_, j_return_texture_method_); - - CHECK_EXCEPTION( - jni) << "error during SurfaceTextureHelper.returnTextureFrame"; + Java_SurfaceTextureHelper_returnTextureFrame(jni, *j_surface_texture_helper_); } rtc::scoped_refptr SurfaceTextureHelper::CreateTextureFrame( diff --git a/sdk/android/src/jni/surfacetexturehelper_jni.h b/sdk/android/src/jni/surfacetexturehelper_jni.h index f96c893392..3d264d2a75 100644 --- a/sdk/android/src/jni/surfacetexturehelper_jni.h +++ b/sdk/android/src/jni/surfacetexturehelper_jni.h @@ -61,7 +61,6 @@ class SurfaceTextureHelper : public rtc::RefCountInterface { private: const ScopedGlobalRef j_surface_texture_helper_; - const jmethodID j_return_texture_method_; }; } // namespace jni