Index: webrtc/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc |
diff --git a/webrtc/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc b/webrtc/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc |
deleted file mode 100644 |
index f6c45e24fd863d6e03344000771dcfd556315798..0000000000000000000000000000000000000000 |
--- a/webrtc/sdk/android/src/jni/pc/peerconnectionfactory_jni.cc |
+++ /dev/null |
@@ -1,322 +0,0 @@ |
-/* |
- * Copyright 2017 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 <memory> |
-#include <utility> |
- |
-#include "webrtc/api/peerconnectioninterface.h" |
-#include "webrtc/media/base/mediaengine.h" |
-#include "webrtc/modules/utility/include/jvm_android.h" |
-#include "webrtc/rtc_base/event_tracer.h" |
-#include "webrtc/rtc_base/stringutils.h" |
-#include "webrtc/rtc_base/thread.h" |
-#include "webrtc/sdk/android/src/jni/jni_helpers.h" |
-#include "webrtc/sdk/android/src/jni/pc/androidnetworkmonitor_jni.h" |
-#include "webrtc/sdk/android/src/jni/pc/audio_jni.h" |
-#include "webrtc/sdk/android/src/jni/pc/java_native_conversion.h" |
-#include "webrtc/sdk/android/src/jni/pc/media_jni.h" |
-#include "webrtc/sdk/android/src/jni/pc/ownedfactoryandthreads.h" |
-#include "webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h" |
-#include "webrtc/sdk/android/src/jni/pc/video_jni.h" |
-#include "webrtc/system_wrappers/include/field_trial.h" |
-// Adding 'nogncheck' to disable the gn include headers check. |
-// We don't want to depend on 'system_wrappers:field_trial_default' because |
-// clients should be able to provide their own implementation. |
-#include "webrtc/system_wrappers/include/field_trial_default.h" // nogncheck |
-#include "webrtc/system_wrappers/include/trace.h" |
- |
-namespace webrtc_jni { |
- |
-// Note: Some of the video-specific PeerConnectionFactory methods are |
-// implemented in "video_jni.cc". This is done so that if an application |
-// doesn't need video support, it can just link with "null_video_jni.cc" |
-// instead of "video_jni.cc", which doesn't bring in the video-specific |
-// dependencies. |
- |
-// Field trials initialization string |
-static char* field_trials_init_string = nullptr; |
- |
-// Set in PeerConnectionFactory_initializeAndroidGlobals(). |
-static bool factory_static_initialized = false; |
-static bool video_hw_acceleration_enabled = true; |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreateObserver) |
-(JNIEnv* jni, jclass, jobject j_observer) { |
- return (jlong) new PeerConnectionObserverJni(jni, j_observer); |
-} |
- |
-JOW(void, PeerConnectionFactory_nativeInitializeAndroidGlobals) |
-(JNIEnv* jni, jclass, jobject context, jboolean video_hw_acceleration) { |
- video_hw_acceleration_enabled = video_hw_acceleration; |
- if (!factory_static_initialized) { |
- webrtc::JVM::Initialize(GetJVM()); |
- factory_static_initialized = true; |
- } |
-} |
- |
-JOW(void, PeerConnectionFactory_initializeFieldTrials) |
-(JNIEnv* jni, jclass, jstring j_trials_init_string) { |
- field_trials_init_string = NULL; |
- if (j_trials_init_string != NULL) { |
- const char* init_string = |
- jni->GetStringUTFChars(j_trials_init_string, NULL); |
- int init_string_length = jni->GetStringUTFLength(j_trials_init_string); |
- field_trials_init_string = new char[init_string_length + 1]; |
- rtc::strcpyn(field_trials_init_string, init_string_length + 1, init_string); |
- jni->ReleaseStringUTFChars(j_trials_init_string, init_string); |
- LOG(LS_INFO) << "initializeFieldTrials: " << field_trials_init_string; |
- } |
- webrtc::field_trial::InitFieldTrialsFromString(field_trials_init_string); |
-} |
- |
-JOW(void, PeerConnectionFactory_initializeInternalTracer)(JNIEnv* jni, jclass) { |
- rtc::tracing::SetupInternalTracer(); |
-} |
- |
-JOW(jstring, PeerConnectionFactory_nativeFieldTrialsFindFullName) |
-(JNIEnv* jni, jclass, jstring j_name) { |
- return JavaStringFromStdString( |
- jni, webrtc::field_trial::FindFullName(JavaToStdString(jni, j_name))); |
-} |
- |
-JOW(jboolean, PeerConnectionFactory_startInternalTracingCapture) |
-(JNIEnv* jni, jclass, jstring j_event_tracing_filename) { |
- if (!j_event_tracing_filename) |
- return false; |
- |
- const char* init_string = |
- jni->GetStringUTFChars(j_event_tracing_filename, NULL); |
- LOG(LS_INFO) << "Starting internal tracing to: " << init_string; |
- bool ret = rtc::tracing::StartInternalCapture(init_string); |
- jni->ReleaseStringUTFChars(j_event_tracing_filename, init_string); |
- return ret; |
-} |
- |
-JOW(void, PeerConnectionFactory_stopInternalTracingCapture) |
-(JNIEnv* jni, jclass) { |
- rtc::tracing::StopInternalCapture(); |
-} |
- |
-JOW(void, PeerConnectionFactory_shutdownInternalTracer)(JNIEnv* jni, jclass) { |
- rtc::tracing::ShutdownInternalTracer(); |
-} |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnectionFactory) |
-(JNIEnv* jni, |
- jclass, |
- jobject joptions, |
- jobject jencoder_factory, |
- jobject jdecoder_factory) { |
- // talk/ assumes pretty widely that the current Thread is ThreadManager'd, but |
- // ThreadManager only WrapCurrentThread()s the thread where it is first |
- // created. Since the semantics around when auto-wrapping happens in |
- // webrtc/rtc_base/ are convoluted, we simply wrap here to avoid having to |
- // think about ramifications of auto-wrapping there. |
- rtc::ThreadManager::Instance()->WrapCurrentThread(); |
- webrtc::Trace::CreateTrace(); |
- |
- std::unique_ptr<rtc::Thread> network_thread = |
- rtc::Thread::CreateWithSocketServer(); |
- network_thread->SetName("network_thread", nullptr); |
- RTC_CHECK(network_thread->Start()) << "Failed to start thread"; |
- |
- std::unique_ptr<rtc::Thread> worker_thread = rtc::Thread::Create(); |
- worker_thread->SetName("worker_thread", nullptr); |
- RTC_CHECK(worker_thread->Start()) << "Failed to start thread"; |
- |
- std::unique_ptr<rtc::Thread> signaling_thread = rtc::Thread::Create(); |
- signaling_thread->SetName("signaling_thread", NULL); |
- RTC_CHECK(signaling_thread->Start()) << "Failed to start thread"; |
- |
- cricket::WebRtcVideoEncoderFactory* video_encoder_factory = nullptr; |
- cricket::WebRtcVideoDecoderFactory* video_decoder_factory = nullptr; |
- rtc::NetworkMonitorFactory* network_monitor_factory = nullptr; |
- auto audio_encoder_factory = CreateAudioEncoderFactory(); |
- auto audio_decoder_factory = CreateAudioDecoderFactory(); |
- |
- webrtc::PeerConnectionFactoryInterface::Options options; |
- bool has_options = joptions != NULL; |
- if (has_options) { |
- options = JavaToNativePeerConnectionFactoryOptions(jni, joptions); |
- } |
- |
- if (video_hw_acceleration_enabled) { |
- video_encoder_factory = CreateVideoEncoderFactory(jni, jencoder_factory); |
- video_decoder_factory = CreateVideoDecoderFactory(jni, jdecoder_factory); |
- } |
- // Do not create network_monitor_factory only if the options are |
- // provided and disable_network_monitor therein is set to true. |
- if (!(has_options && options.disable_network_monitor)) { |
- network_monitor_factory = new AndroidNetworkMonitorFactory(); |
- rtc::NetworkMonitorFactory::SetFactory(network_monitor_factory); |
- } |
- |
- webrtc::AudioDeviceModule* adm = nullptr; |
- rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer = nullptr; |
- std::unique_ptr<webrtc::CallFactoryInterface> call_factory( |
- CreateCallFactory()); |
- std::unique_ptr<webrtc::RtcEventLogFactoryInterface> rtc_event_log_factory( |
- CreateRtcEventLogFactory()); |
- std::unique_ptr<cricket::MediaEngineInterface> media_engine(CreateMediaEngine( |
- adm, audio_encoder_factory, audio_decoder_factory, video_encoder_factory, |
- video_decoder_factory, audio_mixer)); |
- |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- CreateModularPeerConnectionFactory( |
- network_thread.get(), worker_thread.get(), signaling_thread.get(), |
- adm, audio_encoder_factory, audio_decoder_factory, |
- video_encoder_factory, video_decoder_factory, audio_mixer, |
- std::move(media_engine), std::move(call_factory), |
- std::move(rtc_event_log_factory))); |
- RTC_CHECK(factory) << "Failed to create the peer connection factory; " |
- << "WebRTC/libjingle init likely failed on this device"; |
- // TODO(honghaiz): Maybe put the options as the argument of |
- // CreatePeerConnectionFactory. |
- if (has_options) { |
- factory->SetOptions(options); |
- } |
- OwnedFactoryAndThreads* owned_factory = new OwnedFactoryAndThreads( |
- std::move(network_thread), std::move(worker_thread), |
- std::move(signaling_thread), video_encoder_factory, video_decoder_factory, |
- network_monitor_factory, factory.release()); |
- owned_factory->InvokeJavaCallbacksOnFactoryThreads(); |
- return jlongFromPointer(owned_factory); |
-} |
- |
-JOW(void, PeerConnectionFactory_nativeFreeFactory)(JNIEnv*, jclass, jlong j_p) { |
- delete reinterpret_cast<OwnedFactoryAndThreads*>(j_p); |
- if (field_trials_init_string) { |
- webrtc::field_trial::InitFieldTrialsFromString(NULL); |
- delete field_trials_init_string; |
- field_trials_init_string = NULL; |
- } |
- webrtc::Trace::ReturnTrace(); |
-} |
- |
-JOW(void, PeerConnectionFactory_nativeThreadsCallbacks) |
-(JNIEnv*, jclass, jlong j_p) { |
- OwnedFactoryAndThreads* factory = |
- reinterpret_cast<OwnedFactoryAndThreads*>(j_p); |
- factory->InvokeJavaCallbacksOnFactoryThreads(); |
-} |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreateLocalMediaStream) |
-(JNIEnv* jni, jclass, jlong native_factory, jstring label) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- rtc::scoped_refptr<webrtc::MediaStreamInterface> stream( |
- factory->CreateLocalMediaStream(JavaToStdString(jni, label))); |
- return (jlong)stream.release(); |
-} |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreateAudioSource) |
-(JNIEnv* jni, jclass, jlong native_factory, jobject j_constraints) { |
- std::unique_ptr<MediaConstraintsJni> constraints( |
- new MediaConstraintsJni(jni, j_constraints)); |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- cricket::AudioOptions options; |
- CopyConstraintsIntoAudioOptions(constraints.get(), &options); |
- rtc::scoped_refptr<webrtc::AudioSourceInterface> source( |
- factory->CreateAudioSource(options)); |
- return (jlong)source.release(); |
-} |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreateAudioTrack) |
-(JNIEnv* jni, jclass, jlong native_factory, jstring id, jlong native_source) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- rtc::scoped_refptr<webrtc::AudioTrackInterface> track( |
- factory->CreateAudioTrack( |
- JavaToStdString(jni, id), |
- reinterpret_cast<webrtc::AudioSourceInterface*>(native_source))); |
- return (jlong)track.release(); |
-} |
- |
-JOW(jboolean, PeerConnectionFactory_nativeStartAecDump) |
-(JNIEnv* jni, |
- jclass, |
- jlong native_factory, |
- jint file, |
- jint filesize_limit_bytes) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- return factory->StartAecDump(file, filesize_limit_bytes); |
-} |
- |
-JOW(void, PeerConnectionFactory_nativeStopAecDump) |
-(JNIEnv* jni, jclass, jlong native_factory) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- factory->StopAecDump(); |
-} |
- |
-JOW(void, PeerConnectionFactory_nativeSetOptions) |
-(JNIEnv* jni, jclass, jlong native_factory, jobject options) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory( |
- factoryFromJava(native_factory)); |
- webrtc::PeerConnectionFactoryInterface::Options options_to_set = |
- JavaToNativePeerConnectionFactoryOptions(jni, options); |
- factory->SetOptions(options_to_set); |
- |
- if (options_to_set.disable_network_monitor) { |
- OwnedFactoryAndThreads* owner = |
- reinterpret_cast<OwnedFactoryAndThreads*>(native_factory); |
- if (owner->network_monitor_factory()) { |
- rtc::NetworkMonitorFactory::ReleaseFactory( |
- owner->network_monitor_factory()); |
- owner->clear_network_monitor_factory(); |
- } |
- } |
-} |
- |
-JOW(jlong, PeerConnectionFactory_nativeCreatePeerConnection) |
-(JNIEnv* jni, |
- jclass, |
- jlong factory, |
- jobject j_rtc_config, |
- jobject j_constraints, |
- jlong observer_p) { |
- rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> f( |
- reinterpret_cast<webrtc::PeerConnectionFactoryInterface*>( |
- factoryFromJava(factory))); |
- |
- webrtc::PeerConnectionInterface::RTCConfiguration rtc_config( |
- webrtc::PeerConnectionInterface::RTCConfigurationType::kAggressive); |
- JavaToNativeRTCConfiguration(jni, j_rtc_config, &rtc_config); |
- |
- jclass j_rtc_config_class = GetObjectClass(jni, j_rtc_config); |
- jfieldID j_key_type_id = GetFieldID(jni, j_rtc_config_class, "keyType", |
- "Lorg/webrtc/PeerConnection$KeyType;"); |
- jobject j_key_type = GetObjectField(jni, j_rtc_config, j_key_type_id); |
- |
- // Generate non-default certificate. |
- rtc::KeyType key_type = JavaToNativeKeyType(jni, j_key_type); |
- if (key_type != rtc::KT_DEFAULT) { |
- rtc::scoped_refptr<rtc::RTCCertificate> certificate = |
- rtc::RTCCertificateGenerator::GenerateCertificate( |
- rtc::KeyParams(key_type), rtc::Optional<uint64_t>()); |
- if (!certificate) { |
- LOG(LS_ERROR) << "Failed to generate certificate. KeyType: " << key_type; |
- return 0; |
- } |
- rtc_config.certificates.push_back(certificate); |
- } |
- |
- PeerConnectionObserverJni* observer = |
- reinterpret_cast<PeerConnectionObserverJni*>(observer_p); |
- observer->SetConstraints(new MediaConstraintsJni(jni, j_constraints)); |
- CopyConstraintsIntoRtcConfiguration(observer->constraints(), &rtc_config); |
- rtc::scoped_refptr<webrtc::PeerConnectionInterface> pc( |
- f->CreatePeerConnection(rtc_config, nullptr, nullptr, observer)); |
- return (jlong)pc.release(); |
-} |
- |
-} // namespace webrtc_jni |