From 3391072e0935752f047b8a681cbecd5509110368 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Tue, 18 Jun 2019 18:12:25 +0200 Subject: [PATCH] Use DefaultTaskQueueFactory in CreatePeerConnectionFactoryForJava instead of using components that rely on GlobalTaskQueueFactory Bug: webrtc:10284 Change-Id: Icf7d1758b7f3ff6277b6a6d1b152715f0ab50969 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/142800 Reviewed-by: Magnus Jedvert Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#28367} --- sdk/android/BUILD.gn | 4 +- .../src/jni/pc/peer_connection_factory.cc | 41 ++++++++++--------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 22bb67574b..86461e4c0d 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -758,10 +758,10 @@ if (is_android) { "../../api:callfactory_api", "../../api:libjingle_peerconnection_api", "../../api:rtc_event_log_output_file", + "../../api/rtc_event_log:rtc_event_log_factory", + "../../api/task_queue:default_task_queue_factory", "../../api/video_codecs:video_codecs_api", "../../call:call_interfaces", - "../../logging:rtc_event_log_api", - "../../logging:rtc_event_log_impl_base", "../../media:rtc_audio_video", "../../media:rtc_data", "../../media:rtc_media_base", diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc index 64af0afd99..9f30fe6594 100644 --- a/sdk/android/src/jni/pc/peer_connection_factory.cc +++ b/sdk/android/src/jni/pc/peer_connection_factory.cc @@ -22,9 +22,10 @@ // We don't depend on the audio processing module implementation. // The user may pass in a nullptr. #include "api/call/call_factory_interface.h" +#include "api/rtc_event_log/rtc_event_log_factory.h" +#include "api/task_queue/default_task_queue_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" -#include "logging/rtc_event_log/rtc_event_log_factory.h" #include "media/engine/webrtc_media_engine.h" #include "modules/audio_device/include/audio_device.h" #include "modules/audio_processing/include/audio_processing.h" @@ -295,27 +296,14 @@ ScopedJavaLocalRef CreatePeerConnectionFactoryForJava( rtc::NetworkMonitorFactory::SetFactory(network_monitor_factory); } - rtc::scoped_refptr audio_mixer = nullptr; - std::unique_ptr call_factory = - webrtc::CreateCallFactory(); - std::unique_ptr rtc_event_log_factory = - webrtc::CreateRtcEventLogFactory(); - - std::unique_ptr media_engine = - cricket::WebRtcMediaEngineFactory::Create( - audio_device_module, audio_encoder_factory, audio_decoder_factory, - std::unique_ptr( - CreateVideoEncoderFactory(jni, jencoder_factory)), - std::unique_ptr( - CreateVideoDecoderFactory(jni, jdecoder_factory)), - audio_mixer, audio_processor); PeerConnectionFactoryDependencies dependencies; dependencies.network_thread = network_thread.get(); dependencies.worker_thread = worker_thread.get(); dependencies.signaling_thread = signaling_thread.get(); - dependencies.media_engine = std::move(media_engine); - dependencies.call_factory = std::move(call_factory); - dependencies.event_log_factory = std::move(rtc_event_log_factory); + dependencies.task_queue_factory = CreateDefaultTaskQueueFactory(); + dependencies.call_factory = CreateCallFactory(); + dependencies.event_log_factory = absl::make_unique( + dependencies.task_queue_factory.get()); dependencies.fec_controller_factory = std::move(fec_controller_factory); dependencies.network_controller_factory = std::move(network_controller_factory); @@ -323,8 +311,21 @@ ScopedJavaLocalRef CreatePeerConnectionFactoryForJava( std::move(network_state_predictor_factory); dependencies.media_transport_factory = std::move(media_transport_factory); - rtc::scoped_refptr factory( - CreateModularPeerConnectionFactory(std::move(dependencies))); + cricket::MediaEngineDependencies media_dependencies; + media_dependencies.task_queue_factory = dependencies.task_queue_factory.get(); + media_dependencies.adm = std::move(audio_device_module); + media_dependencies.audio_encoder_factory = std::move(audio_encoder_factory); + media_dependencies.audio_decoder_factory = std::move(audio_decoder_factory); + media_dependencies.audio_processing = std::move(audio_processor); + media_dependencies.video_encoder_factory = + absl::WrapUnique(CreateVideoEncoderFactory(jni, jencoder_factory)); + media_dependencies.video_decoder_factory = + absl::WrapUnique(CreateVideoDecoderFactory(jni, jdecoder_factory)); + dependencies.media_engine = + cricket::CreateMediaEngine(std::move(media_dependencies)); + + rtc::scoped_refptr factory = + CreateModularPeerConnectionFactory(std::move(dependencies)); RTC_CHECK(factory) << "Failed to create the peer connection factory; " << "WebRTC/libjingle init likely failed on this device";