tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }