xref: /aosp_15_r20/external/webrtc/api/create_peerconnection_factory.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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/call/call_factory_interface.h"
17 #include "api/peer_connection_interface.h"
18 #include "api/rtc_event_log/rtc_event_log_factory.h"
19 #include "api/scoped_refptr.h"
20 #include "api/task_queue/default_task_queue_factory.h"
21 #include "api/transport/field_trial_based_config.h"
22 #include "media/base/media_engine.h"
23 #include "media/engine/webrtc_media_engine.h"
24 #include "modules/audio_device/include/audio_device.h"
25 #include "modules/audio_processing/include/audio_processing.h"
26 #include "rtc_base/thread.h"
27 
28 namespace webrtc {
29 
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 rtc::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,
40     rtc::scoped_refptr<AudioProcessing> audio_processing,
41     AudioFrameProcessor* audio_frame_processor,
42     std::unique_ptr<FieldTrialsView> field_trials) {
43   if (!field_trials) {
44     field_trials = std::make_unique<webrtc::FieldTrialBasedConfig>();
45   }
46 
47   PeerConnectionFactoryDependencies dependencies;
48   dependencies.network_thread = network_thread;
49   dependencies.worker_thread = worker_thread;
50   dependencies.signaling_thread = signaling_thread;
51   dependencies.task_queue_factory =
52       CreateDefaultTaskQueueFactory(field_trials.get());
53   dependencies.call_factory = CreateCallFactory();
54   dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
55       dependencies.task_queue_factory.get());
56   dependencies.trials = std::move(field_trials);
57 
58   if (network_thread) {
59     // TODO(bugs.webrtc.org/13145): Add an rtc::SocketFactory* argument.
60     dependencies.socket_factory = network_thread->socketserver();
61   }
62   cricket::MediaEngineDependencies media_dependencies;
63   media_dependencies.task_queue_factory = dependencies.task_queue_factory.get();
64   media_dependencies.adm = std::move(default_adm);
65   media_dependencies.audio_encoder_factory = std::move(audio_encoder_factory);
66   media_dependencies.audio_decoder_factory = std::move(audio_decoder_factory);
67   media_dependencies.audio_frame_processor = audio_frame_processor;
68   if (audio_processing) {
69     media_dependencies.audio_processing = std::move(audio_processing);
70   } else {
71     media_dependencies.audio_processing = AudioProcessingBuilder().Create();
72   }
73   media_dependencies.audio_mixer = std::move(audio_mixer);
74   media_dependencies.video_encoder_factory = std::move(video_encoder_factory);
75   media_dependencies.video_decoder_factory = std::move(video_decoder_factory);
76   media_dependencies.trials = dependencies.trials.get();
77   dependencies.media_engine =
78       cricket::CreateMediaEngine(std::move(media_dependencies));
79 
80   return CreateModularPeerConnectionFactory(std::move(dependencies));
81 }
82 
83 }  // namespace webrtc
84