1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker #include "api/test/pclf/peer_configurer.h" 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker #include <set> 14*d9f75844SAndroid Build Coastguard Worker 15*d9f75844SAndroid Build Coastguard Worker #include "absl/strings/string_view.h" 16*d9f75844SAndroid Build Coastguard Worker #include "api/test/pclf/media_configuration.h" 17*d9f75844SAndroid Build Coastguard Worker #include "api/test/pclf/media_quality_test_params.h" 18*d9f75844SAndroid Build Coastguard Worker #include "api/test/peer_network_dependencies.h" 19*d9f75844SAndroid Build Coastguard Worker 20*d9f75844SAndroid Build Coastguard Worker namespace webrtc { 21*d9f75844SAndroid Build Coastguard Worker namespace webrtc_pc_e2e { 22*d9f75844SAndroid Build Coastguard Worker PeerConfigurer(const PeerNetworkDependencies & network_dependencies)23*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer::PeerConfigurer( 24*d9f75844SAndroid Build Coastguard Worker const PeerNetworkDependencies& network_dependencies) 25*d9f75844SAndroid Build Coastguard Worker : components_(std::make_unique<InjectableComponents>( 26*d9f75844SAndroid Build Coastguard Worker network_dependencies.network_thread, 27*d9f75844SAndroid Build Coastguard Worker network_dependencies.network_manager, 28*d9f75844SAndroid Build Coastguard Worker network_dependencies.packet_socket_factory)), 29*d9f75844SAndroid Build Coastguard Worker params_(std::make_unique<Params>()), 30*d9f75844SAndroid Build Coastguard Worker configurable_params_(std::make_unique<ConfigurableParams>()) {} 31*d9f75844SAndroid Build Coastguard Worker SetName(absl::string_view name)32*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetName(absl::string_view name) { 33*d9f75844SAndroid Build Coastguard Worker params_->name = std::string(name); 34*d9f75844SAndroid Build Coastguard Worker return this; 35*d9f75844SAndroid Build Coastguard Worker } 36*d9f75844SAndroid Build Coastguard Worker SetTaskQueueFactory(std::unique_ptr<TaskQueueFactory> task_queue_factory)37*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetTaskQueueFactory( 38*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<TaskQueueFactory> task_queue_factory) { 39*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->task_queue_factory = 40*d9f75844SAndroid Build Coastguard Worker std::move(task_queue_factory); 41*d9f75844SAndroid Build Coastguard Worker return this; 42*d9f75844SAndroid Build Coastguard Worker } SetCallFactory(std::unique_ptr<CallFactoryInterface> call_factory)43*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetCallFactory( 44*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<CallFactoryInterface> call_factory) { 45*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->call_factory = std::move(call_factory); 46*d9f75844SAndroid Build Coastguard Worker return this; 47*d9f75844SAndroid Build Coastguard Worker } SetEventLogFactory(std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory)48*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetEventLogFactory( 49*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory) { 50*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->event_log_factory = 51*d9f75844SAndroid Build Coastguard Worker std::move(event_log_factory); 52*d9f75844SAndroid Build Coastguard Worker return this; 53*d9f75844SAndroid Build Coastguard Worker } SetFecControllerFactory(std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory)54*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetFecControllerFactory( 55*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory) { 56*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->fec_controller_factory = 57*d9f75844SAndroid Build Coastguard Worker std::move(fec_controller_factory); 58*d9f75844SAndroid Build Coastguard Worker return this; 59*d9f75844SAndroid Build Coastguard Worker } SetNetworkControllerFactory(std::unique_ptr<NetworkControllerFactoryInterface> network_controller_factory)60*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetNetworkControllerFactory( 61*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<NetworkControllerFactoryInterface> 62*d9f75844SAndroid Build Coastguard Worker network_controller_factory) { 63*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->network_controller_factory = 64*d9f75844SAndroid Build Coastguard Worker std::move(network_controller_factory); 65*d9f75844SAndroid Build Coastguard Worker return this; 66*d9f75844SAndroid Build Coastguard Worker } SetVideoEncoderFactory(std::unique_ptr<VideoEncoderFactory> video_encoder_factory)67*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetVideoEncoderFactory( 68*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<VideoEncoderFactory> video_encoder_factory) { 69*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->video_encoder_factory = 70*d9f75844SAndroid Build Coastguard Worker std::move(video_encoder_factory); 71*d9f75844SAndroid Build Coastguard Worker return this; 72*d9f75844SAndroid Build Coastguard Worker } SetVideoDecoderFactory(std::unique_ptr<VideoDecoderFactory> video_decoder_factory)73*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetVideoDecoderFactory( 74*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<VideoDecoderFactory> video_decoder_factory) { 75*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->video_decoder_factory = 76*d9f75844SAndroid Build Coastguard Worker std::move(video_decoder_factory); 77*d9f75844SAndroid Build Coastguard Worker return this; 78*d9f75844SAndroid Build Coastguard Worker } 79*d9f75844SAndroid Build Coastguard Worker SetAsyncResolverFactory(std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory)80*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetAsyncResolverFactory( 81*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<webrtc::AsyncResolverFactory> async_resolver_factory) { 82*d9f75844SAndroid Build Coastguard Worker components_->pc_dependencies->async_resolver_factory = 83*d9f75844SAndroid Build Coastguard Worker std::move(async_resolver_factory); 84*d9f75844SAndroid Build Coastguard Worker return this; 85*d9f75844SAndroid Build Coastguard Worker } SetRTCCertificateGenerator(std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator)86*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetRTCCertificateGenerator( 87*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator) { 88*d9f75844SAndroid Build Coastguard Worker components_->pc_dependencies->cert_generator = std::move(cert_generator); 89*d9f75844SAndroid Build Coastguard Worker return this; 90*d9f75844SAndroid Build Coastguard Worker } SetSSLCertificateVerifier(std::unique_ptr<rtc::SSLCertificateVerifier> tls_cert_verifier)91*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetSSLCertificateVerifier( 92*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<rtc::SSLCertificateVerifier> tls_cert_verifier) { 93*d9f75844SAndroid Build Coastguard Worker components_->pc_dependencies->tls_cert_verifier = 94*d9f75844SAndroid Build Coastguard Worker std::move(tls_cert_verifier); 95*d9f75844SAndroid Build Coastguard Worker return this; 96*d9f75844SAndroid Build Coastguard Worker } 97*d9f75844SAndroid Build Coastguard Worker AddVideoConfig(VideoConfig config)98*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::AddVideoConfig(VideoConfig config) { 99*d9f75844SAndroid Build Coastguard Worker video_sources_.push_back( 100*d9f75844SAndroid Build Coastguard Worker CreateSquareFrameGenerator(config, /*type=*/absl::nullopt)); 101*d9f75844SAndroid Build Coastguard Worker configurable_params_->video_configs.push_back(std::move(config)); 102*d9f75844SAndroid Build Coastguard Worker return this; 103*d9f75844SAndroid Build Coastguard Worker } AddVideoConfig(VideoConfig config,std::unique_ptr<test::FrameGeneratorInterface> generator)104*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::AddVideoConfig( 105*d9f75844SAndroid Build Coastguard Worker VideoConfig config, 106*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<test::FrameGeneratorInterface> generator) { 107*d9f75844SAndroid Build Coastguard Worker configurable_params_->video_configs.push_back(std::move(config)); 108*d9f75844SAndroid Build Coastguard Worker video_sources_.push_back(std::move(generator)); 109*d9f75844SAndroid Build Coastguard Worker return this; 110*d9f75844SAndroid Build Coastguard Worker } AddVideoConfig(VideoConfig config,CapturingDeviceIndex index)111*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::AddVideoConfig(VideoConfig config, 112*d9f75844SAndroid Build Coastguard Worker CapturingDeviceIndex index) { 113*d9f75844SAndroid Build Coastguard Worker configurable_params_->video_configs.push_back(std::move(config)); 114*d9f75844SAndroid Build Coastguard Worker video_sources_.push_back(index); 115*d9f75844SAndroid Build Coastguard Worker return this; 116*d9f75844SAndroid Build Coastguard Worker } SetVideoSubscription(VideoSubscription subscription)117*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetVideoSubscription( 118*d9f75844SAndroid Build Coastguard Worker VideoSubscription subscription) { 119*d9f75844SAndroid Build Coastguard Worker configurable_params_->video_subscription = std::move(subscription); 120*d9f75844SAndroid Build Coastguard Worker return this; 121*d9f75844SAndroid Build Coastguard Worker } SetAudioConfig(AudioConfig config)122*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetAudioConfig(AudioConfig config) { 123*d9f75844SAndroid Build Coastguard Worker params_->audio_config = std::move(config); 124*d9f75844SAndroid Build Coastguard Worker return this; 125*d9f75844SAndroid Build Coastguard Worker } SetUseUlpFEC(bool value)126*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetUseUlpFEC(bool value) { 127*d9f75844SAndroid Build Coastguard Worker params_->use_ulp_fec = value; 128*d9f75844SAndroid Build Coastguard Worker return this; 129*d9f75844SAndroid Build Coastguard Worker } SetUseFlexFEC(bool value)130*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetUseFlexFEC(bool value) { 131*d9f75844SAndroid Build Coastguard Worker params_->use_flex_fec = value; 132*d9f75844SAndroid Build Coastguard Worker return this; 133*d9f75844SAndroid Build Coastguard Worker } SetVideoEncoderBitrateMultiplier(double multiplier)134*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetVideoEncoderBitrateMultiplier( 135*d9f75844SAndroid Build Coastguard Worker double multiplier) { 136*d9f75844SAndroid Build Coastguard Worker params_->video_encoder_bitrate_multiplier = multiplier; 137*d9f75844SAndroid Build Coastguard Worker return this; 138*d9f75844SAndroid Build Coastguard Worker } SetNetEqFactory(std::unique_ptr<NetEqFactory> neteq_factory)139*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetNetEqFactory( 140*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<NetEqFactory> neteq_factory) { 141*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->neteq_factory = std::move(neteq_factory); 142*d9f75844SAndroid Build Coastguard Worker return this; 143*d9f75844SAndroid Build Coastguard Worker } SetAudioProcessing(rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing)144*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetAudioProcessing( 145*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing) { 146*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->audio_processing = audio_processing; 147*d9f75844SAndroid Build Coastguard Worker return this; 148*d9f75844SAndroid Build Coastguard Worker } SetAudioMixer(rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer)149*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetAudioMixer( 150*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) { 151*d9f75844SAndroid Build Coastguard Worker components_->pcf_dependencies->audio_mixer = audio_mixer; 152*d9f75844SAndroid Build Coastguard Worker return this; 153*d9f75844SAndroid Build Coastguard Worker } 154*d9f75844SAndroid Build Coastguard Worker SetUseNetworkThreadAsWorkerThread()155*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetUseNetworkThreadAsWorkerThread() { 156*d9f75844SAndroid Build Coastguard Worker components_->worker_thread = components_->network_thread; 157*d9f75844SAndroid Build Coastguard Worker return this; 158*d9f75844SAndroid Build Coastguard Worker } 159*d9f75844SAndroid Build Coastguard Worker SetRtcEventLogPath(std::string path)160*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetRtcEventLogPath(std::string path) { 161*d9f75844SAndroid Build Coastguard Worker params_->rtc_event_log_path = std::move(path); 162*d9f75844SAndroid Build Coastguard Worker return this; 163*d9f75844SAndroid Build Coastguard Worker } SetAecDumpPath(std::string path)164*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetAecDumpPath(std::string path) { 165*d9f75844SAndroid Build Coastguard Worker params_->aec_dump_path = std::move(path); 166*d9f75844SAndroid Build Coastguard Worker return this; 167*d9f75844SAndroid Build Coastguard Worker } SetRTCConfiguration(PeerConnectionInterface::RTCConfiguration configuration)168*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetRTCConfiguration( 169*d9f75844SAndroid Build Coastguard Worker PeerConnectionInterface::RTCConfiguration configuration) { 170*d9f75844SAndroid Build Coastguard Worker params_->rtc_configuration = std::move(configuration); 171*d9f75844SAndroid Build Coastguard Worker return this; 172*d9f75844SAndroid Build Coastguard Worker } SetRTCOfferAnswerOptions(PeerConnectionInterface::RTCOfferAnswerOptions options)173*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetRTCOfferAnswerOptions( 174*d9f75844SAndroid Build Coastguard Worker PeerConnectionInterface::RTCOfferAnswerOptions options) { 175*d9f75844SAndroid Build Coastguard Worker params_->rtc_offer_answer_options = std::move(options); 176*d9f75844SAndroid Build Coastguard Worker return this; 177*d9f75844SAndroid Build Coastguard Worker } SetBitrateSettings(BitrateSettings bitrate_settings)178*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetBitrateSettings( 179*d9f75844SAndroid Build Coastguard Worker BitrateSettings bitrate_settings) { 180*d9f75844SAndroid Build Coastguard Worker params_->bitrate_settings = bitrate_settings; 181*d9f75844SAndroid Build Coastguard Worker return this; 182*d9f75844SAndroid Build Coastguard Worker } SetVideoCodecs(std::vector<VideoCodecConfig> video_codecs)183*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetVideoCodecs( 184*d9f75844SAndroid Build Coastguard Worker std::vector<VideoCodecConfig> video_codecs) { 185*d9f75844SAndroid Build Coastguard Worker params_->video_codecs = std::move(video_codecs); 186*d9f75844SAndroid Build Coastguard Worker return this; 187*d9f75844SAndroid Build Coastguard Worker } 188*d9f75844SAndroid Build Coastguard Worker SetIceTransportFactory(std::unique_ptr<IceTransportFactory> factory)189*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetIceTransportFactory( 190*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<IceTransportFactory> factory) { 191*d9f75844SAndroid Build Coastguard Worker components_->pc_dependencies->ice_transport_factory = std::move(factory); 192*d9f75844SAndroid Build Coastguard Worker return this; 193*d9f75844SAndroid Build Coastguard Worker } 194*d9f75844SAndroid Build Coastguard Worker SetPortAllocatorExtraFlags(uint32_t extra_flags)195*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer* PeerConfigurer::SetPortAllocatorExtraFlags( 196*d9f75844SAndroid Build Coastguard Worker uint32_t extra_flags) { 197*d9f75844SAndroid Build Coastguard Worker params_->port_allocator_extra_flags = extra_flags; 198*d9f75844SAndroid Build Coastguard Worker return this; 199*d9f75844SAndroid Build Coastguard Worker } ReleaseComponents()200*d9f75844SAndroid Build Coastguard Workerstd::unique_ptr<InjectableComponents> PeerConfigurer::ReleaseComponents() { 201*d9f75844SAndroid Build Coastguard Worker RTC_CHECK(components_); 202*d9f75844SAndroid Build Coastguard Worker auto components = std::move(components_); 203*d9f75844SAndroid Build Coastguard Worker components_ = nullptr; 204*d9f75844SAndroid Build Coastguard Worker return components; 205*d9f75844SAndroid Build Coastguard Worker } 206*d9f75844SAndroid Build Coastguard Worker 207*d9f75844SAndroid Build Coastguard Worker // Returns Params and transfer ownership to the caller. 208*d9f75844SAndroid Build Coastguard Worker // Can be called once. ReleaseParams()209*d9f75844SAndroid Build Coastguard Workerstd::unique_ptr<Params> PeerConfigurer::ReleaseParams() { 210*d9f75844SAndroid Build Coastguard Worker RTC_CHECK(params_); 211*d9f75844SAndroid Build Coastguard Worker auto params = std::move(params_); 212*d9f75844SAndroid Build Coastguard Worker params_ = nullptr; 213*d9f75844SAndroid Build Coastguard Worker return params; 214*d9f75844SAndroid Build Coastguard Worker } 215*d9f75844SAndroid Build Coastguard Worker 216*d9f75844SAndroid Build Coastguard Worker // Returns ConfigurableParams and transfer ownership to the caller. 217*d9f75844SAndroid Build Coastguard Worker // Can be called once. 218*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<ConfigurableParams> ReleaseConfigurableParams()219*d9f75844SAndroid Build Coastguard WorkerPeerConfigurer::ReleaseConfigurableParams() { 220*d9f75844SAndroid Build Coastguard Worker RTC_CHECK(configurable_params_); 221*d9f75844SAndroid Build Coastguard Worker auto configurable_params = std::move(configurable_params_); 222*d9f75844SAndroid Build Coastguard Worker configurable_params_ = nullptr; 223*d9f75844SAndroid Build Coastguard Worker return configurable_params; 224*d9f75844SAndroid Build Coastguard Worker } 225*d9f75844SAndroid Build Coastguard Worker 226*d9f75844SAndroid Build Coastguard Worker // Returns video sources and transfer frame generators ownership to the 227*d9f75844SAndroid Build Coastguard Worker // caller. Can be called once. ReleaseVideoSources()228*d9f75844SAndroid Build Coastguard Workerstd::vector<PeerConfigurer::VideoSource> PeerConfigurer::ReleaseVideoSources() { 229*d9f75844SAndroid Build Coastguard Worker auto video_sources = std::move(video_sources_); 230*d9f75844SAndroid Build Coastguard Worker video_sources_.clear(); 231*d9f75844SAndroid Build Coastguard Worker return video_sources; 232*d9f75844SAndroid Build Coastguard Worker } 233*d9f75844SAndroid Build Coastguard Worker 234*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc_pc_e2e 235*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc 236