Android: Annotate and generate JNI code for SurfaceTextureHelper.java

Bug: webrtc:8278
Change-Id: I96966e3e7f589a1dde8d4c8079d3fdd1e32bc023
Reviewed-on: https://webrtc-review.googlesource.com/22721
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20673}
This commit is contained in:
Magnus Jedvert
2017-11-14 13:03:08 +01:00
committed by Commit Bot
parent 6cb76506fe
commit 6199a3731d
4 changed files with 11 additions and 28 deletions

View File

@ -103,6 +103,7 @@ rtc_static_library("null_audio_jni") {
generate_jni("generated_video_jni") { generate_jni("generated_video_jni") {
sources = [ sources = [
"api/org/webrtc/SurfaceTextureHelper.java",
"api/org/webrtc/VideoCodecStatus.java", "api/org/webrtc/VideoCodecStatus.java",
"api/org/webrtc/VideoEncoder.java", "api/org/webrtc/VideoEncoder.java",
"api/org/webrtc/VideoSink.java", "api/org/webrtc/VideoSink.java",

View File

@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
import java.nio.FloatBuffer; import java.nio.FloatBuffer;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.webrtc.EglBase;
import org.webrtc.VideoFrame.I420Buffer; import org.webrtc.VideoFrame.I420Buffer;
import org.webrtc.VideoFrame.TextureBuffer; 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 * 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. * initialize a pixel buffer surface and make it current.
*/ */
@CalledByNative
public static SurfaceTextureHelper create( public static SurfaceTextureHelper create(
final String threadName, final EglBase.Context sharedContext) { final String threadName, final EglBase.Context sharedContext) {
final HandlerThread thread = new HandlerThread(threadName); 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 * onTextureFrameAvailable(). Only one texture frame can be in flight at once, so you must call
* this function in order to receive a new frame. * this function in order to receive a new frame.
*/ */
@CalledByNative
public void returnTextureFrame() { public void returnTextureFrame() {
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
@ -218,6 +221,7 @@ public class SurfaceTextureHelper {
* stopped when the texture frame has been returned by a call to returnTextureFrame(). You are * 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. * guaranteed to not receive any more onTextureFrameAvailable() after this function returns.
*/ */
@CalledByNative
public void dispose() { public void dispose() {
Logging.d(TAG, "dispose()"); Logging.d(TAG, "dispose()");
ThreadUtils.invokeAtFrontUninterruptibly(handler, new Runnable() { ThreadUtils.invokeAtFrontUninterruptibly(handler, new Runnable() {

View File

@ -12,9 +12,8 @@
#include "sdk/android/src/jni/surfacetexturehelper_jni.h" #include "sdk/android/src/jni/surfacetexturehelper_jni.h"
#include "rtc_base/bind.h" #include "rtc_base/bind.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.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 webrtc {
namespace jni { namespace jni {
@ -23,13 +22,8 @@ rtc::scoped_refptr<SurfaceTextureHelper> SurfaceTextureHelper::create(
JNIEnv* jni, JNIEnv* jni,
const char* thread_name, const char* thread_name,
jobject j_egl_context) { jobject j_egl_context) {
jobject j_surface_texture_helper = jni->CallStaticObjectMethod( jobject j_surface_texture_helper = Java_SurfaceTextureHelper_create(
FindClass(jni, "org/webrtc/SurfaceTextureHelper"), jni, jni->NewStringUTF(thread_name), j_egl_context);
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);
CHECK_EXCEPTION(jni) CHECK_EXCEPTION(jni)
<< "error during initialization of Java SurfaceTextureHelper"; << "error during initialization of Java SurfaceTextureHelper";
if (IsNull(jni, j_surface_texture_helper)) if (IsNull(jni, j_surface_texture_helper))
@ -40,24 +34,12 @@ rtc::scoped_refptr<SurfaceTextureHelper> SurfaceTextureHelper::create(
SurfaceTextureHelper::SurfaceTextureHelper(JNIEnv* jni, SurfaceTextureHelper::SurfaceTextureHelper(JNIEnv* jni,
jobject j_surface_texture_helper) jobject j_surface_texture_helper)
: j_surface_texture_helper_(jni, 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";
}
SurfaceTextureHelper::~SurfaceTextureHelper() { SurfaceTextureHelper::~SurfaceTextureHelper() {
RTC_LOG(LS_INFO) << "SurfaceTextureHelper dtor"; RTC_LOG(LS_INFO) << "SurfaceTextureHelper dtor";
JNIEnv* jni = AttachCurrentThreadIfNeeded(); JNIEnv* jni = AttachCurrentThreadIfNeeded();
jni->CallVoidMethod( Java_SurfaceTextureHelper_dispose(jni, *j_surface_texture_helper_);
*j_surface_texture_helper_,
GetMethodID(jni, FindClass(jni, "org/webrtc/SurfaceTextureHelper"),
"dispose", "()V"));
CHECK_EXCEPTION(jni) << "error during SurfaceTextureHelper.dispose()";
} }
jobject SurfaceTextureHelper::GetJavaSurfaceTextureHelper() const { jobject SurfaceTextureHelper::GetJavaSurfaceTextureHelper() const {
@ -66,10 +48,7 @@ jobject SurfaceTextureHelper::GetJavaSurfaceTextureHelper() const {
void SurfaceTextureHelper::ReturnTextureFrame() const { void SurfaceTextureHelper::ReturnTextureFrame() const {
JNIEnv* jni = AttachCurrentThreadIfNeeded(); JNIEnv* jni = AttachCurrentThreadIfNeeded();
jni->CallVoidMethod(*j_surface_texture_helper_, j_return_texture_method_); Java_SurfaceTextureHelper_returnTextureFrame(jni, *j_surface_texture_helper_);
CHECK_EXCEPTION(
jni) << "error during SurfaceTextureHelper.returnTextureFrame";
} }
rtc::scoped_refptr<VideoFrameBuffer> SurfaceTextureHelper::CreateTextureFrame( rtc::scoped_refptr<VideoFrameBuffer> SurfaceTextureHelper::CreateTextureFrame(

View File

@ -61,7 +61,6 @@ class SurfaceTextureHelper : public rtc::RefCountInterface {
private: private:
const ScopedGlobalRef<jobject> j_surface_texture_helper_; const ScopedGlobalRef<jobject> j_surface_texture_helper_;
const jmethodID j_return_texture_method_;
}; };
} // namespace jni } // namespace jni