Index: webrtc/modules/video_render/android/video_render_android_native_opengl2.cc |
diff --git a/webrtc/modules/video_render/android/video_render_android_native_opengl2.cc b/webrtc/modules/video_render/android/video_render_android_native_opengl2.cc |
deleted file mode 100644 |
index 286776e317ba0ea8978b3d62ede1361cd718dc32..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/video_render/android/video_render_android_native_opengl2.cc |
+++ /dev/null |
@@ -1,450 +0,0 @@ |
-/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/modules/video_render/android/video_render_android_native_opengl2.h" |
-#include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
-#include "webrtc/system_wrappers/include/tick_util.h" |
- |
-#ifdef ANDROID_LOG |
-#include <android/log.h> |
-#include <stdio.h> |
- |
-#undef WEBRTC_TRACE |
-#define WEBRTC_TRACE(a,b,c,...) __android_log_print(ANDROID_LOG_DEBUG, "*WEBRTC*", __VA_ARGS__) |
-#else |
-#include "webrtc/system_wrappers/include/trace.h" |
-#endif |
- |
-namespace webrtc { |
- |
-AndroidNativeOpenGl2Renderer::AndroidNativeOpenGl2Renderer( |
- const int32_t id, |
- const VideoRenderType videoRenderType, |
- void* window, |
- const bool fullscreen) : |
- VideoRenderAndroid(id, videoRenderType, window, fullscreen), |
- _javaRenderObj(NULL), |
- _javaRenderClass(NULL) { |
-} |
- |
-bool AndroidNativeOpenGl2Renderer::UseOpenGL2(void* window) { |
- if (!g_jvm) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, -1, |
- "RendererAndroid():UseOpenGL No JVM set."); |
- return false; |
- } |
- bool isAttached = false; |
- JNIEnv* env = NULL; |
- if (g_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
- // try to attach the thread and get the env |
- // Attach this thread to JVM |
- jint res = g_jvm->AttachCurrentThread(&env, NULL); |
- |
- // Get the JNI env for this thread |
- if ((res < 0) || !env) { |
- WEBRTC_TRACE( |
- kTraceError, |
- kTraceVideoRenderer, |
- -1, |
- "RendererAndroid(): Could not attach thread to JVM (%d, %p)", |
- res, env); |
- return false; |
- } |
- isAttached = true; |
- } |
- |
- // get the renderer class |
- jclass javaRenderClassLocal = |
- env->FindClass("org/webrtc/videoengine/ViEAndroidGLES20"); |
- if (!javaRenderClassLocal) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, -1, |
- "%s: could not find ViEAndroidRenderer class", |
- __FUNCTION__); |
- return false; |
- } |
- |
- // get the method ID for UseOpenGL |
- jmethodID cidUseOpenGL = env->GetStaticMethodID(javaRenderClassLocal, |
- "UseOpenGL2", |
- "(Ljava/lang/Object;)Z"); |
- if (cidUseOpenGL == NULL) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, -1, |
- "%s: could not get UseOpenGL ID", __FUNCTION__); |
- return false; |
- } |
- jboolean res = env->CallStaticBooleanMethod(javaRenderClassLocal, |
- cidUseOpenGL, (jobject) window); |
- |
- // Detach this thread if it was attached |
- if (isAttached) { |
- if (g_jvm->DetachCurrentThread() < 0) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, -1, |
- "%s: Could not detach thread from JVM", __FUNCTION__); |
- } |
- } |
- return res; |
-} |
- |
-AndroidNativeOpenGl2Renderer::~AndroidNativeOpenGl2Renderer() { |
- WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, |
- "AndroidNativeOpenGl2Renderer dtor"); |
- if (g_jvm) { |
- // get the JNI env for this thread |
- bool isAttached = false; |
- JNIEnv* env = NULL; |
- if (g_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
- // try to attach the thread and get the env |
- // Attach this thread to JVM |
- jint res = g_jvm->AttachCurrentThread(&env, NULL); |
- |
- // Get the JNI env for this thread |
- if ((res < 0) || !env) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: Could not attach thread to JVM (%d, %p)", |
- __FUNCTION__, res, env); |
- env = NULL; |
- } |
- else { |
- isAttached = true; |
- } |
- } |
- |
- env->DeleteGlobalRef(_javaRenderObj); |
- env->DeleteGlobalRef(_javaRenderClass); |
- |
- if (isAttached) { |
- if (g_jvm->DetachCurrentThread() < 0) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, |
- "%s: Could not detach thread from JVM", |
- __FUNCTION__); |
- } |
- } |
- } |
-} |
- |
-int32_t AndroidNativeOpenGl2Renderer::Init() { |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__); |
- if (!g_jvm) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "(%s): Not a valid Java VM pointer.", __FUNCTION__); |
- return -1; |
- } |
- if (!_ptrWindow) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, |
- "(%s): No window have been provided.", __FUNCTION__); |
- return -1; |
- } |
- |
- // get the JNI env for this thread |
- bool isAttached = false; |
- JNIEnv* env = NULL; |
- if (g_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
- // try to attach the thread and get the env |
- // Attach this thread to JVM |
- jint res = g_jvm->AttachCurrentThread(&env, NULL); |
- |
- // Get the JNI env for this thread |
- if ((res < 0) || !env) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: Could not attach thread to JVM (%d, %p)", |
- __FUNCTION__, res, env); |
- return -1; |
- } |
- isAttached = true; |
- } |
- |
- // get the ViEAndroidGLES20 class |
- jclass javaRenderClassLocal = |
- env->FindClass("org/webrtc/videoengine/ViEAndroidGLES20"); |
- if (!javaRenderClassLocal) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not find ViEAndroidGLES20", __FUNCTION__); |
- return -1; |
- } |
- |
- // create a global reference to the class (to tell JNI that |
- // we are referencing it after this function has returned) |
- _javaRenderClass = |
- reinterpret_cast<jclass> (env->NewGlobalRef(javaRenderClassLocal)); |
- if (!_javaRenderClass) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not create Java SurfaceHolder class reference", |
- __FUNCTION__); |
- return -1; |
- } |
- |
- // Delete local class ref, we only use the global ref |
- env->DeleteLocalRef(javaRenderClassLocal); |
- |
- // create a reference to the object (to tell JNI that we are referencing it |
- // after this function has returned) |
- _javaRenderObj = env->NewGlobalRef(_ptrWindow); |
- if (!_javaRenderObj) { |
- WEBRTC_TRACE( |
- kTraceError, |
- kTraceVideoRenderer, |
- _id, |
- "%s: could not create Java SurfaceRender object reference", |
- __FUNCTION__); |
- return -1; |
- } |
- |
- // Detach this thread if it was attached |
- if (isAttached) { |
- if (g_jvm->DetachCurrentThread() < 0) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, |
- "%s: Could not detach thread from JVM", __FUNCTION__); |
- } |
- } |
- |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s done", |
- __FUNCTION__); |
- return 0; |
- |
-} |
-AndroidStream* |
-AndroidNativeOpenGl2Renderer::CreateAndroidRenderChannel( |
- int32_t streamId, |
- int32_t zOrder, |
- const float left, |
- const float top, |
- const float right, |
- const float bottom, |
- VideoRenderAndroid& renderer) { |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s: Id %d", |
- __FUNCTION__, streamId); |
- AndroidNativeOpenGl2Channel* stream = |
- new AndroidNativeOpenGl2Channel(streamId, g_jvm, renderer, |
- _javaRenderObj); |
- if (stream && stream->Init(zOrder, left, top, right, bottom) == 0) |
- return stream; |
- else { |
- delete stream; |
- } |
- return NULL; |
-} |
- |
-AndroidNativeOpenGl2Channel::AndroidNativeOpenGl2Channel( |
- uint32_t streamId, |
- JavaVM* jvm, |
- VideoRenderAndroid& renderer,jobject javaRenderObj): |
- _id(streamId), |
- _renderCritSect(*CriticalSectionWrapper::CreateCriticalSection()), |
- _renderer(renderer), _jvm(jvm), _javaRenderObj(javaRenderObj), |
- _registerNativeCID(NULL), _deRegisterNativeCID(NULL), |
- _openGLRenderer(streamId) { |
- |
-} |
-AndroidNativeOpenGl2Channel::~AndroidNativeOpenGl2Channel() { |
- WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, |
- "AndroidNativeOpenGl2Channel dtor"); |
- if (_jvm) { |
- // get the JNI env for this thread |
- bool isAttached = false; |
- JNIEnv* env = NULL; |
- if (_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
- // try to attach the thread and get the env |
- // Attach this thread to JVM |
- jint res = _jvm->AttachCurrentThread(&env, NULL); |
- |
- // Get the JNI env for this thread |
- if ((res < 0) || !env) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: Could not attach thread to JVM (%d, %p)", |
- __FUNCTION__, res, env); |
- env = NULL; |
- } else { |
- isAttached = true; |
- } |
- } |
- if (env && _deRegisterNativeCID) { |
- env->CallVoidMethod(_javaRenderObj, _deRegisterNativeCID); |
- } |
- |
- if (isAttached) { |
- if (_jvm->DetachCurrentThread() < 0) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, |
- "%s: Could not detach thread from JVM", |
- __FUNCTION__); |
- } |
- } |
- } |
- |
- delete &_renderCritSect; |
-} |
- |
-int32_t AndroidNativeOpenGl2Channel::Init(int32_t zOrder, |
- const float left, |
- const float top, |
- const float right, |
- const float bottom) |
-{ |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, |
- "%s: AndroidNativeOpenGl2Channel", __FUNCTION__); |
- if (!_jvm) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: Not a valid Java VM pointer", __FUNCTION__); |
- return -1; |
- } |
- |
- // get the JNI env for this thread |
- bool isAttached = false; |
- JNIEnv* env = NULL; |
- if (_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { |
- // try to attach the thread and get the env |
- // Attach this thread to JVM |
- jint res = _jvm->AttachCurrentThread(&env, NULL); |
- |
- // Get the JNI env for this thread |
- if ((res < 0) || !env) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: Could not attach thread to JVM (%d, %p)", |
- __FUNCTION__, res, env); |
- return -1; |
- } |
- isAttached = true; |
- } |
- |
- jclass javaRenderClass = |
- env->FindClass("org/webrtc/videoengine/ViEAndroidGLES20"); |
- if (!javaRenderClass) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not find ViESurfaceRenderer", __FUNCTION__); |
- return -1; |
- } |
- |
- // get the method ID for the ReDraw function |
- _redrawCid = env->GetMethodID(javaRenderClass, "ReDraw", "()V"); |
- if (_redrawCid == NULL) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not get ReDraw ID", __FUNCTION__); |
- return -1; |
- } |
- |
- _registerNativeCID = env->GetMethodID(javaRenderClass, |
- "RegisterNativeObject", "(J)V"); |
- if (_registerNativeCID == NULL) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not get RegisterNativeObject ID", __FUNCTION__); |
- return -1; |
- } |
- |
- _deRegisterNativeCID = env->GetMethodID(javaRenderClass, |
- "DeRegisterNativeObject", "()V"); |
- if (_deRegisterNativeCID == NULL) { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, |
- "%s: could not get DeRegisterNativeObject ID", |
- __FUNCTION__); |
- return -1; |
- } |
- |
- JNINativeMethod nativeFunctions[2] = { |
- { "DrawNative", |
- "(J)V", |
- (void*) &AndroidNativeOpenGl2Channel::DrawNativeStatic, }, |
- { "CreateOpenGLNative", |
- "(JII)I", |
- (void*) &AndroidNativeOpenGl2Channel::CreateOpenGLNativeStatic }, |
- }; |
- if (env->RegisterNatives(javaRenderClass, nativeFunctions, 2) == 0) { |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, -1, |
- "%s: Registered native functions", __FUNCTION__); |
- } |
- else { |
- WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, -1, |
- "%s: Failed to register native functions", __FUNCTION__); |
- return -1; |
- } |
- |
- env->CallVoidMethod(_javaRenderObj, _registerNativeCID, (jlong) this); |
- |
- // Detach this thread if it was attached |
- if (isAttached) { |
- if (_jvm->DetachCurrentThread() < 0) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, |
- "%s: Could not detach thread from JVM", __FUNCTION__); |
- } |
- } |
- |
- if (_openGLRenderer.SetCoordinates(zOrder, left, top, right, bottom) != 0) { |
- return -1; |
- } |
- WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, |
- "%s: AndroidNativeOpenGl2Channel done", __FUNCTION__); |
- return 0; |
-} |
- |
-int32_t AndroidNativeOpenGl2Channel::RenderFrame(const uint32_t /*streamId*/, |
- const VideoFrame& videoFrame) { |
- // WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer,_id, "%s:" ,__FUNCTION__); |
- _renderCritSect.Enter(); |
- _bufferToRender = videoFrame; |
- _renderCritSect.Leave(); |
- _renderer.ReDraw(); |
- return 0; |
-} |
- |
-/*Implements AndroidStream |
- * Calls the Java object and render the buffer in _bufferToRender |
- */ |
-void AndroidNativeOpenGl2Channel::DeliverFrame(JNIEnv* jniEnv) { |
- //TickTime timeNow=TickTime::Now(); |
- |
- //Draw the Surface |
- jniEnv->CallVoidMethod(_javaRenderObj, _redrawCid); |
- |
- // WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer,_id, |
- // "%s: time to deliver %lld" ,__FUNCTION__, |
- // (TickTime::Now()-timeNow).Milliseconds()); |
-} |
- |
-/* |
- * JNI callback from Java class. Called when the render |
- * want to render a frame. Called from the GLRenderThread |
- * Method: DrawNative |
- * Signature: (J)V |
- */ |
-void JNICALL AndroidNativeOpenGl2Channel::DrawNativeStatic( |
- JNIEnv * env, jobject, jlong context) { |
- AndroidNativeOpenGl2Channel* renderChannel = |
- reinterpret_cast<AndroidNativeOpenGl2Channel*>(context); |
- renderChannel->DrawNative(); |
-} |
- |
-void AndroidNativeOpenGl2Channel::DrawNative() { |
- _renderCritSect.Enter(); |
- _openGLRenderer.Render(_bufferToRender); |
- _renderCritSect.Leave(); |
-} |
- |
-/* |
- * JNI callback from Java class. Called when the GLSurfaceview |
- * have created a surface. Called from the GLRenderThread |
- * Method: CreateOpenGLNativeStatic |
- * Signature: (JII)I |
- */ |
-jint JNICALL AndroidNativeOpenGl2Channel::CreateOpenGLNativeStatic( |
- JNIEnv * env, |
- jobject, |
- jlong context, |
- jint width, |
- jint height) { |
- AndroidNativeOpenGl2Channel* renderChannel = |
- reinterpret_cast<AndroidNativeOpenGl2Channel*> (context); |
- WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, -1, "%s:", __FUNCTION__); |
- return renderChannel->CreateOpenGLNative(width, height); |
-} |
- |
-jint AndroidNativeOpenGl2Channel::CreateOpenGLNative( |
- int width, int height) { |
- return _openGLRenderer.Setup(width, height); |
-} |
- |
-} // namespace webrtc |