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

Side by Side 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: Changes according to magjed's comments. 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 26 matching lines...) Expand all
37 37
38 #include <jni.h> 38 #include <jni.h>
39 #undef JNIEXPORT 39 #undef JNIEXPORT
40 #define JNIEXPORT __attribute__((visibility("default"))) 40 #define JNIEXPORT __attribute__((visibility("default")))
41 41
42 #include <limits> 42 #include <limits>
43 #include <memory> 43 #include <memory>
44 #include <utility> 44 #include <utility>
45 45
46 #include "webrtc/api/androidvideocapturer.h" 46 #include "webrtc/api/androidvideocapturer.h"
47 #include "webrtc/api/androidvideotracksource.h"
47 #include "webrtc/api/android/jni/androidmediadecoder_jni.h" 48 #include "webrtc/api/android/jni/androidmediadecoder_jni.h"
48 #include "webrtc/api/android/jni/androidmediaencoder_jni.h" 49 #include "webrtc/api/android/jni/androidmediaencoder_jni.h"
49 #include "webrtc/api/android/jni/androidnetworkmonitor_jni.h" 50 #include "webrtc/api/android/jni/androidnetworkmonitor_jni.h"
50 #include "webrtc/api/android/jni/androidvideocapturer_jni.h" 51 #include "webrtc/api/android/jni/androidvideocapturer_jni.h"
51 #include "webrtc/api/android/jni/classreferenceholder.h" 52 #include "webrtc/api/android/jni/classreferenceholder.h"
52 #include "webrtc/api/android/jni/jni_helpers.h" 53 #include "webrtc/api/android/jni/jni_helpers.h"
53 #include "webrtc/api/android/jni/native_handle_impl.h" 54 #include "webrtc/api/android/jni/native_handle_impl.h"
54 #include "webrtc/api/mediaconstraintsinterface.h" 55 #include "webrtc/api/mediaconstraintsinterface.h"
55 #include "webrtc/api/peerconnectioninterface.h" 56 #include "webrtc/api/peerconnectioninterface.h"
56 #include "webrtc/api/rtpreceiverinterface.h" 57 #include "webrtc/api/rtpreceiverinterface.h"
57 #include "webrtc/api/rtpsenderinterface.h" 58 #include "webrtc/api/rtpsenderinterface.h"
59 #include "webrtc/api/videosourceproxy.h"
58 #include "webrtc/api/webrtcsdp.h" 60 #include "webrtc/api/webrtcsdp.h"
59 #include "webrtc/base/bind.h" 61 #include "webrtc/base/bind.h"
60 #include "webrtc/base/checks.h" 62 #include "webrtc/base/checks.h"
61 #include "webrtc/base/event_tracer.h" 63 #include "webrtc/base/event_tracer.h"
62 #include "webrtc/base/logging.h" 64 #include "webrtc/base/logging.h"
63 #include "webrtc/base/logsinks.h" 65 #include "webrtc/base/logsinks.h"
64 #include "webrtc/base/messagequeue.h" 66 #include "webrtc/base/messagequeue.h"
65 #include "webrtc/base/networkmonitor.h" 67 #include "webrtc/base/networkmonitor.h"
66 #include "webrtc/base/rtccertificategenerator.h" 68 #include "webrtc/base/rtccertificategenerator.h"
67 #include "webrtc/base/ssladapter.h" 69 #include "webrtc/base/ssladapter.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 using webrtc::kVideoCodecVP8; 111 using webrtc::kVideoCodecVP8;
110 112
111 namespace webrtc_jni { 113 namespace webrtc_jni {
112 114
113 // Field trials initialization string 115 // Field trials initialization string
114 static char *field_trials_init_string = NULL; 116 static char *field_trials_init_string = NULL;
115 117
116 // Set in PeerConnectionFactory_initializeAndroidGlobals(). 118 // Set in PeerConnectionFactory_initializeAndroidGlobals().
117 static bool factory_static_initialized = false; 119 static bool factory_static_initialized = false;
118 static bool video_hw_acceleration_enabled = true; 120 static bool video_hw_acceleration_enabled = true;
121 static jobject j_application_context = nullptr;
119 122
120 // Return the (singleton) Java Enum object corresponding to |index|; 123 // Return the (singleton) Java Enum object corresponding to |index|;
121 // |state_class_fragment| is something like "MediaSource$State". 124 // |state_class_fragment| is something like "MediaSource$State".
122 static jobject JavaEnumFromIndex( 125 static jobject JavaEnumFromIndex(
123 JNIEnv* jni, const std::string& state_class_fragment, int index) { 126 JNIEnv* jni, const std::string& state_class_fragment, int index) {
124 const std::string state_class = "org/webrtc/" + state_class_fragment; 127 const std::string state_class = "org/webrtc/" + state_class_fragment;
125 return JavaEnumFromIndex(jni, FindClass(jni, state_class.c_str()), 128 return JavaEnumFromIndex(jni, FindClass(jni, state_class.c_str()),
126 state_class, index); 129 state_class, index);
127 } 130 }
128 131
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 JOW(void, PeerConnection_freePeerConnection)(JNIEnv*, jclass, jlong j_p) { 927 JOW(void, PeerConnection_freePeerConnection)(JNIEnv*, jclass, jlong j_p) {
925 CHECK_RELEASE(reinterpret_cast<PeerConnectionInterface*>(j_p)); 928 CHECK_RELEASE(reinterpret_cast<PeerConnectionInterface*>(j_p));
926 } 929 }
927 930
928 JOW(void, PeerConnection_freeObserver)(JNIEnv*, jclass, jlong j_p) { 931 JOW(void, PeerConnection_freeObserver)(JNIEnv*, jclass, jlong j_p) {
929 PCOJava* p = reinterpret_cast<PCOJava*>(j_p); 932 PCOJava* p = reinterpret_cast<PCOJava*>(j_p);
930 delete p; 933 delete p;
931 } 934 }
932 935
933 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { 936 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) {
934 CHECK_RELEASE(reinterpret_cast<MediaSourceInterface*>(j_p)); 937 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release();
935 } 938 }
936 939
937 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { 940 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
938 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); 941 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p);
939 } 942 }
940 943
941 JOW(void, VideoRenderer_releaseNativeFrame)( 944 JOW(void, VideoRenderer_releaseNativeFrame)(
942 JNIEnv* jni, jclass, jlong j_frame_ptr) { 945 JNIEnv* jni, jclass, jlong j_frame_ptr) {
943 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); 946 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr);
944 } 947 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 981
979 JOW(void, MediaStream_free)(JNIEnv*, jclass, jlong j_p) { 982 JOW(void, MediaStream_free)(JNIEnv*, jclass, jlong j_p) {
980 CHECK_RELEASE(reinterpret_cast<MediaStreamInterface*>(j_p)); 983 CHECK_RELEASE(reinterpret_cast<MediaStreamInterface*>(j_p));
981 } 984 }
982 985
983 JOW(jlong, PeerConnectionFactory_nativeCreateObserver)( 986 JOW(jlong, PeerConnectionFactory_nativeCreateObserver)(
984 JNIEnv * jni, jclass, jobject j_observer) { 987 JNIEnv * jni, jclass, jobject j_observer) {
985 return (jlong)new PCOJava(jni, j_observer); 988 return (jlong)new PCOJava(jni, j_observer);
986 } 989 }
987 990
988 JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)( 991 JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)
989 JNIEnv* jni, jclass, jobject context, 992 (JNIEnv* jni,
990 jboolean initialize_audio, jboolean initialize_video, 993 jclass,
991 jboolean video_hw_acceleration) { 994 jobject context,
995 jboolean initialize_audio,
996 jboolean initialize_video,
997 jboolean video_hw_acceleration) {
992 bool failure = false; 998 bool failure = false;
993 video_hw_acceleration_enabled = video_hw_acceleration; 999 video_hw_acceleration_enabled = video_hw_acceleration;
994 AndroidNetworkMonitor::SetAndroidContext(jni, context); 1000 AndroidNetworkMonitor::SetAndroidContext(jni, context);
995 if (!factory_static_initialized) { 1001 if (!factory_static_initialized) {
1002 RTC_DCHECK(j_application_context == nullptr);
1003 j_application_context = NewGlobalRef(jni, context);
1004
996 if (initialize_video) { 1005 if (initialize_video) {
997 failure |= AndroidVideoCapturerJni::SetAndroidObjects(jni, context); 1006 failure |= AndroidVideoCapturerJni::SetAndroidObjects(jni, context);
998 } 1007 }
999 if (initialize_audio) 1008 if (initialize_audio)
1000 failure |= webrtc::VoiceEngine::SetAndroidObjects(GetJVM(), context); 1009 failure |= webrtc::VoiceEngine::SetAndroidObjects(GetJVM(), context);
1001 factory_static_initialized = true; 1010 factory_static_initialized = true;
1002 } 1011 }
1003 return !failure; 1012 return !failure;
1004 } 1013 }
1005 1014
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 factory_(factory) {} 1077 factory_(factory) {}
1069 1078
1070 ~OwnedFactoryAndThreads() { 1079 ~OwnedFactoryAndThreads() {
1071 CHECK_RELEASE(factory_); 1080 CHECK_RELEASE(factory_);
1072 if (network_monitor_factory_ != nullptr) { 1081 if (network_monitor_factory_ != nullptr) {
1073 rtc::NetworkMonitorFactory::ReleaseFactory(network_monitor_factory_); 1082 rtc::NetworkMonitorFactory::ReleaseFactory(network_monitor_factory_);
1074 } 1083 }
1075 } 1084 }
1076 1085
1077 PeerConnectionFactoryInterface* factory() { return factory_; } 1086 PeerConnectionFactoryInterface* factory() { return factory_; }
1087 Thread* signaling_thread() { return signaling_thread_.get(); }
1088 Thread* worker_thread() { return worker_thread_.get(); }
1078 WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; } 1089 WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; }
1079 WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; } 1090 WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; }
1080 rtc::NetworkMonitorFactory* network_monitor_factory() { 1091 rtc::NetworkMonitorFactory* network_monitor_factory() {
1081 return network_monitor_factory_; 1092 return network_monitor_factory_;
1082 } 1093 }
1083 void clear_network_monitor_factory() { network_monitor_factory_ = nullptr; } 1094 void clear_network_monitor_factory() { network_monitor_factory_ = nullptr; }
1084 void InvokeJavaCallbacksOnFactoryThreads(); 1095 void InvokeJavaCallbacksOnFactoryThreads();
1085 1096
1086 private: 1097 private:
1087 void JavaCallbackOnFactoryThreads(); 1098 void JavaCallbackOnFactoryThreads();
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 // native factory and constraints. 1274 // native factory and constraints.
1264 std::unique_ptr<ConstraintsWrapper> constraints( 1275 std::unique_ptr<ConstraintsWrapper> constraints(
1265 new ConstraintsWrapper(jni, j_constraints)); 1276 new ConstraintsWrapper(jni, j_constraints));
1266 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( 1277 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
1267 factoryFromJava(native_factory)); 1278 factoryFromJava(native_factory));
1268 rtc::scoped_refptr<VideoTrackSourceInterface> source( 1279 rtc::scoped_refptr<VideoTrackSourceInterface> source(
1269 factory->CreateVideoSource(capturer.release(), constraints.get())); 1280 factory->CreateVideoSource(capturer.release(), constraints.get()));
1270 return (jlong)source.release(); 1281 return (jlong)source.release();
1271 } 1282 }
1272 1283
1284 JOW(jlong, PeerConnectionFactory_nativeCreateVideoSource2)
1285 (JNIEnv* jni, jclass, jlong native_factory, jobject j_egl_context) {
1286 OwnedFactoryAndThreads* factory =
1287 reinterpret_cast<OwnedFactoryAndThreads*>(native_factory);
1288
1289 rtc::scoped_refptr<webrtc::AndroidVideoTrackSource> source(
1290 new rtc::RefCountedObject<webrtc::AndroidVideoTrackSource>(
1291 factory->signaling_thread(), jni, j_egl_context));
1292 rtc::scoped_refptr<webrtc::VideoTrackSourceProxy> proxy_source =
1293 webrtc::VideoTrackSourceProxy::Create(factory->signaling_thread(),
1294 factory->worker_thread(), source);
1295
1296 return (jlong)proxy_source.release();
1297 }
1298
1299 JOW(void, PeerConnectionFactory_nativeInitializeVideoCapturer)
1300 (JNIEnv* jni,
1301 jclass,
1302 jlong native_factory,
1303 jobject j_video_capturer,
1304 jlong native_source,
1305 jobject j_frame_observer) {
1306 LOG(LS_INFO) << "PeerConnectionFactory_nativeInitializeVideoCapturer";
1307 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
1308 factoryFromJava(native_factory));
1309 auto proxy_source =
1310 reinterpret_cast<webrtc::VideoTrackSourceProxy*>(native_source);
1311 auto source = reinterpret_cast<webrtc::AndroidVideoTrackSource*>(
1312 proxy_source->internal());
1313 rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper =
1314 source->surface_texture_helper();
1315 jni->CallVoidMethod(
1316 j_video_capturer,
1317 GetMethodID(jni, FindClass(jni, "org/webrtc/VideoCapturer"), "initialize",
1318 "(Lorg/webrtc/SurfaceTextureHelper;Landroid/content/"
1319 "Context;Lorg/webrtc/VideoCapturer$CapturerObserver;)V"),
1320 surface_texture_helper
1321 ? surface_texture_helper->GetJavaSurfaceTextureHelper()
1322 : nullptr,
1323 j_application_context, j_frame_observer);
1324 CHECK_EXCEPTION(jni) << "error during VideoCapturer.initialize()";
1325 }
1326
1273 JOW(jlong, PeerConnectionFactory_nativeCreateVideoTrack)( 1327 JOW(jlong, PeerConnectionFactory_nativeCreateVideoTrack)(
1274 JNIEnv* jni, jclass, jlong native_factory, jstring id, 1328 JNIEnv* jni, jclass, jlong native_factory, jstring id,
1275 jlong native_source) { 1329 jlong native_source) {
1276 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( 1330 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory(
1277 factoryFromJava(native_factory)); 1331 factoryFromJava(native_factory));
1278 rtc::scoped_refptr<VideoTrackInterface> track(factory->CreateVideoTrack( 1332 rtc::scoped_refptr<VideoTrackInterface> track(factory->CreateVideoTrack(
1279 JavaToStdString(jni, id), 1333 JavaToStdString(jni, id),
1280 reinterpret_cast<VideoTrackSourceInterface*>(native_source))); 1334 reinterpret_cast<VideoTrackSourceInterface*>(native_source)));
1281 return (jlong)track.release(); 1335 return (jlong)track.release();
1282 } 1336 }
(...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after
2291 return JavaStringFromStdString( 2345 return JavaStringFromStdString(
2292 jni, 2346 jni,
2293 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); 2347 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id());
2294 } 2348 }
2295 2349
2296 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { 2350 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
2297 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); 2351 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release();
2298 } 2352 }
2299 2353
2300 } // namespace webrtc_jni 2354 } // namespace webrtc_jni
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698