blob: 4a01b2f3c93f1a3313d924ed224fcd6d2bb0e6e3 [file] [log] [blame]
Mirko Bonadei3cf8f3e2018-11-19 09:17:51 +01001/*
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"
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010012
Mirko Bonadei317a1f02019-09-17 17:06:18 +020013#include <memory>
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010014#include <utility>
15
Steve Anton10542f22019-01-11 09:11:00 -080016#include "api/call/call_factory_interface.h"
Steve Anton10542f22019-01-11 09:11:00 -080017#include "api/peer_connection_interface.h"
Danil Chapovalov5bf58062019-06-18 16:43:37 +020018#include "api/rtc_event_log/rtc_event_log_factory.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010019#include "api/scoped_refptr.h"
Danil Chapovalov5bf58062019-06-18 16:43:37 +020020#include "api/task_queue/default_task_queue_factory.h"
Erik Språngceb44952020-09-22 11:36:35 +020021#include "api/transport/field_trial_based_config.h"
Steve Anton10542f22019-01-11 09:11:00 -080022#include "media/base/media_engine.h"
23#include "media/engine/webrtc_media_engine.h"
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010024#include "modules/audio_device/include/audio_device.h"
25#include "modules/audio_processing/include/audio_processing.h"
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010026#include "rtc_base/thread.h"
27
28namespace webrtc {
29
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010030rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
31 rtc::Thread* network_thread,
32 rtc::Thread* worker_thread,
33 rtc::Thread* signaling_thread,
34 rtc::scoped_refptr<AudioDeviceModule> default_adm,
35 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
36 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
37 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
38 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
39 rtc::scoped_refptr<AudioMixer> audio_mixer,
Olga Sharonova09ceed22020-09-30 18:27:39 +020040 rtc::scoped_refptr<AudioProcessing> audio_processing,
Jonas Oreland6c7f9842022-04-19 17:24:10 +020041 AudioFrameProcessor* audio_frame_processor,
42 std::unique_ptr<FieldTrialsView> field_trials) {
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010043 PeerConnectionFactoryDependencies dependencies;
44 dependencies.network_thread = network_thread;
45 dependencies.worker_thread = worker_thread;
46 dependencies.signaling_thread = signaling_thread;
Ali Tofighe7e3d592022-08-25 10:09:48 +000047 dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
Danil Chapovalov5bf58062019-06-18 16:43:37 +020048 dependencies.call_factory = CreateCallFactory();
Mirko Bonadei317a1f02019-09-17 17:06:18 +020049 dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
Danil Chapovalov5bf58062019-06-18 16:43:37 +020050 dependencies.task_queue_factory.get());
Ali Tofighe7e3d592022-08-25 10:09:48 +000051 if (field_trials) {
52 dependencies.trials = std::move(field_trials);
53 } else {
54 dependencies.trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
55 }
Danil Chapovalov5bf58062019-06-18 16:43:37 +020056
Niels Möllerb02e1ac2022-02-04 14:29:50 +010057 if (network_thread) {
58 // TODO(bugs.webrtc.org/13145): Add an rtc::SocketFactory* argument.
59 dependencies.socket_factory = network_thread->socketserver();
60 }
Danil Chapovalov5bf58062019-06-18 16:43:37 +020061 cricket::MediaEngineDependencies media_dependencies;
62 media_dependencies.task_queue_factory = dependencies.task_queue_factory.get();
63 media_dependencies.adm = std::move(default_adm);
64 media_dependencies.audio_encoder_factory = std::move(audio_encoder_factory);
65 media_dependencies.audio_decoder_factory = std::move(audio_decoder_factory);
Olga Sharonova09ceed22020-09-30 18:27:39 +020066 media_dependencies.audio_frame_processor = audio_frame_processor;
Danil Chapovalov5bf58062019-06-18 16:43:37 +020067 if (audio_processing) {
68 media_dependencies.audio_processing = std::move(audio_processing);
69 } else {
70 media_dependencies.audio_processing = AudioProcessingBuilder().Create();
71 }
72 media_dependencies.audio_mixer = std::move(audio_mixer);
73 media_dependencies.video_encoder_factory = std::move(video_encoder_factory);
74 media_dependencies.video_decoder_factory = std::move(video_decoder_factory);
Erik Språngceb44952020-09-22 11:36:35 +020075 media_dependencies.trials = dependencies.trials.get();
Danil Chapovalov5bf58062019-06-18 16:43:37 +020076 dependencies.media_engine =
77 cricket::CreateMediaEngine(std::move(media_dependencies));
78
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010079 return CreateModularPeerConnectionFactory(std::move(dependencies));
80}
81
Mirko Bonadei2ff3f492018-11-22 09:00:13 +010082} // namespace webrtc