Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 #include "talk/app/webrtc/videosourceinterface.h" | 67 #include "talk/app/webrtc/videosourceinterface.h" |
| 68 #include "talk/media/base/videocapturer.h" | 68 #include "talk/media/base/videocapturer.h" |
| 69 #include "talk/media/base/videorenderer.h" | 69 #include "talk/media/base/videorenderer.h" |
| 70 #include "talk/media/devices/videorendererfactory.h" | 70 #include "talk/media/devices/videorendererfactory.h" |
| 71 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" | 71 #include "talk/media/webrtc/webrtcvideodecoderfactory.h" |
| 72 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" | 72 #include "talk/media/webrtc/webrtcvideoencoderfactory.h" |
| 73 #include "webrtc/base/bind.h" | 73 #include "webrtc/base/bind.h" |
| 74 #include "webrtc/base/checks.h" | 74 #include "webrtc/base/checks.h" |
| 75 #include "webrtc/base/logging.h" | 75 #include "webrtc/base/logging.h" |
| 76 #include "webrtc/base/logsinks.h" | 76 #include "webrtc/base/logsinks.h" |
| 77 #include "webrtc/base/networkmonitor.h" | |
| 77 #include "webrtc/base/messagequeue.h" | 78 #include "webrtc/base/messagequeue.h" |
| 78 #include "webrtc/base/ssladapter.h" | 79 #include "webrtc/base/ssladapter.h" |
| 79 #include "webrtc/base/stringutils.h" | 80 #include "webrtc/base/stringutils.h" |
| 80 #include "webrtc/system_wrappers/interface/field_trial_default.h" | 81 #include "webrtc/system_wrappers/interface/field_trial_default.h" |
| 81 #include "webrtc/system_wrappers/interface/trace.h" | 82 #include "webrtc/system_wrappers/interface/trace.h" |
| 82 #include "webrtc/voice_engine/include/voe_base.h" | 83 #include "webrtc/voice_engine/include/voe_base.h" |
| 83 | 84 |
| 84 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) | 85 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) |
| 85 #include "talk/app/webrtc/androidvideocapturer.h" | 86 #include "talk/app/webrtc/androidvideocapturer.h" |
| 86 #include "talk/app/webrtc/java/jni/androidmediadecoder_jni.h" | 87 #include "talk/app/webrtc/java/jni/androidmediadecoder_jni.h" |
| 87 #include "talk/app/webrtc/java/jni/androidmediaencoder_jni.h" | 88 #include "talk/app/webrtc/java/jni/androidmediaencoder_jni.h" |
| 88 #include "talk/app/webrtc/java/jni/androidvideocapturer_jni.h" | 89 #include "talk/app/webrtc/java/jni/androidvideocapturer_jni.h" |
| 90 #include "talk/app/webrtc/java/jni/androidnetworkmonitor_jni.h" | |
| 89 #include "webrtc/modules/video_render/video_render_internal.h" | 91 #include "webrtc/modules/video_render/video_render_internal.h" |
| 90 #include "webrtc/system_wrappers/interface/logcat_trace_context.h" | 92 #include "webrtc/system_wrappers/interface/logcat_trace_context.h" |
| 91 using webrtc::LogcatTraceContext; | 93 using webrtc::LogcatTraceContext; |
| 92 #endif | 94 #endif |
| 93 | 95 |
| 94 using cricket::WebRtcVideoDecoderFactory; | 96 using cricket::WebRtcVideoDecoderFactory; |
| 95 using cricket::WebRtcVideoEncoderFactory; | 97 using cricket::WebRtcVideoEncoderFactory; |
| 96 using rtc::Bind; | 98 using rtc::Bind; |
| 97 using rtc::Thread; | 99 using rtc::Thread; |
| 98 using rtc::ThreadManager; | 100 using rtc::ThreadManager; |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1012 return (jlong)new PCOJava(jni, j_observer); | 1014 return (jlong)new PCOJava(jni, j_observer); |
| 1013 } | 1015 } |
| 1014 | 1016 |
| 1015 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) | 1017 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) |
| 1016 JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)( | 1018 JOW(jboolean, PeerConnectionFactory_initializeAndroidGlobals)( |
| 1017 JNIEnv* jni, jclass, jobject context, | 1019 JNIEnv* jni, jclass, jobject context, |
| 1018 jboolean initialize_audio, jboolean initialize_video, | 1020 jboolean initialize_audio, jboolean initialize_video, |
| 1019 jboolean video_hw_acceleration) { | 1021 jboolean video_hw_acceleration) { |
| 1020 bool failure = false; | 1022 bool failure = false; |
| 1021 video_hw_acceleration_enabled = video_hw_acceleration; | 1023 video_hw_acceleration_enabled = video_hw_acceleration; |
| 1024 AndroidNetworkMonitor::SetAndroidContext(jni, context); | |
| 1022 if (!factory_static_initialized) { | 1025 if (!factory_static_initialized) { |
| 1023 if (initialize_video) { | 1026 if (initialize_video) { |
| 1024 failure |= webrtc::SetRenderAndroidVM(GetJVM()); | 1027 failure |= webrtc::SetRenderAndroidVM(GetJVM()); |
| 1025 failure |= AndroidVideoCapturerJni::SetAndroidObjects(jni, context); | 1028 failure |= AndroidVideoCapturerJni::SetAndroidObjects(jni, context); |
| 1026 } | 1029 } |
| 1027 if (initialize_audio) | 1030 if (initialize_audio) |
| 1028 failure |= webrtc::VoiceEngine::SetAndroidObjects(GetJVM(), context); | 1031 failure |= webrtc::VoiceEngine::SetAndroidObjects(GetJVM(), context); |
| 1029 factory_static_initialized = true; | 1032 factory_static_initialized = true; |
| 1030 } | 1033 } |
| 1031 return !failure; | 1034 return !failure; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 1052 // threads and deleting them on teardown, but no external codec factory support) | 1055 // threads and deleting them on teardown, but no external codec factory support) |
| 1053 // or entirely manual (requires caller to delete threads after factory | 1056 // or entirely manual (requires caller to delete threads after factory |
| 1054 // teardown). This struct takes ownership of its ctor's arguments to present a | 1057 // teardown). This struct takes ownership of its ctor's arguments to present a |
| 1055 // single thing for Java to hold and eventually free. | 1058 // single thing for Java to hold and eventually free. |
| 1056 class OwnedFactoryAndThreads { | 1059 class OwnedFactoryAndThreads { |
| 1057 public: | 1060 public: |
| 1058 OwnedFactoryAndThreads(Thread* worker_thread, | 1061 OwnedFactoryAndThreads(Thread* worker_thread, |
| 1059 Thread* signaling_thread, | 1062 Thread* signaling_thread, |
| 1060 WebRtcVideoEncoderFactory* encoder_factory, | 1063 WebRtcVideoEncoderFactory* encoder_factory, |
| 1061 WebRtcVideoDecoderFactory* decoder_factory, | 1064 WebRtcVideoDecoderFactory* decoder_factory, |
| 1065 rtc::NetworkMonitorFactory* network_monitor_factory, | |
| 1062 PeerConnectionFactoryInterface* factory) | 1066 PeerConnectionFactoryInterface* factory) |
| 1063 : worker_thread_(worker_thread), | 1067 : worker_thread_(worker_thread), |
| 1064 signaling_thread_(signaling_thread), | 1068 signaling_thread_(signaling_thread), |
| 1065 encoder_factory_(encoder_factory), | 1069 encoder_factory_(encoder_factory), |
| 1066 decoder_factory_(decoder_factory), | 1070 decoder_factory_(decoder_factory), |
| 1071 network_monitor_factory_(network_monitor_factory), | |
| 1067 factory_(factory) {} | 1072 factory_(factory) {} |
| 1068 | 1073 |
| 1069 ~OwnedFactoryAndThreads() { CHECK_RELEASE(factory_); } | 1074 ~OwnedFactoryAndThreads() { |
| 1075 CHECK_RELEASE(factory_); | |
| 1076 // Release the network monitor factory instance if it was created. | |
| 1077 if (network_monitor_factory_ != nullptr) { | |
| 1078 rtc::NetworkMonitorFactory::SetFactory(nullptr); | |
| 1079 } | |
|
pthatcher1
2015/10/15 08:11:43
Shouldn't this be more like
if (network_monitor_f
honghaiz3
2015/10/15 19:02:41
Done.
| |
| 1080 } | |
| 1070 | 1081 |
| 1071 PeerConnectionFactoryInterface* factory() { return factory_; } | 1082 PeerConnectionFactoryInterface* factory() { return factory_; } |
| 1072 WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; } | 1083 WebRtcVideoEncoderFactory* encoder_factory() { return encoder_factory_; } |
| 1073 WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; } | 1084 WebRtcVideoDecoderFactory* decoder_factory() { return decoder_factory_; } |
| 1074 | 1085 |
| 1075 private: | 1086 private: |
| 1076 const scoped_ptr<Thread> worker_thread_; | 1087 const scoped_ptr<Thread> worker_thread_; |
| 1077 const scoped_ptr<Thread> signaling_thread_; | 1088 const scoped_ptr<Thread> signaling_thread_; |
| 1078 WebRtcVideoEncoderFactory* encoder_factory_; | 1089 WebRtcVideoEncoderFactory* encoder_factory_; |
| 1079 WebRtcVideoDecoderFactory* decoder_factory_; | 1090 WebRtcVideoDecoderFactory* decoder_factory_; |
| 1091 const rtc::NetworkMonitorFactory* network_monitor_factory_; | |
| 1080 PeerConnectionFactoryInterface* factory_; // Const after ctor except dtor. | 1092 PeerConnectionFactoryInterface* factory_; // Const after ctor except dtor. |
| 1081 }; | 1093 }; |
| 1082 | 1094 |
| 1083 JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)( | 1095 JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory)( |
| 1084 JNIEnv* jni, jclass) { | 1096 JNIEnv* jni, jclass) { |
| 1085 // talk/ assumes pretty widely that the current Thread is ThreadManager'd, but | 1097 // talk/ assumes pretty widely that the current Thread is ThreadManager'd, but |
| 1086 // ThreadManager only WrapCurrentThread()s the thread where it is first | 1098 // ThreadManager only WrapCurrentThread()s the thread where it is first |
| 1087 // created. Since the semantics around when auto-wrapping happens in | 1099 // created. Since the semantics around when auto-wrapping happens in |
| 1088 // webrtc/base/ are convoluted, we simply wrap here to avoid having to think | 1100 // webrtc/base/ are convoluted, we simply wrap here to avoid having to think |
| 1089 // about ramifications of auto-wrapping there. | 1101 // about ramifications of auto-wrapping there. |
| 1090 rtc::ThreadManager::Instance()->WrapCurrentThread(); | 1102 rtc::ThreadManager::Instance()->WrapCurrentThread(); |
| 1091 webrtc::Trace::CreateTrace(); | 1103 webrtc::Trace::CreateTrace(); |
| 1092 Thread* worker_thread = new Thread(); | 1104 Thread* worker_thread = new Thread(); |
| 1093 worker_thread->SetName("worker_thread", NULL); | 1105 worker_thread->SetName("worker_thread", NULL); |
| 1094 Thread* signaling_thread = new Thread(); | 1106 Thread* signaling_thread = new Thread(); |
| 1095 signaling_thread->SetName("signaling_thread", NULL); | 1107 signaling_thread->SetName("signaling_thread", NULL); |
| 1096 RTC_CHECK(worker_thread->Start() && signaling_thread->Start()) | 1108 RTC_CHECK(worker_thread->Start() && signaling_thread->Start()) |
| 1097 << "Failed to start threads"; | 1109 << "Failed to start threads"; |
| 1098 WebRtcVideoEncoderFactory* encoder_factory = nullptr; | 1110 WebRtcVideoEncoderFactory* encoder_factory = nullptr; |
| 1099 WebRtcVideoDecoderFactory* decoder_factory = nullptr; | 1111 WebRtcVideoDecoderFactory* decoder_factory = nullptr; |
| 1112 rtc::NetworkMonitorFactory* network_monitor_factory = nullptr; | |
| 1113 | |
| 1100 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) | 1114 #if defined(ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD) |
| 1101 if (video_hw_acceleration_enabled) { | 1115 if (video_hw_acceleration_enabled) { |
| 1102 encoder_factory = new MediaCodecVideoEncoderFactory(); | 1116 encoder_factory = new MediaCodecVideoEncoderFactory(); |
| 1103 decoder_factory = new MediaCodecVideoDecoderFactory(); | 1117 decoder_factory = new MediaCodecVideoDecoderFactory(); |
| 1104 } | 1118 } |
| 1119 network_monitor_factory = AndroidNetworkMonitorFactory::CreateFactory(); | |
|
pthatcher1
2015/10/15 08:11:43
I think this would be more clear as:
network_moni
honghaiz3
2015/10/15 19:02:41
Done.
| |
| 1105 #endif | 1120 #endif |
| 1106 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( | 1121 rtc::scoped_refptr<PeerConnectionFactoryInterface> factory( |
| 1107 webrtc::CreatePeerConnectionFactory(worker_thread, | 1122 webrtc::CreatePeerConnectionFactory(worker_thread, |
| 1108 signaling_thread, | 1123 signaling_thread, |
| 1109 NULL, | 1124 NULL, |
| 1110 encoder_factory, | 1125 encoder_factory, |
| 1111 decoder_factory)); | 1126 decoder_factory)); |
| 1112 RTC_CHECK(factory) << "Failed to create the peer connection factory; " | 1127 RTC_CHECK(factory) << "Failed to create the peer connection factory; " |
| 1113 << "WebRTC/libjingle init likely failed on this device"; | 1128 << "WebRTC/libjingle init likely failed on this device"; |
| 1114 OwnedFactoryAndThreads* owned_factory = new OwnedFactoryAndThreads( | 1129 OwnedFactoryAndThreads* owned_factory = new OwnedFactoryAndThreads( |
| 1115 worker_thread, signaling_thread, | 1130 worker_thread, signaling_thread, encoder_factory, decoder_factory, |
| 1116 encoder_factory, decoder_factory, | 1131 network_monitor_factory, factory.release()); |
| 1117 factory.release()); | |
| 1118 return jlongFromPointer(owned_factory); | 1132 return jlongFromPointer(owned_factory); |
| 1119 } | 1133 } |
| 1120 | 1134 |
| 1121 JOW(void, PeerConnectionFactory_freeFactory)(JNIEnv*, jclass, jlong j_p) { | 1135 JOW(void, PeerConnectionFactory_freeFactory)(JNIEnv*, jclass, jlong j_p) { |
| 1122 delete reinterpret_cast<OwnedFactoryAndThreads*>(j_p); | 1136 delete reinterpret_cast<OwnedFactoryAndThreads*>(j_p); |
| 1123 if (field_trials_init_string) { | 1137 if (field_trials_init_string) { |
| 1124 webrtc::field_trial::InitFieldTrialsFromString(NULL); | 1138 webrtc::field_trial::InitFieldTrialsFromString(NULL); |
| 1125 delete field_trials_init_string; | 1139 delete field_trials_init_string; |
| 1126 field_trials_init_string = NULL; | 1140 field_trials_init_string = NULL; |
| 1127 } | 1141 } |
| (...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1865 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); | 1879 rtc::scoped_ptr<jbyte> buffer(static_cast<jbyte*>(malloc(log_size))); |
| 1866 stream->ReadAll(buffer.get(), log_size, &read, nullptr); | 1880 stream->ReadAll(buffer.get(), log_size, &read, nullptr); |
| 1867 | 1881 |
| 1868 jbyteArray result = jni->NewByteArray(read); | 1882 jbyteArray result = jni->NewByteArray(read); |
| 1869 jni->SetByteArrayRegion(result, 0, read, buffer.get()); | 1883 jni->SetByteArrayRegion(result, 0, read, buffer.get()); |
| 1870 | 1884 |
| 1871 return result; | 1885 return result; |
| 1872 } | 1886 } |
| 1873 | 1887 |
| 1874 } // namespace webrtc_jni | 1888 } // namespace webrtc_jni |
| OLD | NEW |