blob: 868c17287e4aa7a25beb18faccfff004595c3045 [file] [log] [blame]
Patrik Höglundeeb79e92019-10-17 14:04:071/*
2 * Copyright 2019 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/audio_codecs/audio_decoder_factory_template.h"
12#include "api/audio_codecs/audio_encoder_factory_template.h"
13#include "api/audio_codecs/opus/audio_decoder_opus.h"
14#include "api/audio_codecs/opus/audio_encoder_opus.h"
15#include "api/call/call_factory_interface.h"
16#include "api/create_peerconnection_factory.h"
17#include "api/peer_connection_interface.h"
18#include "api/rtc_event_log/rtc_event_log_factory.h"
19#include "api/stats/rtcstats_objects.h"
20#include "api/task_queue/default_task_queue_factory.h"
philipel2b00c4e2023-03-31 15:20:4021#include "api/video_codecs/video_decoder_factory_template.h"
22#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h"
23#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h"
24#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h"
25#include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h"
26#include "api/video_codecs/video_encoder_factory_template.h"
27#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h"
28#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
29#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
30#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
Patrik Höglundeeb79e92019-10-17 14:04:0731#include "media/engine/webrtc_media_engine.h"
32#include "modules/audio_device/include/audio_device.h"
33#include "modules/audio_processing/include/audio_processing.h"
34
Patrik Höglundeeb79e92019-10-17 14:04:0735namespace webrtc {
36
37cricket::MediaEngineDependencies CreateSomeMediaDeps(
38 TaskQueueFactory* task_queue_factory) {
39 cricket::MediaEngineDependencies media_deps;
40 media_deps.task_queue_factory = task_queue_factory;
41 media_deps.adm = AudioDeviceModule::CreateForTest(
42 AudioDeviceModule::kDummyAudio, task_queue_factory);
43 media_deps.audio_encoder_factory =
44 webrtc::CreateAudioEncoderFactory<webrtc::AudioEncoderOpus>();
45 media_deps.audio_decoder_factory =
46 webrtc::CreateAudioDecoderFactory<webrtc::AudioDecoderOpus>();
philipel2b00c4e2023-03-31 15:20:4047 media_deps.video_encoder_factory =
48 std::make_unique<VideoEncoderFactoryTemplate<
49 LibvpxVp8EncoderTemplateAdapter, LibvpxVp9EncoderTemplateAdapter,
50 OpenH264EncoderTemplateAdapter, LibaomAv1EncoderTemplateAdapter>>();
51 media_deps.video_decoder_factory =
52 std::make_unique<VideoDecoderFactoryTemplate<
53 LibvpxVp8DecoderTemplateAdapter, LibvpxVp9DecoderTemplateAdapter,
54 OpenH264DecoderTemplateAdapter, Dav1dDecoderTemplateAdapter>>();
Patrik Höglundeeb79e92019-10-17 14:04:0755 media_deps.audio_processing = webrtc::AudioProcessingBuilder().Create();
56 return media_deps;
57}
58
Patrik Höglundeeb79e92019-10-17 14:04:0759webrtc::PeerConnectionFactoryDependencies CreateSomePcfDeps() {
60 webrtc::PeerConnectionFactoryDependencies pcf_deps;
61 pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
62 pcf_deps.signaling_thread = rtc::Thread::Current();
63 pcf_deps.network_thread = rtc::Thread::Current();
64 pcf_deps.worker_thread = rtc::Thread::Current();
65 pcf_deps.call_factory = webrtc::CreateCallFactory();
66 pcf_deps.event_log_factory = std::make_unique<webrtc::RtcEventLogFactory>(
67 pcf_deps.task_queue_factory.get());
68 auto media_deps = CreateSomeMediaDeps(pcf_deps.task_queue_factory.get());
69 pcf_deps.media_engine = cricket::CreateMediaEngine(std::move(media_deps));
70 return pcf_deps;
71}
72
Patrik Höglund21671632019-10-18 06:04:1973// NOTE: These "test cases" should pull in as much of WebRTC as possible to make
74// sure most commonly used symbols are actually in libwebrtc.a. It's entirely
75// possible these tests won't work at all times (maybe crash even), but that's
76// fine.
77void TestCase1ModularFactory() {
Patrik Höglundeeb79e92019-10-17 14:04:0778 auto pcf_deps = CreateSomePcfDeps();
79 auto peer_connection_factory =
80 webrtc::CreateModularPeerConnectionFactory(std::move(pcf_deps));
81 webrtc::PeerConnectionInterface::RTCConfiguration rtc_config;
Harald Alvestrandf33f7a22021-05-09 14:58:5782 auto result = peer_connection_factory->CreatePeerConnectionOrError(
83 rtc_config, PeerConnectionDependencies(nullptr));
84 // Creation will fail because of null observer, but that's OK.
85 printf("peer_connection creation=%s\n", result.ok() ? "succeeded" : "failed");
Patrik Höglundeeb79e92019-10-17 14:04:0786}
87
Patrik Höglund21671632019-10-18 06:04:1988void TestCase2RegularFactory() {
Patrik Höglundeeb79e92019-10-17 14:04:0789 auto task_queue_factory = CreateDefaultTaskQueueFactory();
90 auto media_deps = CreateSomeMediaDeps(task_queue_factory.get());
91
92 auto peer_connection_factory = webrtc::CreatePeerConnectionFactory(
93 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
94 std::move(media_deps.adm), std::move(media_deps.audio_encoder_factory),
95 std::move(media_deps.audio_decoder_factory),
96 std::move(media_deps.video_encoder_factory),
97 std::move(media_deps.video_decoder_factory), nullptr, nullptr);
Patrik Höglund21671632019-10-18 06:04:1998 webrtc::PeerConnectionInterface::RTCConfiguration rtc_config;
Harald Alvestrandf33f7a22021-05-09 14:58:5799 auto result = peer_connection_factory->CreatePeerConnectionOrError(
100 rtc_config, PeerConnectionDependencies(nullptr));
101 // Creation will fail because of null observer, but that's OK.
102 printf("peer_connection creation=%s\n", result.ok() ? "succeeded" : "failed");
Patrik Höglundeeb79e92019-10-17 14:04:07103}
104
105} // namespace webrtc
Patrik Höglund21671632019-10-18 06:04:19106
107int main(int argc, char** argv) {
108 webrtc::TestCase1ModularFactory();
109 webrtc::TestCase2RegularFactory();
110 return 0;
111}