1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker * Copyright 2018 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker *
4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker */
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker #include "api/create_peerconnection_factory.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker #include <memory>
14*d9f75844SAndroid Build Coastguard Worker #include <utility>
15*d9f75844SAndroid Build Coastguard Worker
16*d9f75844SAndroid Build Coastguard Worker #include "api/call/call_factory_interface.h"
17*d9f75844SAndroid Build Coastguard Worker #include "api/peer_connection_interface.h"
18*d9f75844SAndroid Build Coastguard Worker #include "api/rtc_event_log/rtc_event_log_factory.h"
19*d9f75844SAndroid Build Coastguard Worker #include "api/scoped_refptr.h"
20*d9f75844SAndroid Build Coastguard Worker #include "api/task_queue/default_task_queue_factory.h"
21*d9f75844SAndroid Build Coastguard Worker #include "api/transport/field_trial_based_config.h"
22*d9f75844SAndroid Build Coastguard Worker #include "media/base/media_engine.h"
23*d9f75844SAndroid Build Coastguard Worker #include "media/engine/webrtc_media_engine.h"
24*d9f75844SAndroid Build Coastguard Worker #include "modules/audio_device/include/audio_device.h"
25*d9f75844SAndroid Build Coastguard Worker #include "modules/audio_processing/include/audio_processing.h"
26*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/thread.h"
27*d9f75844SAndroid Build Coastguard Worker
28*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
29*d9f75844SAndroid Build Coastguard Worker
CreatePeerConnectionFactory(rtc::Thread * network_thread,rtc::Thread * worker_thread,rtc::Thread * signaling_thread,rtc::scoped_refptr<AudioDeviceModule> default_adm,rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,std::unique_ptr<VideoEncoderFactory> video_encoder_factory,std::unique_ptr<VideoDecoderFactory> video_decoder_factory,rtc::scoped_refptr<AudioMixer> audio_mixer,rtc::scoped_refptr<AudioProcessing> audio_processing,AudioFrameProcessor * audio_frame_processor,std::unique_ptr<FieldTrialsView> field_trials)30*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
31*d9f75844SAndroid Build Coastguard Worker rtc::Thread* network_thread,
32*d9f75844SAndroid Build Coastguard Worker rtc::Thread* worker_thread,
33*d9f75844SAndroid Build Coastguard Worker rtc::Thread* signaling_thread,
34*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioDeviceModule> default_adm,
35*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
36*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
37*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
38*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
39*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioMixer> audio_mixer,
40*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioProcessing> audio_processing,
41*d9f75844SAndroid Build Coastguard Worker AudioFrameProcessor* audio_frame_processor,
42*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<FieldTrialsView> field_trials) {
43*d9f75844SAndroid Build Coastguard Worker if (!field_trials) {
44*d9f75844SAndroid Build Coastguard Worker field_trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
45*d9f75844SAndroid Build Coastguard Worker }
46*d9f75844SAndroid Build Coastguard Worker
47*d9f75844SAndroid Build Coastguard Worker PeerConnectionFactoryDependencies dependencies;
48*d9f75844SAndroid Build Coastguard Worker dependencies.network_thread = network_thread;
49*d9f75844SAndroid Build Coastguard Worker dependencies.worker_thread = worker_thread;
50*d9f75844SAndroid Build Coastguard Worker dependencies.signaling_thread = signaling_thread;
51*d9f75844SAndroid Build Coastguard Worker dependencies.task_queue_factory =
52*d9f75844SAndroid Build Coastguard Worker CreateDefaultTaskQueueFactory(field_trials.get());
53*d9f75844SAndroid Build Coastguard Worker dependencies.call_factory = CreateCallFactory();
54*d9f75844SAndroid Build Coastguard Worker dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
55*d9f75844SAndroid Build Coastguard Worker dependencies.task_queue_factory.get());
56*d9f75844SAndroid Build Coastguard Worker dependencies.trials = std::move(field_trials);
57*d9f75844SAndroid Build Coastguard Worker
58*d9f75844SAndroid Build Coastguard Worker if (network_thread) {
59*d9f75844SAndroid Build Coastguard Worker // TODO(bugs.webrtc.org/13145): Add an rtc::SocketFactory* argument.
60*d9f75844SAndroid Build Coastguard Worker dependencies.socket_factory = network_thread->socketserver();
61*d9f75844SAndroid Build Coastguard Worker }
62*d9f75844SAndroid Build Coastguard Worker cricket::MediaEngineDependencies media_dependencies;
63*d9f75844SAndroid Build Coastguard Worker media_dependencies.task_queue_factory = dependencies.task_queue_factory.get();
64*d9f75844SAndroid Build Coastguard Worker media_dependencies.adm = std::move(default_adm);
65*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_encoder_factory = std::move(audio_encoder_factory);
66*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_decoder_factory = std::move(audio_decoder_factory);
67*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_frame_processor = audio_frame_processor;
68*d9f75844SAndroid Build Coastguard Worker if (audio_processing) {
69*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_processing = std::move(audio_processing);
70*d9f75844SAndroid Build Coastguard Worker } else {
71*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_processing = AudioProcessingBuilder().Create();
72*d9f75844SAndroid Build Coastguard Worker }
73*d9f75844SAndroid Build Coastguard Worker media_dependencies.audio_mixer = std::move(audio_mixer);
74*d9f75844SAndroid Build Coastguard Worker media_dependencies.video_encoder_factory = std::move(video_encoder_factory);
75*d9f75844SAndroid Build Coastguard Worker media_dependencies.video_decoder_factory = std::move(video_decoder_factory);
76*d9f75844SAndroid Build Coastguard Worker media_dependencies.trials = dependencies.trials.get();
77*d9f75844SAndroid Build Coastguard Worker dependencies.media_engine =
78*d9f75844SAndroid Build Coastguard Worker cricket::CreateMediaEngine(std::move(media_dependencies));
79*d9f75844SAndroid Build Coastguard Worker
80*d9f75844SAndroid Build Coastguard Worker return CreateModularPeerConnectionFactory(std::move(dependencies));
81*d9f75844SAndroid Build Coastguard Worker }
82*d9f75844SAndroid Build Coastguard Worker
83*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc
84