blob: 8098ecf1fd89a2afb4d958c559da3dd428447acf [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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "api/peerconnectioninterface.h"
Magnus Jedvert58b03162017-09-15 19:02:47 +020012#include "api/video_codecs/video_decoder_factory.h"
13#include "api/video_codecs/video_encoder_factory.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "call/callfactoryinterface.h"
15#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
25rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
26 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
27 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory) {
28 return CreatePeerConnectionFactoryWithAudioMixer(
29 nullptr /*network_thread*/, nullptr /*worker_thread*/,
30 nullptr /*signaling_thread*/, nullptr /*default_adm*/,
31 audio_encoder_factory, audio_decoder_factory,
32 nullptr /*video_encoder_factory*/, nullptr /*video_decoder_factory*/,
33 nullptr /*audio_mixer*/);
34}
35
zhihuang38ede132017-06-15 12:52:32 -070036// Note: all the other CreatePeerConnectionFactory variants just end up calling
37// this, ultimately.
peah17675ce2017-06-30 07:24:04 -070038rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
zhihuang38ede132017-06-15 12:52:32 -070039 rtc::Thread* network_thread,
40 rtc::Thread* worker_thread,
41 rtc::Thread* signaling_thread,
42 AudioDeviceModule* default_adm,
43 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
44 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
45 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
46 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
peah17675ce2017-06-30 07:24:04 -070047 rtc::scoped_refptr<AudioMixer> audio_mixer,
48 rtc::scoped_refptr<AudioProcessing> audio_processing) {
49 rtc::scoped_refptr<AudioProcessing> audio_processing_use = audio_processing;
50 if (!audio_processing_use) {
51 audio_processing_use = AudioProcessing::Create();
52 }
53
zhihuang38ede132017-06-15 12:52:32 -070054 std::unique_ptr<cricket::MediaEngineInterface> media_engine(
55 cricket::WebRtcMediaEngineFactory::Create(
56 default_adm, audio_encoder_factory, audio_decoder_factory,
peaha9cc40b2017-06-29 08:32:09 -070057 video_encoder_factory, video_decoder_factory, audio_mixer,
peah17675ce2017-06-30 07:24:04 -070058 audio_processing_use));
zhihuang38ede132017-06-15 12:52:32 -070059
60 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
61
62 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
63 CreateRtcEventLogFactory();
64
65 return CreateModularPeerConnectionFactory(
Magnus Jedvert02e7a192017-09-23 17:21:32 +020066 network_thread, worker_thread, signaling_thread, std::move(media_engine),
67 std::move(call_factory), std::move(event_log_factory));
zhihuang38ede132017-06-15 12:52:32 -070068}
69
Magnus Jedvert58b03162017-09-15 19:02:47 +020070rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
71 rtc::Thread* network_thread,
72 rtc::Thread* worker_thread,
73 rtc::Thread* signaling_thread,
74 rtc::scoped_refptr<AudioDeviceModule> default_adm,
75 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
76 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
77 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
78 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
79 rtc::scoped_refptr<AudioMixer> audio_mixer,
80 rtc::scoped_refptr<AudioProcessing> audio_processing) {
81 if (!audio_processing)
82 audio_processing = AudioProcessing::Create();
83
84 std::unique_ptr<cricket::MediaEngineInterface> media_engine =
85 cricket::WebRtcMediaEngineFactory::Create(
86 default_adm, audio_encoder_factory, audio_decoder_factory,
87 std::move(video_encoder_factory), std::move(video_decoder_factory),
88 audio_mixer, audio_processing);
89
90 std::unique_ptr<CallFactoryInterface> call_factory = CreateCallFactory();
91
92 std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory =
93 CreateRtcEventLogFactory();
94
95 return CreateModularPeerConnectionFactory(
Magnus Jedvert02e7a192017-09-23 17:21:32 +020096 network_thread, worker_thread, signaling_thread, std::move(media_engine),
Magnus Jedvert835cc0c2017-09-23 16:14:25 +020097 std::move(call_factory), std::move(event_log_factory));
Magnus Jedvert58b03162017-09-15 19:02:47 +020098}
99
zhihuang38ede132017-06-15 12:52:32 -0700100rtc::scoped_refptr<PeerConnectionFactoryInterface>
101CreatePeerConnectionFactoryWithAudioMixer(
102 rtc::Thread* network_thread,
103 rtc::Thread* worker_thread,
104 rtc::Thread* signaling_thread,
105 AudioDeviceModule* default_adm,
peah17675ce2017-06-30 07:24:04 -0700106 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
107 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
108 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
109 cricket::WebRtcVideoDecoderFactory* video_decoder_factory,
110 rtc::scoped_refptr<AudioMixer> audio_mixer) {
111 return CreatePeerConnectionFactory(
112 network_thread, worker_thread, signaling_thread, default_adm,
113 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
114 video_decoder_factory, audio_mixer, nullptr);
115}
116
zhihuang38ede132017-06-15 12:52:32 -0700117rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
118 rtc::Thread* network_thread,
119 rtc::Thread* worker_thread,
120 rtc::Thread* signaling_thread,
121 AudioDeviceModule* default_adm,
122 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
123 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
124 cricket::WebRtcVideoEncoderFactory* video_encoder_factory,
125 cricket::WebRtcVideoDecoderFactory* video_decoder_factory) {
126 return CreatePeerConnectionFactoryWithAudioMixer(
127 network_thread, worker_thread, signaling_thread, default_adm,
128 audio_encoder_factory, audio_decoder_factory, video_encoder_factory,
129 video_decoder_factory, nullptr);
130}
131
132} // namespace webrtc