1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2014 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 "test/call_test.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker #include <algorithm>
14*d9f75844SAndroid Build Coastguard Worker #include <memory>
15*d9f75844SAndroid Build Coastguard Worker
16*d9f75844SAndroid Build Coastguard Worker #include "api/audio_codecs/builtin_audio_decoder_factory.h"
17*d9f75844SAndroid Build Coastguard Worker #include "api/audio_codecs/builtin_audio_encoder_factory.h"
18*d9f75844SAndroid Build Coastguard Worker #include "api/task_queue/default_task_queue_factory.h"
19*d9f75844SAndroid Build Coastguard Worker #include "api/task_queue/task_queue_base.h"
20*d9f75844SAndroid Build Coastguard Worker #include "api/test/create_frame_generator.h"
21*d9f75844SAndroid Build Coastguard Worker #include "api/video/builtin_video_bitrate_allocator_factory.h"
22*d9f75844SAndroid Build Coastguard Worker #include "call/fake_network_pipe.h"
23*d9f75844SAndroid Build Coastguard Worker #include "call/simulated_network.h"
24*d9f75844SAndroid Build Coastguard Worker #include "modules/audio_mixer/audio_mixer_impl.h"
25*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/checks.h"
26*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/event.h"
27*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/task_queue_for_test.h"
28*d9f75844SAndroid Build Coastguard Worker #include "test/fake_encoder.h"
29*d9f75844SAndroid Build Coastguard Worker #include "test/testsupport/file_utils.h"
30*d9f75844SAndroid Build Coastguard Worker #include "video/config/video_encoder_config.h"
31*d9f75844SAndroid Build Coastguard Worker
32*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
33*d9f75844SAndroid Build Coastguard Worker namespace test {
34*d9f75844SAndroid Build Coastguard Worker
CallTest()35*d9f75844SAndroid Build Coastguard Worker CallTest::CallTest()
36*d9f75844SAndroid Build Coastguard Worker : clock_(Clock::GetRealTimeClock()),
37*d9f75844SAndroid Build Coastguard Worker task_queue_factory_(CreateDefaultTaskQueueFactory()),
38*d9f75844SAndroid Build Coastguard Worker send_event_log_(std::make_unique<RtcEventLogNull>()),
39*d9f75844SAndroid Build Coastguard Worker recv_event_log_(std::make_unique<RtcEventLogNull>()),
40*d9f75844SAndroid Build Coastguard Worker audio_send_config_(/*send_transport=*/nullptr),
41*d9f75844SAndroid Build Coastguard Worker audio_send_stream_(nullptr),
42*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer_(nullptr),
43*d9f75844SAndroid Build Coastguard Worker fake_encoder_factory_([this]() {
44*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<FakeEncoder> fake_encoder;
45*d9f75844SAndroid Build Coastguard Worker if (video_encoder_configs_[0].codec_type == kVideoCodecVP8) {
46*d9f75844SAndroid Build Coastguard Worker fake_encoder = std::make_unique<FakeVp8Encoder>(clock_);
47*d9f75844SAndroid Build Coastguard Worker } else {
48*d9f75844SAndroid Build Coastguard Worker fake_encoder = std::make_unique<FakeEncoder>(clock_);
49*d9f75844SAndroid Build Coastguard Worker }
50*d9f75844SAndroid Build Coastguard Worker fake_encoder->SetMaxBitrate(fake_encoder_max_bitrate_);
51*d9f75844SAndroid Build Coastguard Worker return fake_encoder;
52*d9f75844SAndroid Build Coastguard Worker }),
__anon3d532dfb0202() 53*d9f75844SAndroid Build Coastguard Worker fake_decoder_factory_([]() { return std::make_unique<FakeDecoder>(); }),
54*d9f75844SAndroid Build Coastguard Worker bitrate_allocator_factory_(CreateBuiltinVideoBitrateAllocatorFactory()),
55*d9f75844SAndroid Build Coastguard Worker num_video_streams_(1),
56*d9f75844SAndroid Build Coastguard Worker num_audio_streams_(0),
57*d9f75844SAndroid Build Coastguard Worker num_flexfec_streams_(0),
58*d9f75844SAndroid Build Coastguard Worker audio_decoder_factory_(CreateBuiltinAudioDecoderFactory()),
59*d9f75844SAndroid Build Coastguard Worker audio_encoder_factory_(CreateBuiltinAudioEncoderFactory()),
60*d9f75844SAndroid Build Coastguard Worker task_queue_(task_queue_factory_->CreateTaskQueue(
61*d9f75844SAndroid Build Coastguard Worker "CallTestTaskQueue",
62*d9f75844SAndroid Build Coastguard Worker TaskQueueFactory::Priority::NORMAL)) {}
63*d9f75844SAndroid Build Coastguard Worker
64*d9f75844SAndroid Build Coastguard Worker CallTest::~CallTest() = default;
65*d9f75844SAndroid Build Coastguard Worker
RegisterRtpExtension(const RtpExtension & extension)66*d9f75844SAndroid Build Coastguard Worker void CallTest::RegisterRtpExtension(const RtpExtension& extension) {
67*d9f75844SAndroid Build Coastguard Worker for (const RtpExtension& registered_extension : rtp_extensions_) {
68*d9f75844SAndroid Build Coastguard Worker if (registered_extension.id == extension.id) {
69*d9f75844SAndroid Build Coastguard Worker ASSERT_EQ(registered_extension.uri, extension.uri)
70*d9f75844SAndroid Build Coastguard Worker << "Different URIs associated with ID " << extension.id << ".";
71*d9f75844SAndroid Build Coastguard Worker ASSERT_EQ(registered_extension.encrypt, extension.encrypt)
72*d9f75844SAndroid Build Coastguard Worker << "Encryption mismatch associated with ID " << extension.id << ".";
73*d9f75844SAndroid Build Coastguard Worker return;
74*d9f75844SAndroid Build Coastguard Worker } else { // Different IDs.
75*d9f75844SAndroid Build Coastguard Worker // Different IDs referring to the same extension probably indicate
76*d9f75844SAndroid Build Coastguard Worker // a mistake in the test.
77*d9f75844SAndroid Build Coastguard Worker ASSERT_FALSE(registered_extension.uri == extension.uri &&
78*d9f75844SAndroid Build Coastguard Worker registered_extension.encrypt == extension.encrypt)
79*d9f75844SAndroid Build Coastguard Worker << "URI " << extension.uri
80*d9f75844SAndroid Build Coastguard Worker << (extension.encrypt ? " with " : " without ")
81*d9f75844SAndroid Build Coastguard Worker << "encryption already registered with a different "
82*d9f75844SAndroid Build Coastguard Worker "ID ("
83*d9f75844SAndroid Build Coastguard Worker << extension.id << " vs. " << registered_extension.id << ").";
84*d9f75844SAndroid Build Coastguard Worker }
85*d9f75844SAndroid Build Coastguard Worker }
86*d9f75844SAndroid Build Coastguard Worker rtp_extensions_.push_back(extension);
87*d9f75844SAndroid Build Coastguard Worker }
88*d9f75844SAndroid Build Coastguard Worker
RunBaseTest(BaseTest * test)89*d9f75844SAndroid Build Coastguard Worker void CallTest::RunBaseTest(BaseTest* test) {
90*d9f75844SAndroid Build Coastguard Worker SendTask(task_queue(), [this, test]() {
91*d9f75844SAndroid Build Coastguard Worker num_video_streams_ = test->GetNumVideoStreams();
92*d9f75844SAndroid Build Coastguard Worker num_audio_streams_ = test->GetNumAudioStreams();
93*d9f75844SAndroid Build Coastguard Worker num_flexfec_streams_ = test->GetNumFlexfecStreams();
94*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(num_video_streams_ > 0 || num_audio_streams_ > 0);
95*d9f75844SAndroid Build Coastguard Worker Call::Config send_config(send_event_log_.get());
96*d9f75844SAndroid Build Coastguard Worker test->ModifySenderBitrateConfig(&send_config.bitrate_config);
97*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ > 0) {
98*d9f75844SAndroid Build Coastguard Worker CreateFakeAudioDevices(test->CreateCapturer(), test->CreateRenderer());
99*d9f75844SAndroid Build Coastguard Worker test->OnFakeAudioDevicesCreated(fake_send_audio_device_.get(),
100*d9f75844SAndroid Build Coastguard Worker fake_recv_audio_device_.get());
101*d9f75844SAndroid Build Coastguard Worker apm_send_ = AudioProcessingBuilder().Create();
102*d9f75844SAndroid Build Coastguard Worker apm_recv_ = AudioProcessingBuilder().Create();
103*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(0, fake_send_audio_device_->Init());
104*d9f75844SAndroid Build Coastguard Worker EXPECT_EQ(0, fake_recv_audio_device_->Init());
105*d9f75844SAndroid Build Coastguard Worker AudioState::Config audio_state_config;
106*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_mixer = AudioMixerImpl::Create();
107*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_processing = apm_send_;
108*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_device_module = fake_send_audio_device_;
109*d9f75844SAndroid Build Coastguard Worker send_config.audio_state = AudioState::Create(audio_state_config);
110*d9f75844SAndroid Build Coastguard Worker fake_send_audio_device_->RegisterAudioCallback(
111*d9f75844SAndroid Build Coastguard Worker send_config.audio_state->audio_transport());
112*d9f75844SAndroid Build Coastguard Worker }
113*d9f75844SAndroid Build Coastguard Worker CreateSenderCall(send_config);
114*d9f75844SAndroid Build Coastguard Worker if (test->ShouldCreateReceivers()) {
115*d9f75844SAndroid Build Coastguard Worker Call::Config recv_config(recv_event_log_.get());
116*d9f75844SAndroid Build Coastguard Worker test->ModifyReceiverBitrateConfig(&recv_config.bitrate_config);
117*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ > 0) {
118*d9f75844SAndroid Build Coastguard Worker AudioState::Config audio_state_config;
119*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_mixer = AudioMixerImpl::Create();
120*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_processing = apm_recv_;
121*d9f75844SAndroid Build Coastguard Worker audio_state_config.audio_device_module = fake_recv_audio_device_;
122*d9f75844SAndroid Build Coastguard Worker recv_config.audio_state = AudioState::Create(audio_state_config);
123*d9f75844SAndroid Build Coastguard Worker fake_recv_audio_device_->RegisterAudioCallback(
124*d9f75844SAndroid Build Coastguard Worker recv_config.audio_state->audio_transport());
125*d9f75844SAndroid Build Coastguard Worker }
126*d9f75844SAndroid Build Coastguard Worker CreateReceiverCall(recv_config);
127*d9f75844SAndroid Build Coastguard Worker }
128*d9f75844SAndroid Build Coastguard Worker test->OnCallsCreated(sender_call_.get(), receiver_call_.get());
129*d9f75844SAndroid Build Coastguard Worker receive_transport_ = test->CreateReceiveTransport(task_queue());
130*d9f75844SAndroid Build Coastguard Worker send_transport_ =
131*d9f75844SAndroid Build Coastguard Worker test->CreateSendTransport(task_queue(), sender_call_.get());
132*d9f75844SAndroid Build Coastguard Worker
133*d9f75844SAndroid Build Coastguard Worker if (test->ShouldCreateReceivers()) {
134*d9f75844SAndroid Build Coastguard Worker send_transport_->SetReceiver(receiver_call_->Receiver());
135*d9f75844SAndroid Build Coastguard Worker receive_transport_->SetReceiver(sender_call_->Receiver());
136*d9f75844SAndroid Build Coastguard Worker if (num_video_streams_ > 0)
137*d9f75844SAndroid Build Coastguard Worker receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
138*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ > 0)
139*d9f75844SAndroid Build Coastguard Worker receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
140*d9f75844SAndroid Build Coastguard Worker } else {
141*d9f75844SAndroid Build Coastguard Worker // Sender-only call delivers to itself.
142*d9f75844SAndroid Build Coastguard Worker send_transport_->SetReceiver(sender_call_->Receiver());
143*d9f75844SAndroid Build Coastguard Worker receive_transport_->SetReceiver(nullptr);
144*d9f75844SAndroid Build Coastguard Worker }
145*d9f75844SAndroid Build Coastguard Worker
146*d9f75844SAndroid Build Coastguard Worker CreateSendConfig(num_video_streams_, num_audio_streams_,
147*d9f75844SAndroid Build Coastguard Worker num_flexfec_streams_, send_transport_.get());
148*d9f75844SAndroid Build Coastguard Worker if (test->ShouldCreateReceivers()) {
149*d9f75844SAndroid Build Coastguard Worker CreateMatchingReceiveConfigs(receive_transport_.get());
150*d9f75844SAndroid Build Coastguard Worker }
151*d9f75844SAndroid Build Coastguard Worker if (num_video_streams_ > 0) {
152*d9f75844SAndroid Build Coastguard Worker test->ModifyVideoConfigs(GetVideoSendConfig(), &video_receive_configs_,
153*d9f75844SAndroid Build Coastguard Worker GetVideoEncoderConfig());
154*d9f75844SAndroid Build Coastguard Worker }
155*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ > 0) {
156*d9f75844SAndroid Build Coastguard Worker test->ModifyAudioConfigs(&audio_send_config_, &audio_receive_configs_);
157*d9f75844SAndroid Build Coastguard Worker }
158*d9f75844SAndroid Build Coastguard Worker if (num_flexfec_streams_ > 0) {
159*d9f75844SAndroid Build Coastguard Worker test->ModifyFlexfecConfigs(&flexfec_receive_configs_);
160*d9f75844SAndroid Build Coastguard Worker }
161*d9f75844SAndroid Build Coastguard Worker
162*d9f75844SAndroid Build Coastguard Worker if (num_flexfec_streams_ > 0) {
163*d9f75844SAndroid Build Coastguard Worker CreateFlexfecStreams();
164*d9f75844SAndroid Build Coastguard Worker test->OnFlexfecStreamsCreated(flexfec_receive_streams_);
165*d9f75844SAndroid Build Coastguard Worker }
166*d9f75844SAndroid Build Coastguard Worker if (num_video_streams_ > 0) {
167*d9f75844SAndroid Build Coastguard Worker CreateVideoStreams();
168*d9f75844SAndroid Build Coastguard Worker test->OnVideoStreamsCreated(GetVideoSendStream(), video_receive_streams_);
169*d9f75844SAndroid Build Coastguard Worker }
170*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ > 0) {
171*d9f75844SAndroid Build Coastguard Worker CreateAudioStreams();
172*d9f75844SAndroid Build Coastguard Worker test->OnAudioStreamsCreated(audio_send_stream_, audio_receive_streams_);
173*d9f75844SAndroid Build Coastguard Worker }
174*d9f75844SAndroid Build Coastguard Worker
175*d9f75844SAndroid Build Coastguard Worker if (num_video_streams_ > 0) {
176*d9f75844SAndroid Build Coastguard Worker int width = kDefaultWidth;
177*d9f75844SAndroid Build Coastguard Worker int height = kDefaultHeight;
178*d9f75844SAndroid Build Coastguard Worker int frame_rate = kDefaultFramerate;
179*d9f75844SAndroid Build Coastguard Worker test->ModifyVideoCaptureStartResolution(&width, &height, &frame_rate);
180*d9f75844SAndroid Build Coastguard Worker test->ModifyVideoDegradationPreference(°radation_preference_);
181*d9f75844SAndroid Build Coastguard Worker CreateFrameGeneratorCapturer(frame_rate, width, height);
182*d9f75844SAndroid Build Coastguard Worker test->OnFrameGeneratorCapturerCreated(frame_generator_capturer_);
183*d9f75844SAndroid Build Coastguard Worker }
184*d9f75844SAndroid Build Coastguard Worker
185*d9f75844SAndroid Build Coastguard Worker Start();
186*d9f75844SAndroid Build Coastguard Worker });
187*d9f75844SAndroid Build Coastguard Worker
188*d9f75844SAndroid Build Coastguard Worker test->PerformTest();
189*d9f75844SAndroid Build Coastguard Worker
190*d9f75844SAndroid Build Coastguard Worker SendTask(task_queue(), [this, test]() {
191*d9f75844SAndroid Build Coastguard Worker Stop();
192*d9f75844SAndroid Build Coastguard Worker test->OnStreamsStopped();
193*d9f75844SAndroid Build Coastguard Worker DestroyStreams();
194*d9f75844SAndroid Build Coastguard Worker send_transport_.reset();
195*d9f75844SAndroid Build Coastguard Worker receive_transport_.reset();
196*d9f75844SAndroid Build Coastguard Worker
197*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer_ = nullptr;
198*d9f75844SAndroid Build Coastguard Worker DestroyCalls();
199*d9f75844SAndroid Build Coastguard Worker
200*d9f75844SAndroid Build Coastguard Worker fake_send_audio_device_ = nullptr;
201*d9f75844SAndroid Build Coastguard Worker fake_recv_audio_device_ = nullptr;
202*d9f75844SAndroid Build Coastguard Worker });
203*d9f75844SAndroid Build Coastguard Worker }
204*d9f75844SAndroid Build Coastguard Worker
CreateCalls()205*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateCalls() {
206*d9f75844SAndroid Build Coastguard Worker CreateCalls(Call::Config(send_event_log_.get()),
207*d9f75844SAndroid Build Coastguard Worker Call::Config(recv_event_log_.get()));
208*d9f75844SAndroid Build Coastguard Worker }
209*d9f75844SAndroid Build Coastguard Worker
CreateCalls(const Call::Config & sender_config,const Call::Config & receiver_config)210*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateCalls(const Call::Config& sender_config,
211*d9f75844SAndroid Build Coastguard Worker const Call::Config& receiver_config) {
212*d9f75844SAndroid Build Coastguard Worker CreateSenderCall(sender_config);
213*d9f75844SAndroid Build Coastguard Worker CreateReceiverCall(receiver_config);
214*d9f75844SAndroid Build Coastguard Worker }
215*d9f75844SAndroid Build Coastguard Worker
CreateSenderCall()216*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateSenderCall() {
217*d9f75844SAndroid Build Coastguard Worker CreateSenderCall(Call::Config(send_event_log_.get()));
218*d9f75844SAndroid Build Coastguard Worker }
219*d9f75844SAndroid Build Coastguard Worker
CreateSenderCall(const Call::Config & config)220*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateSenderCall(const Call::Config& config) {
221*d9f75844SAndroid Build Coastguard Worker auto sender_config = config;
222*d9f75844SAndroid Build Coastguard Worker sender_config.task_queue_factory = task_queue_factory_.get();
223*d9f75844SAndroid Build Coastguard Worker sender_config.network_state_predictor_factory =
224*d9f75844SAndroid Build Coastguard Worker network_state_predictor_factory_.get();
225*d9f75844SAndroid Build Coastguard Worker sender_config.network_controller_factory = network_controller_factory_.get();
226*d9f75844SAndroid Build Coastguard Worker sender_config.trials = &field_trials_;
227*d9f75844SAndroid Build Coastguard Worker sender_call_.reset(Call::Create(sender_config));
228*d9f75844SAndroid Build Coastguard Worker }
229*d9f75844SAndroid Build Coastguard Worker
CreateReceiverCall(const Call::Config & config)230*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateReceiverCall(const Call::Config& config) {
231*d9f75844SAndroid Build Coastguard Worker auto receiver_config = config;
232*d9f75844SAndroid Build Coastguard Worker receiver_config.task_queue_factory = task_queue_factory_.get();
233*d9f75844SAndroid Build Coastguard Worker receiver_config.trials = &field_trials_;
234*d9f75844SAndroid Build Coastguard Worker receiver_call_.reset(Call::Create(receiver_config));
235*d9f75844SAndroid Build Coastguard Worker }
236*d9f75844SAndroid Build Coastguard Worker
DestroyCalls()237*d9f75844SAndroid Build Coastguard Worker void CallTest::DestroyCalls() {
238*d9f75844SAndroid Build Coastguard Worker sender_call_.reset();
239*d9f75844SAndroid Build Coastguard Worker receiver_call_.reset();
240*d9f75844SAndroid Build Coastguard Worker }
241*d9f75844SAndroid Build Coastguard Worker
CreateVideoSendConfig(VideoSendStream::Config * video_config,size_t num_video_streams,size_t num_used_ssrcs,Transport * send_transport)242*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateVideoSendConfig(VideoSendStream::Config* video_config,
243*d9f75844SAndroid Build Coastguard Worker size_t num_video_streams,
244*d9f75844SAndroid Build Coastguard Worker size_t num_used_ssrcs,
245*d9f75844SAndroid Build Coastguard Worker Transport* send_transport) {
246*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LE(num_video_streams + num_used_ssrcs, kNumSsrcs);
247*d9f75844SAndroid Build Coastguard Worker *video_config = VideoSendStream::Config(send_transport);
248*d9f75844SAndroid Build Coastguard Worker video_config->encoder_settings.encoder_factory = &fake_encoder_factory_;
249*d9f75844SAndroid Build Coastguard Worker video_config->encoder_settings.bitrate_allocator_factory =
250*d9f75844SAndroid Build Coastguard Worker bitrate_allocator_factory_.get();
251*d9f75844SAndroid Build Coastguard Worker video_config->rtp.payload_name = "FAKE";
252*d9f75844SAndroid Build Coastguard Worker video_config->rtp.payload_type = kFakeVideoSendPayloadType;
253*d9f75844SAndroid Build Coastguard Worker video_config->rtp.extmap_allow_mixed = true;
254*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kTransportSequenceNumberUri,
255*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
256*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kVideoContentTypeUri,
257*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
258*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kGenericFrameDescriptorUri00,
259*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
260*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kDependencyDescriptorUri,
261*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
262*d9f75844SAndroid Build Coastguard Worker if (video_encoder_configs_.empty()) {
263*d9f75844SAndroid Build Coastguard Worker video_encoder_configs_.emplace_back();
264*d9f75844SAndroid Build Coastguard Worker FillEncoderConfiguration(kVideoCodecGeneric, num_video_streams,
265*d9f75844SAndroid Build Coastguard Worker &video_encoder_configs_.back());
266*d9f75844SAndroid Build Coastguard Worker }
267*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < num_video_streams; ++i)
268*d9f75844SAndroid Build Coastguard Worker video_config->rtp.ssrcs.push_back(kVideoSendSsrcs[num_used_ssrcs + i]);
269*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kVideoRotationUri,
270*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
271*d9f75844SAndroid Build Coastguard Worker AddRtpExtensionByUri(RtpExtension::kColorSpaceUri,
272*d9f75844SAndroid Build Coastguard Worker &video_config->rtp.extensions);
273*d9f75844SAndroid Build Coastguard Worker }
274*d9f75844SAndroid Build Coastguard Worker
CreateAudioAndFecSendConfigs(size_t num_audio_streams,size_t num_flexfec_streams,Transport * send_transport)275*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateAudioAndFecSendConfigs(size_t num_audio_streams,
276*d9f75844SAndroid Build Coastguard Worker size_t num_flexfec_streams,
277*d9f75844SAndroid Build Coastguard Worker Transport* send_transport) {
278*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LE(num_audio_streams, 1);
279*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LE(num_flexfec_streams, 1);
280*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams > 0) {
281*d9f75844SAndroid Build Coastguard Worker AudioSendStream::Config audio_send_config(send_transport);
282*d9f75844SAndroid Build Coastguard Worker audio_send_config.rtp.ssrc = kAudioSendSsrc;
283*d9f75844SAndroid Build Coastguard Worker audio_send_config.send_codec_spec = AudioSendStream::Config::SendCodecSpec(
284*d9f75844SAndroid Build Coastguard Worker kAudioSendPayloadType, {"opus", 48000, 2, {{"stereo", "1"}}});
285*d9f75844SAndroid Build Coastguard Worker audio_send_config.encoder_factory = audio_encoder_factory_;
286*d9f75844SAndroid Build Coastguard Worker SetAudioConfig(audio_send_config);
287*d9f75844SAndroid Build Coastguard Worker }
288*d9f75844SAndroid Build Coastguard Worker
289*d9f75844SAndroid Build Coastguard Worker // TODO(brandtr): Update this when we support multistream protection.
290*d9f75844SAndroid Build Coastguard Worker if (num_flexfec_streams > 0) {
291*d9f75844SAndroid Build Coastguard Worker SetSendFecConfig({kVideoSendSsrcs[0]});
292*d9f75844SAndroid Build Coastguard Worker }
293*d9f75844SAndroid Build Coastguard Worker }
294*d9f75844SAndroid Build Coastguard Worker
SetAudioConfig(const AudioSendStream::Config & config)295*d9f75844SAndroid Build Coastguard Worker void CallTest::SetAudioConfig(const AudioSendStream::Config& config) {
296*d9f75844SAndroid Build Coastguard Worker audio_send_config_ = config;
297*d9f75844SAndroid Build Coastguard Worker }
298*d9f75844SAndroid Build Coastguard Worker
SetSendFecConfig(std::vector<uint32_t> video_send_ssrcs)299*d9f75844SAndroid Build Coastguard Worker void CallTest::SetSendFecConfig(std::vector<uint32_t> video_send_ssrcs) {
300*d9f75844SAndroid Build Coastguard Worker GetVideoSendConfig()->rtp.flexfec.payload_type = kFlexfecPayloadType;
301*d9f75844SAndroid Build Coastguard Worker GetVideoSendConfig()->rtp.flexfec.ssrc = kFlexfecSendSsrc;
302*d9f75844SAndroid Build Coastguard Worker GetVideoSendConfig()->rtp.flexfec.protected_media_ssrcs = video_send_ssrcs;
303*d9f75844SAndroid Build Coastguard Worker }
304*d9f75844SAndroid Build Coastguard Worker
SetSendUlpFecConfig(VideoSendStream::Config * send_config)305*d9f75844SAndroid Build Coastguard Worker void CallTest::SetSendUlpFecConfig(VideoSendStream::Config* send_config) {
306*d9f75844SAndroid Build Coastguard Worker send_config->rtp.ulpfec.red_payload_type = kRedPayloadType;
307*d9f75844SAndroid Build Coastguard Worker send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
308*d9f75844SAndroid Build Coastguard Worker send_config->rtp.ulpfec.red_rtx_payload_type = kRtxRedPayloadType;
309*d9f75844SAndroid Build Coastguard Worker }
310*d9f75844SAndroid Build Coastguard Worker
SetReceiveUlpFecConfig(VideoReceiveStreamInterface::Config * receive_config)311*d9f75844SAndroid Build Coastguard Worker void CallTest::SetReceiveUlpFecConfig(
312*d9f75844SAndroid Build Coastguard Worker VideoReceiveStreamInterface::Config* receive_config) {
313*d9f75844SAndroid Build Coastguard Worker receive_config->rtp.red_payload_type = kRedPayloadType;
314*d9f75844SAndroid Build Coastguard Worker receive_config->rtp.ulpfec_payload_type = kUlpfecPayloadType;
315*d9f75844SAndroid Build Coastguard Worker receive_config->rtp.rtx_associated_payload_types[kRtxRedPayloadType] =
316*d9f75844SAndroid Build Coastguard Worker kRedPayloadType;
317*d9f75844SAndroid Build Coastguard Worker }
318*d9f75844SAndroid Build Coastguard Worker
CreateSendConfig(size_t num_video_streams,size_t num_audio_streams,size_t num_flexfec_streams,Transport * send_transport)319*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateSendConfig(size_t num_video_streams,
320*d9f75844SAndroid Build Coastguard Worker size_t num_audio_streams,
321*d9f75844SAndroid Build Coastguard Worker size_t num_flexfec_streams,
322*d9f75844SAndroid Build Coastguard Worker Transport* send_transport) {
323*d9f75844SAndroid Build Coastguard Worker if (num_video_streams > 0) {
324*d9f75844SAndroid Build Coastguard Worker video_send_configs_.clear();
325*d9f75844SAndroid Build Coastguard Worker video_send_configs_.emplace_back(nullptr);
326*d9f75844SAndroid Build Coastguard Worker CreateVideoSendConfig(&video_send_configs_.back(), num_video_streams, 0,
327*d9f75844SAndroid Build Coastguard Worker send_transport);
328*d9f75844SAndroid Build Coastguard Worker }
329*d9f75844SAndroid Build Coastguard Worker CreateAudioAndFecSendConfigs(num_audio_streams, num_flexfec_streams,
330*d9f75844SAndroid Build Coastguard Worker send_transport);
331*d9f75844SAndroid Build Coastguard Worker }
332*d9f75844SAndroid Build Coastguard Worker
CreateMatchingVideoReceiveConfigs(const VideoSendStream::Config & video_send_config,Transport * rtcp_send_transport)333*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingVideoReceiveConfigs(
334*d9f75844SAndroid Build Coastguard Worker const VideoSendStream::Config& video_send_config,
335*d9f75844SAndroid Build Coastguard Worker Transport* rtcp_send_transport) {
336*d9f75844SAndroid Build Coastguard Worker CreateMatchingVideoReceiveConfigs(video_send_config, rtcp_send_transport,
337*d9f75844SAndroid Build Coastguard Worker true, &fake_decoder_factory_, absl::nullopt,
338*d9f75844SAndroid Build Coastguard Worker false, 0);
339*d9f75844SAndroid Build Coastguard Worker }
340*d9f75844SAndroid Build Coastguard Worker
CreateMatchingVideoReceiveConfigs(const VideoSendStream::Config & video_send_config,Transport * rtcp_send_transport,bool send_side_bwe,VideoDecoderFactory * decoder_factory,absl::optional<size_t> decode_sub_stream,bool receiver_reference_time_report,int rtp_history_ms)341*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingVideoReceiveConfigs(
342*d9f75844SAndroid Build Coastguard Worker const VideoSendStream::Config& video_send_config,
343*d9f75844SAndroid Build Coastguard Worker Transport* rtcp_send_transport,
344*d9f75844SAndroid Build Coastguard Worker bool send_side_bwe,
345*d9f75844SAndroid Build Coastguard Worker VideoDecoderFactory* decoder_factory,
346*d9f75844SAndroid Build Coastguard Worker absl::optional<size_t> decode_sub_stream,
347*d9f75844SAndroid Build Coastguard Worker bool receiver_reference_time_report,
348*d9f75844SAndroid Build Coastguard Worker int rtp_history_ms) {
349*d9f75844SAndroid Build Coastguard Worker AddMatchingVideoReceiveConfigs(
350*d9f75844SAndroid Build Coastguard Worker &video_receive_configs_, video_send_config, rtcp_send_transport,
351*d9f75844SAndroid Build Coastguard Worker send_side_bwe, decoder_factory, decode_sub_stream,
352*d9f75844SAndroid Build Coastguard Worker receiver_reference_time_report, rtp_history_ms);
353*d9f75844SAndroid Build Coastguard Worker }
354*d9f75844SAndroid Build Coastguard Worker
AddMatchingVideoReceiveConfigs(std::vector<VideoReceiveStreamInterface::Config> * receive_configs,const VideoSendStream::Config & video_send_config,Transport * rtcp_send_transport,bool send_side_bwe,VideoDecoderFactory * decoder_factory,absl::optional<size_t> decode_sub_stream,bool receiver_reference_time_report,int rtp_history_ms)355*d9f75844SAndroid Build Coastguard Worker void CallTest::AddMatchingVideoReceiveConfigs(
356*d9f75844SAndroid Build Coastguard Worker std::vector<VideoReceiveStreamInterface::Config>* receive_configs,
357*d9f75844SAndroid Build Coastguard Worker const VideoSendStream::Config& video_send_config,
358*d9f75844SAndroid Build Coastguard Worker Transport* rtcp_send_transport,
359*d9f75844SAndroid Build Coastguard Worker bool send_side_bwe,
360*d9f75844SAndroid Build Coastguard Worker VideoDecoderFactory* decoder_factory,
361*d9f75844SAndroid Build Coastguard Worker absl::optional<size_t> decode_sub_stream,
362*d9f75844SAndroid Build Coastguard Worker bool receiver_reference_time_report,
363*d9f75844SAndroid Build Coastguard Worker int rtp_history_ms) {
364*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(!video_send_config.rtp.ssrcs.empty());
365*d9f75844SAndroid Build Coastguard Worker VideoReceiveStreamInterface::Config default_config(rtcp_send_transport);
366*d9f75844SAndroid Build Coastguard Worker default_config.rtp.transport_cc = send_side_bwe;
367*d9f75844SAndroid Build Coastguard Worker default_config.rtp.local_ssrc = kReceiverLocalVideoSsrc;
368*d9f75844SAndroid Build Coastguard Worker for (const RtpExtension& extension : video_send_config.rtp.extensions)
369*d9f75844SAndroid Build Coastguard Worker default_config.rtp.extensions.push_back(extension);
370*d9f75844SAndroid Build Coastguard Worker default_config.rtp.nack.rtp_history_ms = rtp_history_ms;
371*d9f75844SAndroid Build Coastguard Worker // Enable RTT calculation so NTP time estimator will work.
372*d9f75844SAndroid Build Coastguard Worker default_config.rtp.rtcp_xr.receiver_reference_time_report =
373*d9f75844SAndroid Build Coastguard Worker receiver_reference_time_report;
374*d9f75844SAndroid Build Coastguard Worker default_config.renderer = &fake_renderer_;
375*d9f75844SAndroid Build Coastguard Worker
376*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < video_send_config.rtp.ssrcs.size(); ++i) {
377*d9f75844SAndroid Build Coastguard Worker VideoReceiveStreamInterface::Config video_recv_config(
378*d9f75844SAndroid Build Coastguard Worker default_config.Copy());
379*d9f75844SAndroid Build Coastguard Worker video_recv_config.decoders.clear();
380*d9f75844SAndroid Build Coastguard Worker if (!video_send_config.rtp.rtx.ssrcs.empty()) {
381*d9f75844SAndroid Build Coastguard Worker video_recv_config.rtp.rtx_ssrc = video_send_config.rtp.rtx.ssrcs[i];
382*d9f75844SAndroid Build Coastguard Worker video_recv_config.rtp.rtx_associated_payload_types[kSendRtxPayloadType] =
383*d9f75844SAndroid Build Coastguard Worker video_send_config.rtp.payload_type;
384*d9f75844SAndroid Build Coastguard Worker }
385*d9f75844SAndroid Build Coastguard Worker video_recv_config.rtp.remote_ssrc = video_send_config.rtp.ssrcs[i];
386*d9f75844SAndroid Build Coastguard Worker VideoReceiveStreamInterface::Decoder decoder;
387*d9f75844SAndroid Build Coastguard Worker
388*d9f75844SAndroid Build Coastguard Worker decoder.payload_type = video_send_config.rtp.payload_type;
389*d9f75844SAndroid Build Coastguard Worker decoder.video_format = SdpVideoFormat(video_send_config.rtp.payload_name);
390*d9f75844SAndroid Build Coastguard Worker // Force fake decoders on non-selected simulcast streams.
391*d9f75844SAndroid Build Coastguard Worker if (!decode_sub_stream || i == *decode_sub_stream) {
392*d9f75844SAndroid Build Coastguard Worker video_recv_config.decoder_factory = decoder_factory;
393*d9f75844SAndroid Build Coastguard Worker } else {
394*d9f75844SAndroid Build Coastguard Worker video_recv_config.decoder_factory = &fake_decoder_factory_;
395*d9f75844SAndroid Build Coastguard Worker }
396*d9f75844SAndroid Build Coastguard Worker video_recv_config.decoders.push_back(decoder);
397*d9f75844SAndroid Build Coastguard Worker receive_configs->emplace_back(std::move(video_recv_config));
398*d9f75844SAndroid Build Coastguard Worker }
399*d9f75844SAndroid Build Coastguard Worker }
400*d9f75844SAndroid Build Coastguard Worker
CreateMatchingAudioAndFecConfigs(Transport * rtcp_send_transport)401*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingAudioAndFecConfigs(
402*d9f75844SAndroid Build Coastguard Worker Transport* rtcp_send_transport) {
403*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_GE(1, num_audio_streams_);
404*d9f75844SAndroid Build Coastguard Worker if (num_audio_streams_ == 1) {
405*d9f75844SAndroid Build Coastguard Worker CreateMatchingAudioConfigs(rtcp_send_transport, "");
406*d9f75844SAndroid Build Coastguard Worker }
407*d9f75844SAndroid Build Coastguard Worker
408*d9f75844SAndroid Build Coastguard Worker // TODO(brandtr): Update this when we support multistream protection.
409*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(num_flexfec_streams_ <= 1);
410*d9f75844SAndroid Build Coastguard Worker if (num_flexfec_streams_ == 1) {
411*d9f75844SAndroid Build Coastguard Worker CreateMatchingFecConfig(rtcp_send_transport, *GetVideoSendConfig());
412*d9f75844SAndroid Build Coastguard Worker for (const RtpExtension& extension : GetVideoSendConfig()->rtp.extensions)
413*d9f75844SAndroid Build Coastguard Worker GetFlexFecConfig()->rtp.extensions.push_back(extension);
414*d9f75844SAndroid Build Coastguard Worker }
415*d9f75844SAndroid Build Coastguard Worker }
416*d9f75844SAndroid Build Coastguard Worker
CreateMatchingAudioConfigs(Transport * transport,std::string sync_group)417*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingAudioConfigs(Transport* transport,
418*d9f75844SAndroid Build Coastguard Worker std::string sync_group) {
419*d9f75844SAndroid Build Coastguard Worker audio_receive_configs_.push_back(CreateMatchingAudioConfig(
420*d9f75844SAndroid Build Coastguard Worker audio_send_config_, audio_decoder_factory_, transport, sync_group));
421*d9f75844SAndroid Build Coastguard Worker }
422*d9f75844SAndroid Build Coastguard Worker
CreateMatchingAudioConfig(const AudioSendStream::Config & send_config,rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,Transport * transport,std::string sync_group)423*d9f75844SAndroid Build Coastguard Worker AudioReceiveStreamInterface::Config CallTest::CreateMatchingAudioConfig(
424*d9f75844SAndroid Build Coastguard Worker const AudioSendStream::Config& send_config,
425*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
426*d9f75844SAndroid Build Coastguard Worker Transport* transport,
427*d9f75844SAndroid Build Coastguard Worker std::string sync_group) {
428*d9f75844SAndroid Build Coastguard Worker AudioReceiveStreamInterface::Config audio_config;
429*d9f75844SAndroid Build Coastguard Worker audio_config.rtp.local_ssrc = kReceiverLocalAudioSsrc;
430*d9f75844SAndroid Build Coastguard Worker audio_config.rtcp_send_transport = transport;
431*d9f75844SAndroid Build Coastguard Worker audio_config.rtp.remote_ssrc = send_config.rtp.ssrc;
432*d9f75844SAndroid Build Coastguard Worker audio_config.rtp.transport_cc =
433*d9f75844SAndroid Build Coastguard Worker send_config.send_codec_spec
434*d9f75844SAndroid Build Coastguard Worker ? send_config.send_codec_spec->transport_cc_enabled
435*d9f75844SAndroid Build Coastguard Worker : false;
436*d9f75844SAndroid Build Coastguard Worker audio_config.rtp.extensions = send_config.rtp.extensions;
437*d9f75844SAndroid Build Coastguard Worker audio_config.decoder_factory = audio_decoder_factory;
438*d9f75844SAndroid Build Coastguard Worker audio_config.decoder_map = {{kAudioSendPayloadType, {"opus", 48000, 2}}};
439*d9f75844SAndroid Build Coastguard Worker audio_config.sync_group = sync_group;
440*d9f75844SAndroid Build Coastguard Worker return audio_config;
441*d9f75844SAndroid Build Coastguard Worker }
442*d9f75844SAndroid Build Coastguard Worker
CreateMatchingFecConfig(Transport * transport,const VideoSendStream::Config & send_config)443*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingFecConfig(
444*d9f75844SAndroid Build Coastguard Worker Transport* transport,
445*d9f75844SAndroid Build Coastguard Worker const VideoSendStream::Config& send_config) {
446*d9f75844SAndroid Build Coastguard Worker FlexfecReceiveStream::Config config(transport);
447*d9f75844SAndroid Build Coastguard Worker config.payload_type = send_config.rtp.flexfec.payload_type;
448*d9f75844SAndroid Build Coastguard Worker config.rtp.remote_ssrc = send_config.rtp.flexfec.ssrc;
449*d9f75844SAndroid Build Coastguard Worker config.protected_media_ssrcs = send_config.rtp.flexfec.protected_media_ssrcs;
450*d9f75844SAndroid Build Coastguard Worker config.rtp.local_ssrc = kReceiverLocalVideoSsrc;
451*d9f75844SAndroid Build Coastguard Worker if (!video_receive_configs_.empty()) {
452*d9f75844SAndroid Build Coastguard Worker video_receive_configs_[0].rtp.protected_by_flexfec = true;
453*d9f75844SAndroid Build Coastguard Worker video_receive_configs_[0].rtp.packet_sink_ = this;
454*d9f75844SAndroid Build Coastguard Worker }
455*d9f75844SAndroid Build Coastguard Worker flexfec_receive_configs_.push_back(config);
456*d9f75844SAndroid Build Coastguard Worker }
457*d9f75844SAndroid Build Coastguard Worker
CreateMatchingReceiveConfigs(Transport * rtcp_send_transport)458*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateMatchingReceiveConfigs(Transport* rtcp_send_transport) {
459*d9f75844SAndroid Build Coastguard Worker video_receive_configs_.clear();
460*d9f75844SAndroid Build Coastguard Worker for (VideoSendStream::Config& video_send_config : video_send_configs_) {
461*d9f75844SAndroid Build Coastguard Worker CreateMatchingVideoReceiveConfigs(video_send_config, rtcp_send_transport);
462*d9f75844SAndroid Build Coastguard Worker }
463*d9f75844SAndroid Build Coastguard Worker CreateMatchingAudioAndFecConfigs(rtcp_send_transport);
464*d9f75844SAndroid Build Coastguard Worker }
465*d9f75844SAndroid Build Coastguard Worker
CreateFrameGeneratorCapturerWithDrift(Clock * clock,float speed,int framerate,int width,int height)466*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateFrameGeneratorCapturerWithDrift(Clock* clock,
467*d9f75844SAndroid Build Coastguard Worker float speed,
468*d9f75844SAndroid Build Coastguard Worker int framerate,
469*d9f75844SAndroid Build Coastguard Worker int width,
470*d9f75844SAndroid Build Coastguard Worker int height) {
471*d9f75844SAndroid Build Coastguard Worker video_sources_.clear();
472*d9f75844SAndroid Build Coastguard Worker auto frame_generator_capturer =
473*d9f75844SAndroid Build Coastguard Worker std::make_unique<test::FrameGeneratorCapturer>(
474*d9f75844SAndroid Build Coastguard Worker clock,
475*d9f75844SAndroid Build Coastguard Worker test::CreateSquareFrameGenerator(width, height, absl::nullopt,
476*d9f75844SAndroid Build Coastguard Worker absl::nullopt),
477*d9f75844SAndroid Build Coastguard Worker framerate * speed, *task_queue_factory_);
478*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer_ = frame_generator_capturer.get();
479*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer->Init();
480*d9f75844SAndroid Build Coastguard Worker video_sources_.push_back(std::move(frame_generator_capturer));
481*d9f75844SAndroid Build Coastguard Worker ConnectVideoSourcesToStreams();
482*d9f75844SAndroid Build Coastguard Worker }
483*d9f75844SAndroid Build Coastguard Worker
CreateFrameGeneratorCapturer(int framerate,int width,int height)484*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateFrameGeneratorCapturer(int framerate,
485*d9f75844SAndroid Build Coastguard Worker int width,
486*d9f75844SAndroid Build Coastguard Worker int height) {
487*d9f75844SAndroid Build Coastguard Worker video_sources_.clear();
488*d9f75844SAndroid Build Coastguard Worker auto frame_generator_capturer =
489*d9f75844SAndroid Build Coastguard Worker std::make_unique<test::FrameGeneratorCapturer>(
490*d9f75844SAndroid Build Coastguard Worker clock_,
491*d9f75844SAndroid Build Coastguard Worker test::CreateSquareFrameGenerator(width, height, absl::nullopt,
492*d9f75844SAndroid Build Coastguard Worker absl::nullopt),
493*d9f75844SAndroid Build Coastguard Worker framerate, *task_queue_factory_);
494*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer_ = frame_generator_capturer.get();
495*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer->Init();
496*d9f75844SAndroid Build Coastguard Worker video_sources_.push_back(std::move(frame_generator_capturer));
497*d9f75844SAndroid Build Coastguard Worker ConnectVideoSourcesToStreams();
498*d9f75844SAndroid Build Coastguard Worker }
499*d9f75844SAndroid Build Coastguard Worker
CreateFakeAudioDevices(std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,std::unique_ptr<TestAudioDeviceModule::Renderer> renderer)500*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateFakeAudioDevices(
501*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
502*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<TestAudioDeviceModule::Renderer> renderer) {
503*d9f75844SAndroid Build Coastguard Worker fake_send_audio_device_ = TestAudioDeviceModule::Create(
504*d9f75844SAndroid Build Coastguard Worker task_queue_factory_.get(), std::move(capturer), nullptr, 1.f);
505*d9f75844SAndroid Build Coastguard Worker fake_recv_audio_device_ = TestAudioDeviceModule::Create(
506*d9f75844SAndroid Build Coastguard Worker task_queue_factory_.get(), nullptr, std::move(renderer), 1.f);
507*d9f75844SAndroid Build Coastguard Worker }
508*d9f75844SAndroid Build Coastguard Worker
CreateVideoStreams()509*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateVideoStreams() {
510*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(video_receive_streams_.empty());
511*d9f75844SAndroid Build Coastguard Worker CreateVideoSendStreams();
512*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < video_receive_configs_.size(); ++i) {
513*d9f75844SAndroid Build Coastguard Worker video_receive_streams_.push_back(receiver_call_->CreateVideoReceiveStream(
514*d9f75844SAndroid Build Coastguard Worker video_receive_configs_[i].Copy()));
515*d9f75844SAndroid Build Coastguard Worker }
516*d9f75844SAndroid Build Coastguard Worker }
517*d9f75844SAndroid Build Coastguard Worker
CreateVideoSendStreams()518*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateVideoSendStreams() {
519*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(video_send_streams_.empty());
520*d9f75844SAndroid Build Coastguard Worker
521*d9f75844SAndroid Build Coastguard Worker // We currently only support testing external fec controllers with a single
522*d9f75844SAndroid Build Coastguard Worker // VideoSendStream.
523*d9f75844SAndroid Build Coastguard Worker if (fec_controller_factory_.get()) {
524*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LE(video_send_configs_.size(), 1);
525*d9f75844SAndroid Build Coastguard Worker }
526*d9f75844SAndroid Build Coastguard Worker
527*d9f75844SAndroid Build Coastguard Worker // TODO(http://crbug/818127):
528*d9f75844SAndroid Build Coastguard Worker // Remove this workaround when ALR is not screenshare-specific.
529*d9f75844SAndroid Build Coastguard Worker std::list<size_t> streams_creation_order;
530*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < video_send_configs_.size(); ++i) {
531*d9f75844SAndroid Build Coastguard Worker // If dual streams are created, add the screenshare stream last.
532*d9f75844SAndroid Build Coastguard Worker if (video_encoder_configs_[i].content_type ==
533*d9f75844SAndroid Build Coastguard Worker VideoEncoderConfig::ContentType::kScreen) {
534*d9f75844SAndroid Build Coastguard Worker streams_creation_order.push_back(i);
535*d9f75844SAndroid Build Coastguard Worker } else {
536*d9f75844SAndroid Build Coastguard Worker streams_creation_order.push_front(i);
537*d9f75844SAndroid Build Coastguard Worker }
538*d9f75844SAndroid Build Coastguard Worker }
539*d9f75844SAndroid Build Coastguard Worker
540*d9f75844SAndroid Build Coastguard Worker video_send_streams_.resize(video_send_configs_.size(), nullptr);
541*d9f75844SAndroid Build Coastguard Worker
542*d9f75844SAndroid Build Coastguard Worker for (size_t i : streams_creation_order) {
543*d9f75844SAndroid Build Coastguard Worker if (fec_controller_factory_.get()) {
544*d9f75844SAndroid Build Coastguard Worker video_send_streams_[i] = sender_call_->CreateVideoSendStream(
545*d9f75844SAndroid Build Coastguard Worker video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy(),
546*d9f75844SAndroid Build Coastguard Worker fec_controller_factory_->CreateFecController());
547*d9f75844SAndroid Build Coastguard Worker } else {
548*d9f75844SAndroid Build Coastguard Worker video_send_streams_[i] = sender_call_->CreateVideoSendStream(
549*d9f75844SAndroid Build Coastguard Worker video_send_configs_[i].Copy(), video_encoder_configs_[i].Copy());
550*d9f75844SAndroid Build Coastguard Worker }
551*d9f75844SAndroid Build Coastguard Worker }
552*d9f75844SAndroid Build Coastguard Worker }
553*d9f75844SAndroid Build Coastguard Worker
CreateVideoSendStream(const VideoEncoderConfig & encoder_config)554*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateVideoSendStream(const VideoEncoderConfig& encoder_config) {
555*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(video_send_streams_.empty());
556*d9f75844SAndroid Build Coastguard Worker video_send_streams_.push_back(sender_call_->CreateVideoSendStream(
557*d9f75844SAndroid Build Coastguard Worker GetVideoSendConfig()->Copy(), encoder_config.Copy()));
558*d9f75844SAndroid Build Coastguard Worker }
559*d9f75844SAndroid Build Coastguard Worker
CreateAudioStreams()560*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateAudioStreams() {
561*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(audio_send_stream_ == nullptr);
562*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK(audio_receive_streams_.empty());
563*d9f75844SAndroid Build Coastguard Worker audio_send_stream_ = sender_call_->CreateAudioSendStream(audio_send_config_);
564*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < audio_receive_configs_.size(); ++i) {
565*d9f75844SAndroid Build Coastguard Worker audio_receive_streams_.push_back(
566*d9f75844SAndroid Build Coastguard Worker receiver_call_->CreateAudioReceiveStream(audio_receive_configs_[i]));
567*d9f75844SAndroid Build Coastguard Worker }
568*d9f75844SAndroid Build Coastguard Worker }
569*d9f75844SAndroid Build Coastguard Worker
CreateFlexfecStreams()570*d9f75844SAndroid Build Coastguard Worker void CallTest::CreateFlexfecStreams() {
571*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < flexfec_receive_configs_.size(); ++i) {
572*d9f75844SAndroid Build Coastguard Worker flexfec_receive_streams_.push_back(
573*d9f75844SAndroid Build Coastguard Worker receiver_call_->CreateFlexfecReceiveStream(
574*d9f75844SAndroid Build Coastguard Worker flexfec_receive_configs_[i]));
575*d9f75844SAndroid Build Coastguard Worker }
576*d9f75844SAndroid Build Coastguard Worker }
577*d9f75844SAndroid Build Coastguard Worker
ConnectVideoSourcesToStreams()578*d9f75844SAndroid Build Coastguard Worker void CallTest::ConnectVideoSourcesToStreams() {
579*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < video_sources_.size(); ++i)
580*d9f75844SAndroid Build Coastguard Worker video_send_streams_[i]->SetSource(video_sources_[i].get(),
581*d9f75844SAndroid Build Coastguard Worker degradation_preference_);
582*d9f75844SAndroid Build Coastguard Worker }
583*d9f75844SAndroid Build Coastguard Worker
Start()584*d9f75844SAndroid Build Coastguard Worker void CallTest::Start() {
585*d9f75844SAndroid Build Coastguard Worker StartVideoStreams();
586*d9f75844SAndroid Build Coastguard Worker if (audio_send_stream_) {
587*d9f75844SAndroid Build Coastguard Worker audio_send_stream_->Start();
588*d9f75844SAndroid Build Coastguard Worker }
589*d9f75844SAndroid Build Coastguard Worker for (AudioReceiveStreamInterface* audio_recv_stream : audio_receive_streams_)
590*d9f75844SAndroid Build Coastguard Worker audio_recv_stream->Start();
591*d9f75844SAndroid Build Coastguard Worker }
592*d9f75844SAndroid Build Coastguard Worker
StartVideoStreams()593*d9f75844SAndroid Build Coastguard Worker void CallTest::StartVideoStreams() {
594*d9f75844SAndroid Build Coastguard Worker for (size_t i = 0; i < video_send_streams_.size(); ++i) {
595*d9f75844SAndroid Build Coastguard Worker std::vector<bool> active_rtp_streams(
596*d9f75844SAndroid Build Coastguard Worker video_send_configs_[i].rtp.ssrcs.size(), true);
597*d9f75844SAndroid Build Coastguard Worker video_send_streams_[i]->StartPerRtpStream(active_rtp_streams);
598*d9f75844SAndroid Build Coastguard Worker }
599*d9f75844SAndroid Build Coastguard Worker for (VideoReceiveStreamInterface* video_recv_stream : video_receive_streams_)
600*d9f75844SAndroid Build Coastguard Worker video_recv_stream->Start();
601*d9f75844SAndroid Build Coastguard Worker }
602*d9f75844SAndroid Build Coastguard Worker
Stop()603*d9f75844SAndroid Build Coastguard Worker void CallTest::Stop() {
604*d9f75844SAndroid Build Coastguard Worker for (AudioReceiveStreamInterface* audio_recv_stream : audio_receive_streams_)
605*d9f75844SAndroid Build Coastguard Worker audio_recv_stream->Stop();
606*d9f75844SAndroid Build Coastguard Worker if (audio_send_stream_) {
607*d9f75844SAndroid Build Coastguard Worker audio_send_stream_->Stop();
608*d9f75844SAndroid Build Coastguard Worker }
609*d9f75844SAndroid Build Coastguard Worker StopVideoStreams();
610*d9f75844SAndroid Build Coastguard Worker }
611*d9f75844SAndroid Build Coastguard Worker
StopVideoStreams()612*d9f75844SAndroid Build Coastguard Worker void CallTest::StopVideoStreams() {
613*d9f75844SAndroid Build Coastguard Worker for (VideoSendStream* video_send_stream : video_send_streams_)
614*d9f75844SAndroid Build Coastguard Worker video_send_stream->Stop();
615*d9f75844SAndroid Build Coastguard Worker for (VideoReceiveStreamInterface* video_recv_stream : video_receive_streams_)
616*d9f75844SAndroid Build Coastguard Worker video_recv_stream->Stop();
617*d9f75844SAndroid Build Coastguard Worker }
618*d9f75844SAndroid Build Coastguard Worker
DestroyStreams()619*d9f75844SAndroid Build Coastguard Worker void CallTest::DestroyStreams() {
620*d9f75844SAndroid Build Coastguard Worker if (audio_send_stream_)
621*d9f75844SAndroid Build Coastguard Worker sender_call_->DestroyAudioSendStream(audio_send_stream_);
622*d9f75844SAndroid Build Coastguard Worker audio_send_stream_ = nullptr;
623*d9f75844SAndroid Build Coastguard Worker for (AudioReceiveStreamInterface* audio_recv_stream : audio_receive_streams_)
624*d9f75844SAndroid Build Coastguard Worker receiver_call_->DestroyAudioReceiveStream(audio_recv_stream);
625*d9f75844SAndroid Build Coastguard Worker
626*d9f75844SAndroid Build Coastguard Worker DestroyVideoSendStreams();
627*d9f75844SAndroid Build Coastguard Worker
628*d9f75844SAndroid Build Coastguard Worker for (VideoReceiveStreamInterface* video_recv_stream : video_receive_streams_)
629*d9f75844SAndroid Build Coastguard Worker receiver_call_->DestroyVideoReceiveStream(video_recv_stream);
630*d9f75844SAndroid Build Coastguard Worker
631*d9f75844SAndroid Build Coastguard Worker for (FlexfecReceiveStream* flexfec_recv_stream : flexfec_receive_streams_)
632*d9f75844SAndroid Build Coastguard Worker receiver_call_->DestroyFlexfecReceiveStream(flexfec_recv_stream);
633*d9f75844SAndroid Build Coastguard Worker
634*d9f75844SAndroid Build Coastguard Worker video_receive_streams_.clear();
635*d9f75844SAndroid Build Coastguard Worker video_sources_.clear();
636*d9f75844SAndroid Build Coastguard Worker }
637*d9f75844SAndroid Build Coastguard Worker
DestroyVideoSendStreams()638*d9f75844SAndroid Build Coastguard Worker void CallTest::DestroyVideoSendStreams() {
639*d9f75844SAndroid Build Coastguard Worker for (VideoSendStream* video_send_stream : video_send_streams_)
640*d9f75844SAndroid Build Coastguard Worker sender_call_->DestroyVideoSendStream(video_send_stream);
641*d9f75844SAndroid Build Coastguard Worker video_send_streams_.clear();
642*d9f75844SAndroid Build Coastguard Worker }
643*d9f75844SAndroid Build Coastguard Worker
SetFakeVideoCaptureRotation(VideoRotation rotation)644*d9f75844SAndroid Build Coastguard Worker void CallTest::SetFakeVideoCaptureRotation(VideoRotation rotation) {
645*d9f75844SAndroid Build Coastguard Worker frame_generator_capturer_->SetFakeRotation(rotation);
646*d9f75844SAndroid Build Coastguard Worker }
647*d9f75844SAndroid Build Coastguard Worker
SetVideoDegradation(DegradationPreference preference)648*d9f75844SAndroid Build Coastguard Worker void CallTest::SetVideoDegradation(DegradationPreference preference) {
649*d9f75844SAndroid Build Coastguard Worker GetVideoSendStream()->SetSource(frame_generator_capturer_, preference);
650*d9f75844SAndroid Build Coastguard Worker }
651*d9f75844SAndroid Build Coastguard Worker
GetVideoSendConfig()652*d9f75844SAndroid Build Coastguard Worker VideoSendStream::Config* CallTest::GetVideoSendConfig() {
653*d9f75844SAndroid Build Coastguard Worker return &video_send_configs_[0];
654*d9f75844SAndroid Build Coastguard Worker }
655*d9f75844SAndroid Build Coastguard Worker
SetVideoSendConfig(const VideoSendStream::Config & config)656*d9f75844SAndroid Build Coastguard Worker void CallTest::SetVideoSendConfig(const VideoSendStream::Config& config) {
657*d9f75844SAndroid Build Coastguard Worker video_send_configs_.clear();
658*d9f75844SAndroid Build Coastguard Worker video_send_configs_.push_back(config.Copy());
659*d9f75844SAndroid Build Coastguard Worker }
660*d9f75844SAndroid Build Coastguard Worker
GetVideoEncoderConfig()661*d9f75844SAndroid Build Coastguard Worker VideoEncoderConfig* CallTest::GetVideoEncoderConfig() {
662*d9f75844SAndroid Build Coastguard Worker return &video_encoder_configs_[0];
663*d9f75844SAndroid Build Coastguard Worker }
664*d9f75844SAndroid Build Coastguard Worker
SetVideoEncoderConfig(const VideoEncoderConfig & config)665*d9f75844SAndroid Build Coastguard Worker void CallTest::SetVideoEncoderConfig(const VideoEncoderConfig& config) {
666*d9f75844SAndroid Build Coastguard Worker video_encoder_configs_.clear();
667*d9f75844SAndroid Build Coastguard Worker video_encoder_configs_.push_back(config.Copy());
668*d9f75844SAndroid Build Coastguard Worker }
669*d9f75844SAndroid Build Coastguard Worker
GetVideoSendStream()670*d9f75844SAndroid Build Coastguard Worker VideoSendStream* CallTest::GetVideoSendStream() {
671*d9f75844SAndroid Build Coastguard Worker return video_send_streams_[0];
672*d9f75844SAndroid Build Coastguard Worker }
GetFlexFecConfig()673*d9f75844SAndroid Build Coastguard Worker FlexfecReceiveStream::Config* CallTest::GetFlexFecConfig() {
674*d9f75844SAndroid Build Coastguard Worker return &flexfec_receive_configs_[0];
675*d9f75844SAndroid Build Coastguard Worker }
676*d9f75844SAndroid Build Coastguard Worker
OnRtpPacket(const RtpPacketReceived & packet)677*d9f75844SAndroid Build Coastguard Worker void CallTest::OnRtpPacket(const RtpPacketReceived& packet) {
678*d9f75844SAndroid Build Coastguard Worker // All FlexFEC streams protect all of the video streams.
679*d9f75844SAndroid Build Coastguard Worker for (FlexfecReceiveStream* flexfec_recv_stream : flexfec_receive_streams_)
680*d9f75844SAndroid Build Coastguard Worker flexfec_recv_stream->OnRtpPacket(packet);
681*d9f75844SAndroid Build Coastguard Worker }
682*d9f75844SAndroid Build Coastguard Worker
GetRtpExtensionByUri(const std::string & uri) const683*d9f75844SAndroid Build Coastguard Worker absl::optional<RtpExtension> CallTest::GetRtpExtensionByUri(
684*d9f75844SAndroid Build Coastguard Worker const std::string& uri) const {
685*d9f75844SAndroid Build Coastguard Worker for (const auto& extension : rtp_extensions_) {
686*d9f75844SAndroid Build Coastguard Worker if (extension.uri == uri) {
687*d9f75844SAndroid Build Coastguard Worker return extension;
688*d9f75844SAndroid Build Coastguard Worker }
689*d9f75844SAndroid Build Coastguard Worker }
690*d9f75844SAndroid Build Coastguard Worker return absl::nullopt;
691*d9f75844SAndroid Build Coastguard Worker }
692*d9f75844SAndroid Build Coastguard Worker
AddRtpExtensionByUri(const std::string & uri,std::vector<RtpExtension> * extensions) const693*d9f75844SAndroid Build Coastguard Worker void CallTest::AddRtpExtensionByUri(
694*d9f75844SAndroid Build Coastguard Worker const std::string& uri,
695*d9f75844SAndroid Build Coastguard Worker std::vector<RtpExtension>* extensions) const {
696*d9f75844SAndroid Build Coastguard Worker const absl::optional<RtpExtension> extension = GetRtpExtensionByUri(uri);
697*d9f75844SAndroid Build Coastguard Worker if (extension) {
698*d9f75844SAndroid Build Coastguard Worker extensions->push_back(*extension);
699*d9f75844SAndroid Build Coastguard Worker }
700*d9f75844SAndroid Build Coastguard Worker }
701*d9f75844SAndroid Build Coastguard Worker
702*d9f75844SAndroid Build Coastguard Worker constexpr size_t CallTest::kNumSsrcs;
703*d9f75844SAndroid Build Coastguard Worker const int CallTest::kDefaultWidth;
704*d9f75844SAndroid Build Coastguard Worker const int CallTest::kDefaultHeight;
705*d9f75844SAndroid Build Coastguard Worker const int CallTest::kDefaultFramerate;
706*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kSendRtxSsrcs[kNumSsrcs] = {
707*d9f75844SAndroid Build Coastguard Worker 0xBADCAFD, 0xBADCAFE, 0xBADCAFF, 0xBADCB00, 0xBADCB01, 0xBADCB02};
708*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kVideoSendSsrcs[kNumSsrcs] = {
709*d9f75844SAndroid Build Coastguard Worker 0xC0FFED, 0xC0FFEE, 0xC0FFEF, 0xC0FFF0, 0xC0FFF1, 0xC0FFF2};
710*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kAudioSendSsrc = 0xDEADBEEF;
711*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kFlexfecSendSsrc = 0xBADBEEF;
712*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kReceiverLocalVideoSsrc = 0x123456;
713*d9f75844SAndroid Build Coastguard Worker const uint32_t CallTest::kReceiverLocalAudioSsrc = 0x1234567;
714*d9f75844SAndroid Build Coastguard Worker const int CallTest::kNackRtpHistoryMs = 1000;
715*d9f75844SAndroid Build Coastguard Worker
716*d9f75844SAndroid Build Coastguard Worker const std::map<uint8_t, MediaType> CallTest::payload_type_map_ = {
717*d9f75844SAndroid Build Coastguard Worker {CallTest::kVideoSendPayloadType, MediaType::VIDEO},
718*d9f75844SAndroid Build Coastguard Worker {CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
719*d9f75844SAndroid Build Coastguard Worker {CallTest::kSendRtxPayloadType, MediaType::VIDEO},
720*d9f75844SAndroid Build Coastguard Worker {CallTest::kRedPayloadType, MediaType::VIDEO},
721*d9f75844SAndroid Build Coastguard Worker {CallTest::kRtxRedPayloadType, MediaType::VIDEO},
722*d9f75844SAndroid Build Coastguard Worker {CallTest::kUlpfecPayloadType, MediaType::VIDEO},
723*d9f75844SAndroid Build Coastguard Worker {CallTest::kFlexfecPayloadType, MediaType::VIDEO},
724*d9f75844SAndroid Build Coastguard Worker {CallTest::kAudioSendPayloadType, MediaType::AUDIO}};
725*d9f75844SAndroid Build Coastguard Worker
BaseTest()726*d9f75844SAndroid Build Coastguard Worker BaseTest::BaseTest() {}
727*d9f75844SAndroid Build Coastguard Worker
BaseTest(TimeDelta timeout)728*d9f75844SAndroid Build Coastguard Worker BaseTest::BaseTest(TimeDelta timeout) : RtpRtcpObserver(timeout) {}
729*d9f75844SAndroid Build Coastguard Worker
~BaseTest()730*d9f75844SAndroid Build Coastguard Worker BaseTest::~BaseTest() {}
731*d9f75844SAndroid Build Coastguard Worker
CreateCapturer()732*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<TestAudioDeviceModule::Capturer> BaseTest::CreateCapturer() {
733*d9f75844SAndroid Build Coastguard Worker return TestAudioDeviceModule::CreatePulsedNoiseCapturer(256, 48000);
734*d9f75844SAndroid Build Coastguard Worker }
735*d9f75844SAndroid Build Coastguard Worker
CreateRenderer()736*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<TestAudioDeviceModule::Renderer> BaseTest::CreateRenderer() {
737*d9f75844SAndroid Build Coastguard Worker return TestAudioDeviceModule::CreateDiscardRenderer(48000);
738*d9f75844SAndroid Build Coastguard Worker }
739*d9f75844SAndroid Build Coastguard Worker
OnFakeAudioDevicesCreated(TestAudioDeviceModule * send_audio_device,TestAudioDeviceModule * recv_audio_device)740*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnFakeAudioDevicesCreated(
741*d9f75844SAndroid Build Coastguard Worker TestAudioDeviceModule* send_audio_device,
742*d9f75844SAndroid Build Coastguard Worker TestAudioDeviceModule* recv_audio_device) {}
743*d9f75844SAndroid Build Coastguard Worker
ModifySenderBitrateConfig(BitrateConstraints * bitrate_config)744*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifySenderBitrateConfig(BitrateConstraints* bitrate_config) {}
745*d9f75844SAndroid Build Coastguard Worker
ModifyReceiverBitrateConfig(BitrateConstraints * bitrate_config)746*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyReceiverBitrateConfig(BitrateConstraints* bitrate_config) {
747*d9f75844SAndroid Build Coastguard Worker }
748*d9f75844SAndroid Build Coastguard Worker
OnCallsCreated(Call * sender_call,Call * receiver_call)749*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnCallsCreated(Call* sender_call, Call* receiver_call) {}
750*d9f75844SAndroid Build Coastguard Worker
CreateSendTransport(TaskQueueBase * task_queue,Call * sender_call)751*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<PacketTransport> BaseTest::CreateSendTransport(
752*d9f75844SAndroid Build Coastguard Worker TaskQueueBase* task_queue,
753*d9f75844SAndroid Build Coastguard Worker Call* sender_call) {
754*d9f75844SAndroid Build Coastguard Worker return std::make_unique<PacketTransport>(
755*d9f75844SAndroid Build Coastguard Worker task_queue, sender_call, this, test::PacketTransport::kSender,
756*d9f75844SAndroid Build Coastguard Worker CallTest::payload_type_map_,
757*d9f75844SAndroid Build Coastguard Worker std::make_unique<FakeNetworkPipe>(
758*d9f75844SAndroid Build Coastguard Worker Clock::GetRealTimeClock(),
759*d9f75844SAndroid Build Coastguard Worker std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())));
760*d9f75844SAndroid Build Coastguard Worker }
761*d9f75844SAndroid Build Coastguard Worker
CreateReceiveTransport(TaskQueueBase * task_queue)762*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<PacketTransport> BaseTest::CreateReceiveTransport(
763*d9f75844SAndroid Build Coastguard Worker TaskQueueBase* task_queue) {
764*d9f75844SAndroid Build Coastguard Worker return std::make_unique<PacketTransport>(
765*d9f75844SAndroid Build Coastguard Worker task_queue, nullptr, this, test::PacketTransport::kReceiver,
766*d9f75844SAndroid Build Coastguard Worker CallTest::payload_type_map_,
767*d9f75844SAndroid Build Coastguard Worker std::make_unique<FakeNetworkPipe>(
768*d9f75844SAndroid Build Coastguard Worker Clock::GetRealTimeClock(),
769*d9f75844SAndroid Build Coastguard Worker std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())));
770*d9f75844SAndroid Build Coastguard Worker }
771*d9f75844SAndroid Build Coastguard Worker
GetNumVideoStreams() const772*d9f75844SAndroid Build Coastguard Worker size_t BaseTest::GetNumVideoStreams() const {
773*d9f75844SAndroid Build Coastguard Worker return 1;
774*d9f75844SAndroid Build Coastguard Worker }
775*d9f75844SAndroid Build Coastguard Worker
GetNumAudioStreams() const776*d9f75844SAndroid Build Coastguard Worker size_t BaseTest::GetNumAudioStreams() const {
777*d9f75844SAndroid Build Coastguard Worker return 0;
778*d9f75844SAndroid Build Coastguard Worker }
779*d9f75844SAndroid Build Coastguard Worker
GetNumFlexfecStreams() const780*d9f75844SAndroid Build Coastguard Worker size_t BaseTest::GetNumFlexfecStreams() const {
781*d9f75844SAndroid Build Coastguard Worker return 0;
782*d9f75844SAndroid Build Coastguard Worker }
783*d9f75844SAndroid Build Coastguard Worker
ModifyVideoConfigs(VideoSendStream::Config * send_config,std::vector<VideoReceiveStreamInterface::Config> * receive_configs,VideoEncoderConfig * encoder_config)784*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyVideoConfigs(
785*d9f75844SAndroid Build Coastguard Worker VideoSendStream::Config* send_config,
786*d9f75844SAndroid Build Coastguard Worker std::vector<VideoReceiveStreamInterface::Config>* receive_configs,
787*d9f75844SAndroid Build Coastguard Worker VideoEncoderConfig* encoder_config) {}
788*d9f75844SAndroid Build Coastguard Worker
ModifyVideoCaptureStartResolution(int * width,int * heigt,int * frame_rate)789*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyVideoCaptureStartResolution(int* width,
790*d9f75844SAndroid Build Coastguard Worker int* heigt,
791*d9f75844SAndroid Build Coastguard Worker int* frame_rate) {}
792*d9f75844SAndroid Build Coastguard Worker
ModifyVideoDegradationPreference(DegradationPreference * degradation_preference)793*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyVideoDegradationPreference(
794*d9f75844SAndroid Build Coastguard Worker DegradationPreference* degradation_preference) {}
795*d9f75844SAndroid Build Coastguard Worker
OnVideoStreamsCreated(VideoSendStream * send_stream,const std::vector<VideoReceiveStreamInterface * > & receive_streams)796*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnVideoStreamsCreated(
797*d9f75844SAndroid Build Coastguard Worker VideoSendStream* send_stream,
798*d9f75844SAndroid Build Coastguard Worker const std::vector<VideoReceiveStreamInterface*>& receive_streams) {}
799*d9f75844SAndroid Build Coastguard Worker
ModifyAudioConfigs(AudioSendStream::Config * send_config,std::vector<AudioReceiveStreamInterface::Config> * receive_configs)800*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyAudioConfigs(
801*d9f75844SAndroid Build Coastguard Worker AudioSendStream::Config* send_config,
802*d9f75844SAndroid Build Coastguard Worker std::vector<AudioReceiveStreamInterface::Config>* receive_configs) {}
803*d9f75844SAndroid Build Coastguard Worker
OnAudioStreamsCreated(AudioSendStream * send_stream,const std::vector<AudioReceiveStreamInterface * > & receive_streams)804*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnAudioStreamsCreated(
805*d9f75844SAndroid Build Coastguard Worker AudioSendStream* send_stream,
806*d9f75844SAndroid Build Coastguard Worker const std::vector<AudioReceiveStreamInterface*>& receive_streams) {}
807*d9f75844SAndroid Build Coastguard Worker
ModifyFlexfecConfigs(std::vector<FlexfecReceiveStream::Config> * receive_configs)808*d9f75844SAndroid Build Coastguard Worker void BaseTest::ModifyFlexfecConfigs(
809*d9f75844SAndroid Build Coastguard Worker std::vector<FlexfecReceiveStream::Config>* receive_configs) {}
810*d9f75844SAndroid Build Coastguard Worker
OnFlexfecStreamsCreated(const std::vector<FlexfecReceiveStream * > & receive_streams)811*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnFlexfecStreamsCreated(
812*d9f75844SAndroid Build Coastguard Worker const std::vector<FlexfecReceiveStream*>& receive_streams) {}
813*d9f75844SAndroid Build Coastguard Worker
OnFrameGeneratorCapturerCreated(FrameGeneratorCapturer * frame_generator_capturer)814*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnFrameGeneratorCapturerCreated(
815*d9f75844SAndroid Build Coastguard Worker FrameGeneratorCapturer* frame_generator_capturer) {}
816*d9f75844SAndroid Build Coastguard Worker
OnStreamsStopped()817*d9f75844SAndroid Build Coastguard Worker void BaseTest::OnStreamsStopped() {}
818*d9f75844SAndroid Build Coastguard Worker
SendTest(TimeDelta timeout)819*d9f75844SAndroid Build Coastguard Worker SendTest::SendTest(TimeDelta timeout) : BaseTest(timeout) {}
820*d9f75844SAndroid Build Coastguard Worker
ShouldCreateReceivers() const821*d9f75844SAndroid Build Coastguard Worker bool SendTest::ShouldCreateReceivers() const {
822*d9f75844SAndroid Build Coastguard Worker return false;
823*d9f75844SAndroid Build Coastguard Worker }
824*d9f75844SAndroid Build Coastguard Worker
EndToEndTest()825*d9f75844SAndroid Build Coastguard Worker EndToEndTest::EndToEndTest() {}
826*d9f75844SAndroid Build Coastguard Worker
EndToEndTest(TimeDelta timeout)827*d9f75844SAndroid Build Coastguard Worker EndToEndTest::EndToEndTest(TimeDelta timeout) : BaseTest(timeout) {}
828*d9f75844SAndroid Build Coastguard Worker
ShouldCreateReceivers() const829*d9f75844SAndroid Build Coastguard Worker bool EndToEndTest::ShouldCreateReceivers() const {
830*d9f75844SAndroid Build Coastguard Worker return true;
831*d9f75844SAndroid Build Coastguard Worker }
832*d9f75844SAndroid Build Coastguard Worker
833*d9f75844SAndroid Build Coastguard Worker } // namespace test
834*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc
835