blob: 197df8ac731ad3176223874931dced8692c42436 [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,
76 rtc::scoped_refptr<AudioDeviceModule> default_adm,
77 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
78 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
79 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
80 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
81 rtc::scoped_refptr<AudioMixer> audio_mixer,
82 rtc::scoped_refptr<AudioProcessing> audio_processing) {
83 if (!audio_processing)
Ivo Creusen62337e52018-01-09 14:17:33 +010084 audio_processing = AudioProcessingBuilder().Create();
Magnus Jedvert58b03162017-09-15 19:02:47 +020085
86 std::unique_ptr<cricket::MediaEngineInterface> media_engine =
87 cricket::WebRtcMediaEngineFactory::Create(
88 default_adm, audio_encoder_factory, audio_decoder_factory,
89 std::move(video_encoder_factory), std::move(video_decoder_factory),
90 audio_mixer, audio_processing);
91
92 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
93
94 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
95 CreateRtcEventLogFactory();
96
97 return CreateModularPeerConnectionFactory(
Magnus Jedvert02e7a192017-09-23 17:21:32 +020098 network_thread, worker_thread, signaling_thread, std::move(media_engine),
Magnus Jedvert835cc0c2017-09-23 16:14:25 +020099 std::move(call_factory), std::move(event_log_factory));
Magnus Jedvert58b03162017-09-15 19:02:47 +0200100}
101
Anders Carlssondd8c1652018-01-30 10:32:13 +0100102#if defined(USE_BUILTIN_SW_CODECS)
zhihuang38ede132017-06-15 12:52:32 -0700103rtc::scoped_refptr<PeerConnectionFactoryInterface>
104CreatePeerConnectionFactoryWithAudioMixer(
105 rtc::Thread* network_thread,
106 rtc::Thread* worker_thread,
107 rtc::Thread* signaling_thread,
108 AudioDeviceModule* default_adm,
peah17675ce2017-06-30 07:24:04 -0700109 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
110 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
111 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
112 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
113 rtc::scoped_refptr<AudioMixer> audio_mixer) {
114 return CreatePeerConnectionFactory(
115 network_thread, worker_thread, signaling_thread, default_adm,
116 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
117 video_decoder_factory, audio_mixer, nullptr);
118}
119
zhihuang38ede132017-06-15 12:52:32 -0700120rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
121 rtc::Thread* network_thread,
122 rtc::Thread* worker_thread,
123 rtc::Thread* signaling_thread,
124 AudioDeviceModule* default_adm,
125 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
126 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
127 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
128 cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
129 return CreatePeerConnectionFactoryWithAudioMixer(
130 network_thread, worker_thread, signaling_thread, default_adm,
131 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
132 video_decoder_factory, nullptr);
133}
Anders Carlssondd8c1652018-01-30 10:32:13 +0100134#endif
zhihuang38ede132017-06-15 12:52:32 -0700135
136} // namespace webrtc