blob: c65f1531737885ac69a0a7e34ed14d07153d110a [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
Florent Castellif4673f92024-04-19 19:46:0311#include "api/audio/audio_device.h"
Florent Castelli0afde762024-04-19 15:07:0812#include "api/audio/audio_processing.h"
Danil Chapovalov037ab262024-11-01 10:43:0813#include "api/audio/builtin_audio_processing_builder.h"
Patrik Höglundeeb79e92019-10-17 14:04:0714#include "api/audio_codecs/audio_decoder_factory_template.h"
15#include "api/audio_codecs/audio_encoder_factory_template.h"
16#include "api/audio_codecs/opus/audio_decoder_opus.h"
17#include "api/audio_codecs/opus/audio_encoder_opus.h"
Patrik Höglundeeb79e92019-10-17 14:04:0718#include "api/create_peerconnection_factory.h"
Danil Chapovalovb29ff002023-11-02 18:18:0419#include "api/enable_media.h"
Patrik Höglundeeb79e92019-10-17 14:04:0720#include "api/peer_connection_interface.h"
21#include "api/rtc_event_log/rtc_event_log_factory.h"
22#include "api/stats/rtcstats_objects.h"
23#include "api/task_queue/default_task_queue_factory.h"
philipel2b00c4e2023-03-31 15:20:4024#include "api/video_codecs/video_decoder_factory_template.h"
25#include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h"
26#include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h"
27#include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h"
28#include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h"
29#include "api/video_codecs/video_encoder_factory_template.h"
30#include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h"
31#include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h"
32#include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h"
33#include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h"
Patrik Höglundeeb79e92019-10-17 14:04:0734
Patrik Höglundeeb79e92019-10-17 14:04:0735namespace webrtc {
36
Danil Chapovalovb29ff002023-11-02 18:18:0437void CreateSomeMediaDeps(PeerConnectionFactoryDependencies& media_deps) {
Patrik Höglundeeb79e92019-10-17 14:04:0738 media_deps.adm = AudioDeviceModule::CreateForTest(
Danil Chapovalovb29ff002023-11-02 18:18:0439 AudioDeviceModule::kDummyAudio, media_deps.task_queue_factory.get());
Patrik Höglundeeb79e92019-10-17 14:04:0740 media_deps.audio_encoder_factory =
41 webrtc::CreateAudioEncoderFactory<webrtc::AudioEncoderOpus>();
42 media_deps.audio_decoder_factory =
43 webrtc::CreateAudioDecoderFactory<webrtc::AudioDecoderOpus>();
philipel2b00c4e2023-03-31 15:20:4044 media_deps.video_encoder_factory =
45 std::make_unique<VideoEncoderFactoryTemplate<
46 LibvpxVp8EncoderTemplateAdapter, LibvpxVp9EncoderTemplateAdapter,
47 OpenH264EncoderTemplateAdapter, LibaomAv1EncoderTemplateAdapter>>();
48 media_deps.video_decoder_factory =
49 std::make_unique<VideoDecoderFactoryTemplate<
50 LibvpxVp8DecoderTemplateAdapter, LibvpxVp9DecoderTemplateAdapter,
51 OpenH264DecoderTemplateAdapter, Dav1dDecoderTemplateAdapter>>();
Danil Chapovalov037ab262024-11-01 10:43:0852 media_deps.audio_processing_builder =
53 std::make_unique<BuiltinAudioProcessingBuilder>();
Patrik Höglundeeb79e92019-10-17 14:04:0754}
55
Patrik Höglundeeb79e92019-10-17 14:04:0756webrtc::PeerConnectionFactoryDependencies CreateSomePcfDeps() {
57 webrtc::PeerConnectionFactoryDependencies pcf_deps;
58 pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
59 pcf_deps.signaling_thread = rtc::Thread::Current();
60 pcf_deps.network_thread = rtc::Thread::Current();
61 pcf_deps.worker_thread = rtc::Thread::Current();
Danil Chapovalov151003d2023-12-07 19:01:0662 pcf_deps.event_log_factory = std::make_unique<webrtc::RtcEventLogFactory>();
Danil Chapovalovb29ff002023-11-02 18:18:0463 CreateSomeMediaDeps(pcf_deps);
64 EnableMedia(pcf_deps);
Patrik Höglundeeb79e92019-10-17 14:04:0765 return pcf_deps;
66}
67
Patrik Höglund21671632019-10-18 06:04:1968// NOTE: These "test cases" should pull in as much of WebRTC as possible to make
69// sure most commonly used symbols are actually in libwebrtc.a. It's entirely
70// possible these tests won't work at all times (maybe crash even), but that's
71// fine.
72void TestCase1ModularFactory() {
Patrik Höglundeeb79e92019-10-17 14:04:0773 auto pcf_deps = CreateSomePcfDeps();
74 auto peer_connection_factory =
75 webrtc::CreateModularPeerConnectionFactory(std::move(pcf_deps));
76 webrtc::PeerConnectionInterface::RTCConfiguration rtc_config;
Harald Alvestrandf33f7a22021-05-09 14:58:5777 auto result = peer_connection_factory->CreatePeerConnectionOrError(
78 rtc_config, PeerConnectionDependencies(nullptr));
79 // Creation will fail because of null observer, but that's OK.
80 printf("peer_connection creation=%s\n", result.ok() ? "succeeded" : "failed");
Patrik Höglundeeb79e92019-10-17 14:04:0781}
82
Patrik Höglund21671632019-10-18 06:04:1983void TestCase2RegularFactory() {
Danil Chapovalovb29ff002023-11-02 18:18:0484 PeerConnectionFactoryDependencies media_deps;
85 media_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
86 CreateSomeMediaDeps(media_deps);
Patrik Höglundeeb79e92019-10-17 14:04:0787
88 auto peer_connection_factory = webrtc::CreatePeerConnectionFactory(
89 rtc::Thread::Current(), rtc::Thread::Current(), rtc::Thread::Current(),
90 std::move(media_deps.adm), std::move(media_deps.audio_encoder_factory),
91 std::move(media_deps.audio_decoder_factory),
92 std::move(media_deps.video_encoder_factory),
93 std::move(media_deps.video_decoder_factory), nullptr, nullptr);
Patrik Höglund21671632019-10-18 06:04:1994 webrtc::PeerConnectionInterface::RTCConfiguration rtc_config;
Harald Alvestrandf33f7a22021-05-09 14:58:5795 auto result = peer_connection_factory->CreatePeerConnectionOrError(
96 rtc_config, PeerConnectionDependencies(nullptr));
97 // Creation will fail because of null observer, but that's OK.
98 printf("peer_connection creation=%s\n", result.ok() ? "succeeded" : "failed");
Patrik Höglundeeb79e92019-10-17 14:04:0799}
100
101} // namespace webrtc
Patrik Höglund21671632019-10-18 06:04:19102
103int main(int argc, char** argv) {
104 webrtc::TestCase1ModularFactory();
105 webrtc::TestCase2RegularFactory();
106 return 0;
107}