create_peerconnection_factory.cc (3294B)
1 /* 2 * Copyright 2018 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "api/create_peerconnection_factory.h" 12 13 #include <memory> 14 #include <utility> 15 16 #include "api/audio/audio_device.h" 17 #include "api/audio/audio_mixer.h" 18 #include "api/audio/audio_processing.h" 19 #include "api/audio/builtin_audio_processing_builder.h" 20 #include "api/audio_codecs/audio_decoder_factory.h" 21 #include "api/audio_codecs/audio_encoder_factory.h" 22 #include "api/create_modular_peer_connection_factory.h" 23 #include "api/enable_media.h" 24 #include "api/environment/environment_factory.h" 25 #include "api/field_trials_view.h" 26 #include "api/peer_connection_interface.h" 27 #include "api/rtc_event_log/rtc_event_log_factory.h" 28 #include "api/scoped_refptr.h" 29 #include "api/video_codecs/video_decoder_factory.h" 30 #include "api/video_codecs/video_encoder_factory.h" 31 #include "rtc_base/thread.h" 32 33 namespace webrtc { 34 35 scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory( 36 Thread* network_thread, 37 Thread* worker_thread, 38 Thread* signaling_thread, 39 scoped_refptr<AudioDeviceModule> default_adm, 40 scoped_refptr<AudioEncoderFactory> audio_encoder_factory, 41 scoped_refptr<AudioDecoderFactory> audio_decoder_factory, 42 std::unique_ptr<VideoEncoderFactory> video_encoder_factory, 43 std::unique_ptr<VideoDecoderFactory> video_decoder_factory, 44 scoped_refptr<AudioMixer> audio_mixer, 45 scoped_refptr<AudioProcessing> audio_processing, 46 std::unique_ptr<AudioFrameProcessor> audio_frame_processor, 47 std::unique_ptr<FieldTrialsView> field_trials) { 48 PeerConnectionFactoryDependencies dependencies; 49 dependencies.network_thread = network_thread; 50 dependencies.worker_thread = worker_thread; 51 dependencies.signaling_thread = signaling_thread; 52 dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(); 53 dependencies.env = CreateEnvironment(std::move(field_trials)); 54 55 if (network_thread) { 56 // TODO(bugs.webrtc.org/13145): Add an SocketFactory* argument. 57 dependencies.socket_factory = network_thread->socketserver(); 58 } 59 dependencies.adm = std::move(default_adm); 60 dependencies.audio_encoder_factory = std::move(audio_encoder_factory); 61 dependencies.audio_decoder_factory = std::move(audio_decoder_factory); 62 dependencies.audio_frame_processor = std::move(audio_frame_processor); 63 if (audio_processing != nullptr) { 64 dependencies.audio_processing_builder = 65 CustomAudioProcessing(std::move(audio_processing)); 66 } else { 67 #ifndef WEBRTC_EXCLUDE_AUDIO_PROCESSING_MODULE 68 dependencies.audio_processing_builder = 69 std::make_unique<BuiltinAudioProcessingBuilder>(); 70 #endif 71 } 72 dependencies.audio_mixer = std::move(audio_mixer); 73 dependencies.video_encoder_factory = std::move(video_encoder_factory); 74 dependencies.video_decoder_factory = std::move(video_decoder_factory); 75 EnableMedia(dependencies); 76 77 return CreateModularPeerConnectionFactory(std::move(dependencies)); 78 } 79 80 } // namespace webrtc