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:
committed by
Commit Bot
parent
6cb76506fe
commit
6199a3731d
@ -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",
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user