Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Unified Diff: webrtc/api/android/jni/peerconnection_jni.cc

Issue 2127893002: AndroidVideoTrackSource implementation (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@magjed-init
Patch Set: Change videoSourceStopped to videoCapturerStopped. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/api/android/jni/peerconnection_jni.cc
diff --git a/webrtc/api/android/jni/peerconnection_jni.cc b/webrtc/api/android/jni/peerconnection_jni.cc
index fefb44785a266465bf13638389fb2db63d28136d..8b5a69251be33180fcfb5170046a4a023a6e4b92 100644
--- a/webrtc/api/android/jni/peerconnection_jni.cc
+++ b/webrtc/api/android/jni/peerconnection_jni.cc
@@ -44,6 +44,7 @@
#include <utility>
#include "webrtc/api/androidvideocapturer.h"
+#include "webrtc/api/androidvideotracksource.h"
#include "webrtc/api/android/jni/androidmediadecoder_jni.h"
#include "webrtc/api/android/jni/androidmediaencoder_jni.h"
#include "webrtc/api/android/jni/androidnetworkmonitor_jni.h"
@@ -55,6 +56,7 @@
#include "webrtc/api/peerconnectioninterface.h"
#include "webrtc/api/rtpreceiverinterface.h"
#include "webrtc/api/rtpsenderinterface.h"
+#include "webrtc/api/videosourceproxy.h"
#include "webrtc/api/webrtcsdp.h"
#include "webrtc/base/bind.h"
#include "webrtc/base/checks.h"
@@ -116,6 +118,7 @@ static char *field_trials_init_string = NULL;
// Set in PeerConnectionFactory_initializeAndroidGlobals().
static bool factory_static_initialized = false;
static bool video_hw_acceleration_enabled = true;
+static jobject j_application_context = nullptr;
// Return the (singleton) Java Enum object corresponding to |index|;
// |state_class_fragment| is something like "MediaSource$State".
@@ -931,7 +934,7 @@ JOW(void, PeerConnection_freeObserver)(JNIEnv*, jclass, jlong j_p) {
}
JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) {
- CHECK_RELEASE(reinterpret_cast<MediaSourceInterface*>(j_p));
+ reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release();
}
JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
@@ -985,14 +988,20 @@ JOW(jlong, PeerConnectionFactory_nativeCreateObserver)(
return (jlong)new PCOJava(jni, j_observer);
}
-JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)(
- JNIEnv* jni, jclass, jobject context,
- jboolean initialize_audio, jboolean initialize_video,
- jboolean video_hw_acceleration) {
+JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)
+(JNIEnv* jni,
+ jclass,
+ jobject context,
+ jboolean initialize_audio,
+ jboolean initialize_video,
+ jboolean video_hw_acceleration) {
bool failure = false;
video_hw_acceleration_enabled = video_hw_acceleration;
AndroidNetworkMonitor::SetAndroidContext(jni, context);
if (!factory_static_initialized) {
+ RTC_DCHECK(j_application_context == nullptr);
+ j_application_context = NewGlobalRef(jni, context);
+
if (initialize_video) {
failure |= AndroidVideoCapturerJni::SetAndroidObjects(jni, context);
}
@@ -1075,6 +1084,8 @@ class OwnedFactoryAndThreads {
}
PeerConnectionFactoryInterface* factory() { return factory_; }
+ Thread* signaling_thread() { return signaling_thread_.get(); }
+ Thread* worker_thread() { return worker_thread_.get(); }
WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; }
WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; }
rtc::NetworkMonitorFactory* network_monitor_factory() {
@@ -1270,6 +1281,49 @@ JOW(jlong, PeerConnectionFactory_nativeCreateVideoSource)(
return (jlong)source.release();
}
+JOW(jlong, PeerConnectionFactory_nativeCreateVideoSource2)
+(JNIEnv* jni, jclass, jlong native_factory, jobject j_egl_context) {
+ OwnedFactoryAndThreads* factory =
+ reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
+
+ rtc::scoped_refptr<webrtc::AndroidVideoTrackSource> source(
+ new rtc::RefCountedObject<webrtc::AndroidVideoTrackSource>(
+ factory->signaling_thread(), jni, j_egl_context));
+ rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source =
+ webrtc::VideoTrackSourceProxy::Create(factory->signaling_thread(),
+ factory->worker_thread(), source);
+
+ return (jlong)proxy_source.release();
+}
+
+JOW(void, PeerConnectionFactory_nativeInitializeVideoCapturer)
+(JNIEnv* jni,
+ jclass,
+ jlong native_factory,
+ jobject j_video_capturer,
+ jlong native_source,
+ jobject j_frame_observer) {
+ LOG(LS_INFO) << "PeerConnectionFactory_nativeInitializeVideoCapturer";
+ rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
+ factoryFromJava(native_factory));
+ auto proxy_source =
+ reinterpret_cast<webrtc::VideoTrackSourceProxy*>(native_source);
+ auto source = reinterpret_cast<webrtc::AndroidVideoTrackSource*>(
+ proxy_source->internal());
+ rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper =
+ source->surface_texture_helper();
+ jni->CallVoidMethod(
+ j_video_capturer,
+ GetMethodID(jni, FindClass(jni, "org/webrtc/VideoCapturer"), "initialize",
+ "(Lorg/webrtc/SurfaceTextureHelper;Landroid/content/"
+ "Context;Lorg/webrtc/VideoCapturer$CapturerObserver;)V"),
+ surface_texture_helper
+ ? surface_texture_helper->GetJavaSurfaceTextureHelper()
+ : nullptr,
+ j_application_context, j_frame_observer);
+ CHECK_EXCEPTION(jni) << "error during VideoCapturer.initialize()";
+}
+
JOW(jlong, PeerConnectionFactory_nativeCreateVideoTrack)(
JNIEnv* jni, jclass, jlong native_factory, jstring id,
jlong native_source) {

Powered by Google App Engine
This is Rietveld 408576698