blob: bd77f74882a07093bad42b17d23869a083b99cea [file] [log] [blame]
Mirko Bonadei3cf8f3e2018-11-19 08:17:511/*
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 08:00:1312
Mirko Bonadei317a1f02019-09-17 15:06:1813#include <memory>
Mirko Bonadei2ff3f492018-11-22 08:00:1314#include <utility>
15
Danil Chapovalov779c9de2023-11-02 16:29:2116#include "api/enable_media.h"
Steve Anton10542f22019-01-11 17:11:0017#include "api/peer_connection_interface.h"
Danil Chapovalov5bf58062019-06-18 14:43:3718#include "api/rtc_event_log/rtc_event_log_factory.h"
Mirko Bonadeid9708072019-01-25 19:26:4819#include "api/scoped_refptr.h"
Danil Chapovalov5bf58062019-06-18 14:43:3720#include "api/task_queue/default_task_queue_factory.h"
Erik Språngceb44952020-09-22 09:36:3521#include "api/transport/field_trial_based_config.h"
Mirko Bonadei2ff3f492018-11-22 08:00:1322#include "modules/audio_device/include/audio_device.h"
23#include "modules/audio_processing/include/audio_processing.h"
Mirko Bonadei2ff3f492018-11-22 08:00:1324#include "rtc_base/thread.h"
25
26namespace webrtc {
27
Mirko Bonadei2ff3f492018-11-22 08:00:1328rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
29 rtc::Thread* network_thread,
30 rtc::Thread* worker_thread,
31 rtc::Thread* signaling_thread,
32 rtc::scoped_refptr<AudioDeviceModule> default_adm,
33 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
34 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
35 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
36 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
37 rtc::scoped_refptr<AudioMixer> audio_mixer,
Olga Sharonova09ceed22020-09-30 16:27:3938 rtc::scoped_refptr<AudioProcessing> audio_processing,
Danil Chapovalov9aa11532023-10-30 12:22:2039 std::unique_ptr<AudioFrameProcessor> audio_frame_processor,
Jonas Oreland6c7f9842022-04-19 15:24:1040 std::unique_ptr<FieldTrialsView> field_trials) {
Ali Tofigh4b681942022-08-23 10:57:1641 if (!field_trials) {
42 field_trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
43 }
44
Mirko Bonadei2ff3f492018-11-22 08:00:1345 PeerConnectionFactoryDependencies dependencies;
46 dependencies.network_thread = network_thread;
47 dependencies.worker_thread = worker_thread;
48 dependencies.signaling_thread = signaling_thread;
Ali Tofigh4b681942022-08-23 10:57:1649 dependencies.task_queue_factory =
50 CreateDefaultTaskQueueFactory(field_trials.get());
Danil Chapovalov151003d2023-12-07 19:01:0651 dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>();
Ali Tofigh4b681942022-08-23 10:57:1652 dependencies.trials = std::move(field_trials);
Danil Chapovalov5bf58062019-06-18 14:43:3753
Niels Möllerb02e1ac2022-02-04 13:29:5054 if (network_thread) {
55 // TODO(bugs.webrtc.org/13145): Add an rtc::SocketFactory* argument.
56 dependencies.socket_factory = network_thread->socketserver();
57 }
Danil Chapovalov779c9de2023-11-02 16:29:2158 dependencies.adm = std::move(default_adm);
59 dependencies.audio_encoder_factory = std::move(audio_encoder_factory);
60 dependencies.audio_decoder_factory = std::move(audio_decoder_factory);
61 dependencies.audio_frame_processor = std::move(audio_frame_processor);
Danil Chapovalov5bf58062019-06-18 14:43:3762 if (audio_processing) {
Danil Chapovalov779c9de2023-11-02 16:29:2163 dependencies.audio_processing = std::move(audio_processing);
Danil Chapovalov5bf58062019-06-18 14:43:3764 } else {
Danil Chapovalov779c9de2023-11-02 16:29:2165 dependencies.audio_processing = AudioProcessingBuilder().Create();
Danil Chapovalov5bf58062019-06-18 14:43:3766 }
Danil Chapovalov779c9de2023-11-02 16:29:2167 dependencies.audio_mixer = std::move(audio_mixer);
68 dependencies.video_encoder_factory = std::move(video_encoder_factory);
69 dependencies.video_decoder_factory = std::move(video_decoder_factory);
70 EnableMedia(dependencies);
Danil Chapovalov5bf58062019-06-18 14:43:3771
Mirko Bonadei2ff3f492018-11-22 08:00:1372 return CreateModularPeerConnectionFactory(std::move(dependencies));
73}
74
Mirko Bonadei2ff3f492018-11-22 08:00:1375} // namespace webrtc