blob: 1a6d086f6600d17c15c069da86220c29578d70f6 [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
13#include <memory>
14#include <utility>
15
16#include "api/call/callfactoryinterface.h"
17#include "api/peerconnectioninterface.h"
18#include "api/video_codecs/video_decoder_factory.h"
19#include "api/video_codecs/video_encoder_factory.h"
20#include "logging/rtc_event_log/rtc_event_log_factory.h"
21#include "logging/rtc_event_log/rtc_event_log_factory_interface.h"
22#include "media/engine/webrtcmediaengine.h"
23#include "modules/audio_device/include/audio_device.h"
24#include "modules/audio_processing/include/audio_processing.h"
25#include "rtc_base/bind.h"
26#include "rtc_base/scoped_ref_ptr.h"
27#include "rtc_base/thread.h"
28
29namespace webrtc {
30
31#if defined(USE_BUILTIN_SW_CODECS)
32rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
33 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
34 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
35 return CreatePeerConnectionFactoryWithAudioMixer(
36 nullptr /*network_thread*/, nullptr /*worker_thread*/,
37 nullptr /*signaling_thread*/, nullptr /*default_adm*/,
38 audio_encoder_factory, audio_decoder_factory,
39 nullptr /*video_encoder_factory*/, nullptr /*video_decoder_factory*/,
40 nullptr /*audio_mixer*/);
41}
42
43// Note: all the other CreatePeerConnectionFactory variants just end up calling
44// this, ultimately.
45rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
46 rtc::Thread* network_thread,
47 rtc::Thread* worker_thread,
48 rtc::Thread* signaling_thread,
49 AudioDeviceModule* default_adm,
50 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
51 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
52 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
53 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
54 rtc::scoped_refptr<AudioMixer> audio_mixer,
55 rtc::scoped_refptr<AudioProcessing> audio_processing) {
56 rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
57 if (!audio_processing_use) {
58 audio_processing_use = AudioProcessingBuilder().Create();
59 }
60
61 std::unique_ptr<cricket::MediaEngineInterface> media_engine(
62 cricket::WebRtcMediaEngineFactory::Create(
63 default_adm, audio_encoder_factory, audio_decoder_factory,
64 video_encoder_factory, video_decoder_factory, audio_mixer,
65 audio_processing_use));
66
67 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
68
69 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
70 CreateRtcEventLogFactory();
71
72 return CreateModularPeerConnectionFactory(
73 network_thread, worker_thread, signaling_thread, std::move(media_engine),
74 std::move(call_factory), std::move(event_log_factory));
75}
76
77rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
78 rtc::Thread* network_thread,
79 rtc::Thread* worker_thread,
80 rtc::Thread* signaling_thread,
81 AudioDeviceModule* default_adm,
82 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
83 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
84 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
85 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
86 rtc::scoped_refptr<AudioMixer> audio_mixer,
87 rtc::scoped_refptr<AudioProcessing> audio_processing,
88 std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory,
89 std::unique_ptr<NetworkControllerFactoryInterface>
90 network_controller_factory) {
91 rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
92 if (!audio_processing_use) {
93 audio_processing_use = AudioProcessingBuilder().Create();
94 }
95
96 std::unique_ptr<cricket::MediaEngineInterface> media_engine(
97 cricket::WebRtcMediaEngineFactory::Create(
98 default_adm, audio_encoder_factory, audio_decoder_factory,
99 video_encoder_factory, video_decoder_factory, audio_mixer,
100 audio_processing_use));
101
102 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
103
104 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
105 CreateRtcEventLogFactory();
106
107 return CreateModularPeerConnectionFactory(
108 network_thread, worker_thread, signaling_thread, std::move(media_engine),
109 std::move(call_factory), std::move(event_log_factory),
110 std::move(fec_controller_factory), std::move(network_controller_factory));
111}
112#endif
113
114rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
115 rtc::Thread* network_thread,
116 rtc::Thread* worker_thread,
117 rtc::Thread* signaling_thread,
118 rtc::scoped_refptr<AudioDeviceModule> default_adm,
119 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
120 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
121 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
122 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
123 rtc::scoped_refptr<AudioMixer> audio_mixer,
124 rtc::scoped_refptr<AudioProcessing> audio_processing) {
125 if (!audio_processing)
126 audio_processing = AudioProcessingBuilder().Create();
127
128 std::unique_ptr<cricket::MediaEngineInterface> media_engine =
129 cricket::WebRtcMediaEngineFactory::Create(
130 default_adm, audio_encoder_factory, audio_decoder_factory,
131 std::move(video_encoder_factory), std::move(video_decoder_factory),
132 audio_mixer, audio_processing);
133
134 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
135
136 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
137 CreateRtcEventLogFactory();
138 PeerConnectionFactoryDependencies dependencies;
139 dependencies.network_thread = network_thread;
140 dependencies.worker_thread = worker_thread;
141 dependencies.signaling_thread = signaling_thread;
142 dependencies.media_engine = std::move(media_engine);
143 dependencies.call_factory = std::move(call_factory);
144 dependencies.event_log_factory = std::move(event_log_factory);
145 return CreateModularPeerConnectionFactory(std::move(dependencies));
146}
147
148#if defined(USE_BUILTIN_SW_CODECS)
149rtc::scoped_refptr<PeerConnectionFactoryInterface>
150CreatePeerConnectionFactoryWithAudioMixer(
151 rtc::Thread* network_thread,
152 rtc::Thread* worker_thread,
153 rtc::Thread* signaling_thread,
154 AudioDeviceModule* default_adm,
155 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
156 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
157 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
158 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
159 rtc::scoped_refptr<AudioMixer> audio_mixer) {
160 return CreatePeerConnectionFactory(
161 network_thread, worker_thread, signaling_thread, default_adm,
162 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
163 video_decoder_factory, audio_mixer, nullptr);
164}
165
166rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
167 rtc::Thread* network_thread,
168 rtc::Thread* worker_thread,
169 rtc::Thread* signaling_thread,
170 AudioDeviceModule* default_adm,
171 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
172 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
173 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
174 cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
175 return CreatePeerConnectionFactoryWithAudioMixer(
176 network_thread, worker_thread, signaling_thread, default_adm,
177 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
178 video_decoder_factory, nullptr);
179}
180#endif
181
182} // namespace webrtc