xref: /aosp_15_r20/external/webrtc/api/test/pclf/peer_configurer.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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 Worker PeerConfigurer::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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker PeerConfigurer* 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 Worker std::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 Worker std::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 Worker PeerConfigurer::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 Worker std::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