From aaa114368e1bddfb406bd348e7615e781cf0b63b Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 17 May 2019 13:20:14 +0200 Subject: [PATCH] Use single argument PeerConnectionFactory factory in objc code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10284 Change-Id: If656af94636731d1caa208db78e460740edbf83c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137422 Reviewed-by: Kári Helgason Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#28002} --- examples/BUILD.gn | 2 +- .../objcnativeapi/objc/objc_call_client.mm | 49 ++++++++--------- sdk/BUILD.gn | 1 + .../RTCPeerConnectionFactory.mm | 55 +++++++++---------- 4 files changed, 50 insertions(+), 57 deletions(-) diff --git a/examples/BUILD.gn b/examples/BUILD.gn index 83ecc89844..a14c206475 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -460,7 +460,7 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "../api:scoped_refptr", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", - "../api/video:builtin_video_bitrate_allocator_factory", + "../api/task_queue:default_task_queue_factory", "../logging:rtc_event_log_impl_base", "../media:rtc_audio_video", "../modules/audio_processing", diff --git a/examples/objcnativeapi/objc/objc_call_client.mm b/examples/objcnativeapi/objc/objc_call_client.mm index cbe2bab9bf..294f0814c9 100644 --- a/examples/objcnativeapi/objc/objc_call_client.mm +++ b/examples/objcnativeapi/objc/objc_call_client.mm @@ -21,7 +21,7 @@ #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/peer_connection_interface.h" -#include "api/video/builtin_video_bitrate_allocator_factory.h" +#include "api/task_queue/default_task_queue_factory.h" #include "logging/rtc_event_log/rtc_event_log_factory.h" #include "media/engine/webrtc_media_engine.h" #include "modules/audio_processing/include/audio_processing.h" @@ -113,31 +113,26 @@ void ObjCCallClient::CreatePeerConnectionFactory() { signaling_thread_->SetName("signaling_thread", nullptr); RTC_CHECK(signaling_thread_->Start()) << "Failed to start thread"; - std::unique_ptr videoDecoderFactory = - webrtc::ObjCToNativeVideoDecoderFactory([[RTCDefaultVideoDecoderFactory alloc] init]); - std::unique_ptr videoEncoderFactory = + webrtc::PeerConnectionFactoryDependencies dependencies; + dependencies.network_thread = network_thread_.get(); + dependencies.worker_thread = worker_thread_.get(); + dependencies.signaling_thread = signaling_thread_.get(); + dependencies.task_queue_factory = webrtc::CreateDefaultTaskQueueFactory(); + cricket::MediaEngineDependencies media_deps; + media_deps.task_queue_factory = dependencies.task_queue_factory.get(); + media_deps.audio_encoder_factory = webrtc::CreateBuiltinAudioEncoderFactory(); + media_deps.audio_decoder_factory = webrtc::CreateBuiltinAudioDecoderFactory(); + media_deps.video_encoder_factory = webrtc::ObjCToNativeVideoEncoderFactory([[RTCDefaultVideoEncoderFactory alloc] init]); - - std::unique_ptr videoBitrateAllocatorFactory = - webrtc::CreateBuiltinVideoBitrateAllocatorFactory(); - - std::unique_ptr media_engine = - cricket::WebRtcMediaEngineFactory::Create(nullptr /* adm */, - webrtc::CreateBuiltinAudioEncoderFactory(), - webrtc::CreateBuiltinAudioDecoderFactory(), - std::move(videoEncoderFactory), - std::move(videoDecoderFactory), - std::move(videoBitrateAllocatorFactory), - nullptr /* audio_mixer */, - webrtc::AudioProcessingBuilder().Create()); - RTC_LOG(LS_INFO) << "Media engine created: " << media_engine.get(); - - pcf_ = webrtc::CreateModularPeerConnectionFactory(network_thread_.get(), - worker_thread_.get(), - signaling_thread_.get(), - std::move(media_engine), - webrtc::CreateCallFactory(), - webrtc::CreateRtcEventLogFactory()); + media_deps.video_decoder_factory = + webrtc::ObjCToNativeVideoDecoderFactory([[RTCDefaultVideoDecoderFactory alloc] init]); + media_deps.audio_processing = webrtc::AudioProcessingBuilder().Create(); + dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_deps)); + RTC_LOG(LS_INFO) << "Media engine created: " << dependencies.media_engine.get(); + dependencies.call_factory = webrtc::CreateCallFactory(); + dependencies.event_log_factory = + absl::make_unique(dependencies.task_queue_factory.get()); + pcf_ = webrtc::CreateModularPeerConnectionFactory(std::move(dependencies)); RTC_LOG(LS_INFO) << "PeerConnectionFactory created: " << pcf_; } @@ -147,8 +142,8 @@ void ObjCCallClient::CreatePeerConnection() { config.sdp_semantics = webrtc::SdpSemantics::kUnifiedPlan; // DTLS SRTP has to be disabled for loopback to work. config.enable_dtls_srtp = false; - pc_ = pcf_->CreatePeerConnection( - config, nullptr /* port_allocator */, nullptr /* cert_generator */, pc_observer_.get()); + webrtc::PeerConnectionDependencies pc_dependencies(pc_observer_.get()); + pc_ = pcf_->CreatePeerConnection(config, std::move(pc_dependencies)); RTC_LOG(LS_INFO) << "PeerConnection created: " << pc_; rtc::scoped_refptr local_video_track = diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 4cd3783143..784101eb91 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -912,6 +912,7 @@ if (is_ios || is_mac) { "../api/audio_codecs:audio_codecs_api", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", + "../api/task_queue:default_task_queue_factory", "../api/video:video_frame", "../api/video_codecs:video_codecs_api", "../common_video", diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm index 18d211fb9e..7fcd3c507b 100644 --- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm +++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm @@ -28,8 +28,10 @@ #import "components/video_codec/RTCVideoEncoderFactoryH264.h" // The no-media version PeerConnectionFactory doesn't depend on these files, but the gn check tool // is not smart enough to take the #ifdef into account. +#include "absl/memory/memory.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" // nogncheck #include "api/audio_codecs/builtin_audio_encoder_factory.h" // nogncheck +#include "api/task_queue/default_task_queue_factory.h" #include "logging/rtc_event_log/rtc_event_log_factory.h" #include "modules/audio_device/include/audio_device.h" // nogncheck #include "modules/audio_processing/include/audio_processing.h" // nogncheck @@ -139,13 +141,11 @@ - (instancetype)initWithNoMedia { if (self = [self initNative]) { - _nativeFactory = webrtc::CreateModularPeerConnectionFactory( - _networkThread.get(), - _workerThread.get(), - _signalingThread.get(), - std::unique_ptr(), - std::unique_ptr(), - std::unique_ptr()); + webrtc::PeerConnectionFactoryDependencies dependencies; + dependencies.network_thread = _networkThread.get(); + dependencies.worker_thread = _workerThread.get(); + dependencies.signaling_thread = _signalingThread.get(); + _nativeFactory = webrtc::CreateModularPeerConnectionFactory(std::move(dependencies)); NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!"); } return self; @@ -209,39 +209,36 @@ networkControllerFactory mediaTransportFactory:(std::unique_ptr) mediaTransportFactory { -#ifdef HAVE_NO_MEDIA - return [self initWithNoMedia]; -#else if (self = [self initNative]) { - if (!audioProcessingModule) audioProcessingModule = webrtc::AudioProcessingBuilder().Create(); - - std::unique_ptr media_engine = - cricket::WebRtcMediaEngineFactory::Create(audioDeviceModule, - audioEncoderFactory, - audioDecoderFactory, - std::move(videoEncoderFactory), - std::move(videoDecoderFactory), - nullptr, // audio mixer - audioProcessingModule); - - std::unique_ptr call_factory = webrtc::CreateCallFactory(); - - std::unique_ptr event_log_factory = - webrtc::CreateRtcEventLogFactory(); webrtc::PeerConnectionFactoryDependencies dependencies; dependencies.network_thread = _networkThread.get(); dependencies.worker_thread = _workerThread.get(); dependencies.signaling_thread = _signalingThread.get(); - dependencies.media_engine = std::move(media_engine); - dependencies.call_factory = std::move(call_factory); - dependencies.event_log_factory = std::move(event_log_factory); +#ifndef HAVE_NO_MEDIA + dependencies.task_queue_factory = webrtc::CreateDefaultTaskQueueFactory(); + cricket::MediaEngineDependencies media_deps; + media_deps.adm = std::move(audioDeviceModule); + media_deps.task_queue_factory = dependencies.task_queue_factory.get(); + media_deps.audio_encoder_factory = std::move(audioEncoderFactory); + media_deps.audio_decoder_factory = std::move(audioDecoderFactory); + media_deps.video_encoder_factory = std::move(videoEncoderFactory); + media_deps.video_decoder_factory = std::move(videoDecoderFactory); + if (audioProcessingModule) { + media_deps.audio_processing = std::move(audioProcessingModule); + } else { + media_deps.audio_processing = webrtc::AudioProcessingBuilder().Create(); + } + dependencies.media_engine = cricket::CreateMediaEngine(std::move(media_deps)); + dependencies.call_factory = webrtc::CreateCallFactory(); + dependencies.event_log_factory = + absl::make_unique(dependencies.task_queue_factory.get()); dependencies.network_controller_factory = std::move(networkControllerFactory); dependencies.media_transport_factory = std::move(mediaTransportFactory); +#endif _nativeFactory = webrtc::CreateModularPeerConnectionFactory(std::move(dependencies)); NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!"); } return self; -#endif } - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints {