blob: 11650ec0fbb5d00772f1ff8e7a15e96b84eb3ba4 [file] [log] [blame]
zhihuang38ede132017-06-15 12:52:32 -07001/*
2 * Copyright 2017 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
Niels Möller8366e172018-02-14 12:20:13 +010011#include "api/call/callfactoryinterface.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020012#include "api/peerconnectioninterface.h"
Magnus Jedvert58b03162017-09-15 19:02:47 +020013#include "api/video_codecs/video_decoder_factory.h"
14#include "api/video_codecs/video_encoder_factory.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "logging/rtc_event_log/rtc_event_log_factory_interface.h"
16#include "media/engine/webrtcmediaengine.h"
Magnus Jedvert58b03162017-09-15 19:02:47 +020017#include "modules/audio_device/include/audio_device.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "modules/audio_processing/include/audio_processing.h"
19#include "rtc_base/bind.h"
20#include "rtc_base/scoped_ref_ptr.h"
21#include "rtc_base/thread.h"
zhihuang38ede132017-06-15 12:52:32 -070022
23namespace webrtc {
24
Anders Carlssondd8c1652018-01-30 10:32:13 +010025#if defined(USE_BUILTIN_SW_CODECS)
zhihuang38ede132017-06-15 12:52:32 -070026rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
27 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
28 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
29 return CreatePeerConnectionFactoryWithAudioMixer(
30 nullptr /*network_thread*/, nullptr /*worker_thread*/,
31 nullptr /*signaling_thread*/, nullptr /*default_adm*/,
32 audio_encoder_factory, audio_decoder_factory,
33 nullptr /*video_encoder_factory*/, nullptr /*video_decoder_factory*/,
34 nullptr /*audio_mixer*/);
35}
36
zhihuang38ede132017-06-15 12:52:32 -070037// Note: all the other CreatePeerConnectionFactory variants just end up calling
38// this, ultimately.
peah17675ce2017-06-30 07:24:04 -070039rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
zhihuang38ede132017-06-15 12:52:32 -070040 rtc::Thread* network_thread,
41 rtc::Thread* worker_thread,
42 rtc::Thread* signaling_thread,
43 AudioDeviceModule* default_adm,
44 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
45 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
46 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
47 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
peah17675ce2017-06-30 07:24:04 -070048 rtc::scoped_refptr<AudioMixer> audio_mixer,
49 rtc::scoped_refptr<AudioProcessing> audio_processing) {
50 rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
51 if (!audio_processing_use) {
Ivo Creusen62337e52018-01-09 14:17:33 +010052 audio_processing_use = AudioProcessingBuilder().Create();
peah17675ce2017-06-30 07:24:04 -070053 }
54
zhihuang38ede132017-06-15 12:52:32 -070055 std::unique_ptr<cricket::MediaEngineInterface> media_engine(
56 cricket::WebRtcMediaEngineFactory::Create(
57 default_adm, audio_encoder_factory, audio_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070058 video_encoder_factory, video_decoder_factory, audio_mixer,
peah17675ce2017-06-30 07:24:04 -070059 audio_processing_use));
zhihuang38ede132017-06-15 12:52:32 -070060
61 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
62
63 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
64 CreateRtcEventLogFactory();
65
66 return CreateModularPeerConnectionFactory(
Magnus Jedvert02e7a192017-09-23 17:21:32 +020067 network_thread, worker_thread, signaling_thread, std::move(media_engine),
68 std::move(call_factory), std::move(event_log_factory));
zhihuang38ede132017-06-15 12:52:32 -070069}
Anders Carlssondd8c1652018-01-30 10:32:13 +010070#endif
zhihuang38ede132017-06-15 12:52:32 -070071
Magnus Jedvert58b03162017-09-15 19:02:47 +020072rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
73 rtc::Thread* network_thread,
74 rtc::Thread* worker_thread,
75 rtc::Thread* signaling_thread,
Ying Wang0dd1b0a2018-02-20 12:50:27 +010076 AudioDeviceModule* default_adm,
77 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
78 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
79 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
80 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
81 rtc::scoped_refptr<AudioMixer> audio_mixer,
82 rtc::scoped_refptr<AudioProcessing> audio_processing,
83 std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory) {
84 rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
85 if (!audio_processing_use) {
86 audio_processing_use = AudioProcessingBuilder().Create();
87 }
88
89 std::unique_ptr<cricket::MediaEngineInterface> media_engine(
90 cricket::WebRtcMediaEngineFactory::Create(
91 default_adm, audio_encoder_factory, audio_decoder_factory,
92 video_encoder_factory, video_decoder_factory, audio_mixer,
93 audio_processing_use));
94
95 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
96
97 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
98 CreateRtcEventLogFactory();
99
100 return CreateModularPeerConnectionFactory(
101 network_thread, worker_thread, signaling_thread, std::move(media_engine),
102 std::move(call_factory), std::move(event_log_factory),
103 std::move(fec_controller_factory));
104}
105
106rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
107 rtc::Thread* network_thread,
108 rtc::Thread* worker_thread,
109 rtc::Thread* signaling_thread,
Magnus Jedvert58b03162017-09-15 19:02:47 +0200110 rtc::scoped_refptr<AudioDeviceModule> default_adm,
111 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
112 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
113 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
114 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
115 rtc::scoped_refptr<AudioMixer> audio_mixer,
116 rtc::scoped_refptr<AudioProcessing> audio_processing) {
117 if (!audio_processing)
Ivo Creusen62337e52018-01-09 14:17:33 +0100118 audio_processing = AudioProcessingBuilder().Create();
Magnus Jedvert58b03162017-09-15 19:02:47 +0200119
120 std::unique_ptr<cricket::MediaEngineInterface> media_engine =
121 cricket::WebRtcMediaEngineFactory::Create(
122 default_adm, audio_encoder_factory, audio_decoder_factory,
123 std::move(video_encoder_factory), std::move(video_decoder_factory),
124 audio_mixer, audio_processing);
125
126 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
127
128 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
129 CreateRtcEventLogFactory();
130
131 return CreateModularPeerConnectionFactory(
Magnus Jedvert02e7a192017-09-23 17:21:32 +0200132 network_thread, worker_thread, signaling_thread, std::move(media_engine),
Magnus Jedvert835cc0c2017-09-23 16:14:25 +0200133 std::move(call_factory), std::move(event_log_factory));
Magnus Jedvert58b03162017-09-15 19:02:47 +0200134}
135
Anders Carlssondd8c1652018-01-30 10:32:13 +0100136#if defined(USE_BUILTIN_SW_CODECS)
zhihuang38ede132017-06-15 12:52:32 -0700137rtc::scoped_refptr<PeerConnectionFactoryInterface>
138CreatePeerConnectionFactoryWithAudioMixer(
139 rtc::Thread* network_thread,
140 rtc::Thread* worker_thread,
141 rtc::Thread* signaling_thread,
142 AudioDeviceModule* default_adm,
peah17675ce2017-06-30 07:24:04 -0700143 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
144 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
145 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
146 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
147 rtc::scoped_refptr<AudioMixer> audio_mixer) {
148 return CreatePeerConnectionFactory(
149 network_thread, worker_thread, signaling_thread, default_adm,
150 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
151 video_decoder_factory, audio_mixer, nullptr);
152}
153
zhihuang38ede132017-06-15 12:52:32 -0700154rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
155 rtc::Thread* network_thread,
156 rtc::Thread* worker_thread,
157 rtc::Thread* signaling_thread,
158 AudioDeviceModule* default_adm,
159 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
160 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
161 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
162 cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
163 return CreatePeerConnectionFactoryWithAudioMixer(
164 network_thread, worker_thread, signaling_thread, default_adm,
165 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
166 video_decoder_factory, nullptr);
167}
Anders Carlssondd8c1652018-01-30 10:32:13 +0100168#endif
zhihuang38ede132017-06-15 12:52:32 -0700169
170} // namespace webrtc