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 "media/base/media_engine.h"
22 #include "media/engine/webrtc_media_engine.h"
23 #include "modules/audio_device/include/audio_device.h"
24 #include "modules/audio_processing/include/audio_processing.h"
25 #include "rtc_base/thread.h"
26
27 namespace webrtc {
28
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)29 rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
30 rtc::Thread* network_thread,
31 rtc::Thread* worker_thread,
32 rtc::Thread* signaling_thread,
33 rtc::scoped_refptr<AudioDeviceModule> default_adm,
34 rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
35 rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
36 std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
37 std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
38 rtc::scoped_refptr<AudioMixer> audio_mixer,
39 rtc::scoped_refptr<AudioProcessing> audio_processing) {
40 PeerConnectionFactoryDependencies dependencies;
41 dependencies.network_thread = network_thread;
42 dependencies.worker_thread = worker_thread;
43 dependencies.signaling_thread = signaling_thread;
44 dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
45 dependencies.call_factory = CreateCallFactory();
46 dependencies.event_log_factory = std::make_unique<RtcEventLogFactory>(
47 dependencies.task_queue_factory.get());
48
49 cricket::MediaEngineDependencies media_dependencies;
50 media_dependencies.task_queue_factory = dependencies.task_queue_factory.get();
51 media_dependencies.adm = std::move(default_adm);
52 media_dependencies.audio_encoder_factory = std::move(audio_encoder_factory);
53 media_dependencies.audio_decoder_factory = std::move(audio_decoder_factory);
54 if (audio_processing) {
55 media_dependencies.audio_processing = std::move(audio_processing);
56 } else {
57 media_dependencies.audio_processing = AudioProcessingBuilder().Create();
58 }
59 media_dependencies.audio_mixer = std::move(audio_mixer);
60 media_dependencies.video_encoder_factory = std::move(video_encoder_factory);
61 media_dependencies.video_decoder_factory = std::move(video_decoder_factory);
62 dependencies.media_engine =
63 cricket::CreateMediaEngine(std::move(media_dependencies));
64
65 return CreateModularPeerConnectionFactory(std::move(dependencies));
66 }
67
68 } // namespace webrtc
69