webrtc_lib_link_test.cc (5054B)
1 /* 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 <cstdio> 12 #include <memory> 13 #include <utility> 14 15 #include "api/audio/audio_device.h" 16 #include "api/audio/builtin_audio_processing_builder.h" 17 #include "api/audio/create_audio_device_module.h" 18 #include "api/audio_codecs/audio_decoder_factory_template.h" 19 #include "api/audio_codecs/audio_encoder_factory_template.h" 20 #include "api/audio_codecs/opus/audio_decoder_opus.h" 21 #include "api/audio_codecs/opus/audio_encoder_opus.h" 22 #include "api/create_modular_peer_connection_factory.h" 23 #include "api/create_peerconnection_factory.h" 24 #include "api/enable_media.h" 25 #include "api/environment/environment_factory.h" 26 #include "api/peer_connection_interface.h" 27 #include "api/rtc_event_log/rtc_event_log_factory.h" 28 #include "api/video_codecs/video_decoder_factory_template.h" 29 #include "api/video_codecs/video_decoder_factory_template_dav1d_adapter.h" 30 #include "api/video_codecs/video_decoder_factory_template_libvpx_vp8_adapter.h" 31 #include "api/video_codecs/video_decoder_factory_template_libvpx_vp9_adapter.h" 32 #include "api/video_codecs/video_decoder_factory_template_open_h264_adapter.h" 33 #include "api/video_codecs/video_encoder_factory_template.h" 34 #include "api/video_codecs/video_encoder_factory_template_libaom_av1_adapter.h" 35 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp8_adapter.h" 36 #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" 37 #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" 38 #include "rtc_base/thread.h" 39 40 namespace webrtc { 41 42 void CreateSomeMediaDeps(PeerConnectionFactoryDependencies& media_deps) { 43 media_deps.adm = 44 CreateAudioDeviceModule(*media_deps.env, AudioDeviceModule::kDummyAudio); 45 media_deps.audio_encoder_factory = 46 CreateAudioEncoderFactory<AudioEncoderOpus>(); 47 media_deps.audio_decoder_factory = 48 CreateAudioDecoderFactory<AudioDecoderOpus>(); 49 media_deps.video_encoder_factory = 50 std::make_unique<VideoEncoderFactoryTemplate< 51 LibvpxVp8EncoderTemplateAdapter, LibvpxVp9EncoderTemplateAdapter, 52 OpenH264EncoderTemplateAdapter, LibaomAv1EncoderTemplateAdapter>>(); 53 media_deps.video_decoder_factory = 54 std::make_unique<VideoDecoderFactoryTemplate< 55 LibvpxVp8DecoderTemplateAdapter, LibvpxVp9DecoderTemplateAdapter, 56 OpenH264DecoderTemplateAdapter, Dav1dDecoderTemplateAdapter>>(); 57 media_deps.audio_processing_builder = 58 std::make_unique<BuiltinAudioProcessingBuilder>(); 59 } 60 61 webrtc::PeerConnectionFactoryDependencies CreateSomePcfDeps() { 62 PeerConnectionFactoryDependencies pcf_deps; 63 pcf_deps.env = CreateEnvironment(); 64 pcf_deps.signaling_thread = Thread::Current(); 65 pcf_deps.network_thread = Thread::Current(); 66 pcf_deps.worker_thread = Thread::Current(); 67 pcf_deps.event_log_factory = std::make_unique<RtcEventLogFactory>(); 68 CreateSomeMediaDeps(pcf_deps); 69 EnableMedia(pcf_deps); 70 return pcf_deps; 71 } 72 73 // 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. 77 void TestCase1ModularFactory() { 78 auto pcf_deps = CreateSomePcfDeps(); 79 auto peer_connection_factory = 80 CreateModularPeerConnectionFactory(std::move(pcf_deps)); 81 PeerConnectionInterface::RTCConfiguration rtc_config; 82 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"); 86 } 87 88 void TestCase2RegularFactory() { 89 PeerConnectionFactoryDependencies media_deps; 90 media_deps.env = CreateEnvironment(); 91 CreateSomeMediaDeps(media_deps); 92 93 auto peer_connection_factory = CreatePeerConnectionFactory( 94 Thread::Current(), Thread::Current(), Thread::Current(), 95 std::move(media_deps.adm), std::move(media_deps.audio_encoder_factory), 96 std::move(media_deps.audio_decoder_factory), 97 std::move(media_deps.video_encoder_factory), 98 std::move(media_deps.video_decoder_factory), nullptr, nullptr); 99 PeerConnectionInterface::RTCConfiguration rtc_config; 100 auto result = peer_connection_factory->CreatePeerConnectionOrError( 101 rtc_config, PeerConnectionDependencies(nullptr)); 102 // Creation will fail because of null observer, but that's OK. 103 printf("peer_connection creation=%s\n", result.ok() ? "succeeded" : "failed"); 104 } 105 106 } // namespace webrtc 107 108 int main(int argc, char** argv) { 109 webrtc::TestCase1ModularFactory(); 110 webrtc::TestCase2RegularFactory(); 111 return 0; 112 }