OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 #include <functional> | 10 #include <functional> |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 Call::Config config; | 112 Call::Config config; |
113 config.audio_state = AudioState::Create(audio_state_config); | 113 config.audio_state = AudioState::Create(audio_state_config); |
114 receiver_call_.reset(Call::Create(config)); | 114 receiver_call_.reset(Call::Create(config)); |
115 sender_call_.reset(Call::Create(config)); | 115 sender_call_.reset(Call::Create(config)); |
116 | 116 |
117 send_transport_.reset(new test::DirectTransport(sender_call_.get())); | 117 send_transport_.reset(new test::DirectTransport(sender_call_.get())); |
118 send_transport_->SetReceiver(receiver_call_->Receiver()); | 118 send_transport_->SetReceiver(receiver_call_->Receiver()); |
119 receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); | 119 receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); |
120 receive_transport_->SetReceiver(sender_call_->Receiver()); | 120 receive_transport_->SetReceiver(sender_call_->Receiver()); |
121 | 121 |
122 send_config_ = VideoSendStream::Config(send_transport_.get()); | 122 video_send_config_ = VideoSendStream::Config(send_transport_.get()); |
123 send_config_.rtp.ssrcs.push_back(kSendSsrcs[0]); | 123 video_send_config_.rtp.ssrcs.push_back(kSendSsrcs[0]); |
124 // Encoders will be set separately per stream. | 124 // Encoders will be set separately per stream. |
125 send_config_.encoder_settings.encoder = nullptr; | 125 video_send_config_.encoder_settings.encoder = nullptr; |
126 send_config_.encoder_settings.payload_name = "FAKE"; | 126 video_send_config_.encoder_settings.payload_name = "FAKE"; |
127 send_config_.encoder_settings.payload_type = kFakeSendPayloadType; | 127 video_send_config_.encoder_settings.payload_type = kFakeSendPayloadType; |
128 encoder_config_.streams = test::CreateVideoStreams(1); | 128 video_encoder_config_.streams = test::CreateVideoStreams(1); |
129 | 129 |
130 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); | 130 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); |
131 // receive_config_.decoders will be set by every stream separately. | 131 // receive_config_.decoders will be set by every stream separately. |
132 receive_config_.rtp.remote_ssrc = send_config_.rtp.ssrcs[0]; | 132 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; |
133 receive_config_.rtp.local_ssrc = kReceiverLocalSsrc; | 133 receive_config_.rtp.local_ssrc = kReceiverLocalSsrc; |
134 receive_config_.rtp.remb = true; | 134 receive_config_.rtp.remb = true; |
135 receive_config_.rtp.extensions.push_back( | 135 receive_config_.rtp.extensions.push_back( |
136 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 136 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
137 receive_config_.rtp.extensions.push_back( | 137 receive_config_.rtp.extensions.push_back( |
138 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 138 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
139 } | 139 } |
140 | 140 |
141 virtual void TearDown() { | 141 virtual void TearDown() { |
142 std::for_each(streams_.begin(), streams_.end(), | 142 std::for_each(streams_.begin(), streams_.end(), |
(...skipping 18 matching lines...) Expand all Loading... |
161 public: | 161 public: |
162 Stream(BitrateEstimatorTest* test, bool receive_audio) | 162 Stream(BitrateEstimatorTest* test, bool receive_audio) |
163 : test_(test), | 163 : test_(test), |
164 is_sending_receiving_(false), | 164 is_sending_receiving_(false), |
165 send_stream_(nullptr), | 165 send_stream_(nullptr), |
166 audio_receive_stream_(nullptr), | 166 audio_receive_stream_(nullptr), |
167 video_receive_stream_(nullptr), | 167 video_receive_stream_(nullptr), |
168 frame_generator_capturer_(), | 168 frame_generator_capturer_(), |
169 fake_encoder_(Clock::GetRealTimeClock()), | 169 fake_encoder_(Clock::GetRealTimeClock()), |
170 fake_decoder_() { | 170 fake_decoder_() { |
171 test_->send_config_.rtp.ssrcs[0]++; | 171 test_->video_send_config_.rtp.ssrcs[0]++; |
172 test_->send_config_.encoder_settings.encoder = &fake_encoder_; | 172 test_->video_send_config_.encoder_settings.encoder = &fake_encoder_; |
173 send_stream_ = test_->sender_call_->CreateVideoSendStream( | 173 send_stream_ = test_->sender_call_->CreateVideoSendStream( |
174 test_->send_config_, test_->encoder_config_); | 174 test_->video_send_config_, test_->video_encoder_config_); |
175 RTC_DCHECK_EQ(1u, test_->encoder_config_.streams.size()); | 175 RTC_DCHECK_EQ(1u, test_->video_encoder_config_.streams.size()); |
176 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( | 176 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( |
177 send_stream_->Input(), test_->encoder_config_.streams[0].width, | 177 send_stream_->Input(), test_->video_encoder_config_.streams[0].width, |
178 test_->encoder_config_.streams[0].height, 30, | 178 test_->video_encoder_config_.streams[0].height, 30, |
179 Clock::GetRealTimeClock())); | 179 Clock::GetRealTimeClock())); |
180 send_stream_->Start(); | 180 send_stream_->Start(); |
181 frame_generator_capturer_->Start(); | 181 frame_generator_capturer_->Start(); |
182 | 182 |
183 if (receive_audio) { | 183 if (receive_audio) { |
184 AudioReceiveStream::Config receive_config; | 184 AudioReceiveStream::Config receive_config; |
185 receive_config.rtp.remote_ssrc = test_->send_config_.rtp.ssrcs[0]; | 185 receive_config.rtp.remote_ssrc = test_->video_send_config_.rtp.ssrcs[0]; |
186 // Bogus non-default id to prevent hitting a RTC_DCHECK when creating | 186 // Bogus non-default id to prevent hitting a RTC_DCHECK when creating |
187 // the AudioReceiveStream. Every receive stream has to correspond to | 187 // the AudioReceiveStream. Every receive stream has to correspond to |
188 // an underlying channel id. | 188 // an underlying channel id. |
189 receive_config.voe_channel_id = 0; | 189 receive_config.voe_channel_id = 0; |
190 receive_config.rtp.extensions.push_back( | 190 receive_config.rtp.extensions.push_back( |
191 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 191 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
192 receive_config.combined_audio_video_bwe = true; | 192 receive_config.combined_audio_video_bwe = true; |
193 audio_receive_stream_ = | 193 audio_receive_stream_ = |
194 test_->receiver_call_->CreateAudioReceiveStream(receive_config); | 194 test_->receiver_call_->CreateAudioReceiveStream(receive_config); |
195 } else { | 195 } else { |
196 VideoReceiveStream::Decoder decoder; | 196 VideoReceiveStream::Decoder decoder; |
197 decoder.decoder = &fake_decoder_; | 197 decoder.decoder = &fake_decoder_; |
198 decoder.payload_type = | 198 decoder.payload_type = |
199 test_->send_config_.encoder_settings.payload_type; | 199 test_->video_send_config_.encoder_settings.payload_type; |
200 decoder.payload_name = | 200 decoder.payload_name = |
201 test_->send_config_.encoder_settings.payload_name; | 201 test_->video_send_config_.encoder_settings.payload_name; |
202 test_->receive_config_.decoders.clear(); | 202 test_->receive_config_.decoders.clear(); |
203 test_->receive_config_.decoders.push_back(decoder); | 203 test_->receive_config_.decoders.push_back(decoder); |
204 test_->receive_config_.rtp.remote_ssrc = | 204 test_->receive_config_.rtp.remote_ssrc = |
205 test_->send_config_.rtp.ssrcs[0]; | 205 test_->video_send_config_.rtp.ssrcs[0]; |
206 test_->receive_config_.rtp.local_ssrc++; | 206 test_->receive_config_.rtp.local_ssrc++; |
207 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream( | 207 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream( |
208 test_->receive_config_); | 208 test_->receive_config_); |
209 video_receive_stream_->Start(); | 209 video_receive_stream_->Start(); |
210 } | 210 } |
211 is_sending_receiving_ = true; | 211 is_sending_receiving_ = true; |
212 } | 212 } |
213 | 213 |
214 ~Stream() { | 214 ~Stream() { |
215 EXPECT_FALSE(is_sending_receiving_); | 215 EXPECT_FALSE(is_sending_receiving_); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 VideoReceiveStream::Config receive_config_; | 257 VideoReceiveStream::Config receive_config_; |
258 std::vector<Stream*> streams_; | 258 std::vector<Stream*> streams_; |
259 }; | 259 }; |
260 | 260 |
261 static const char* kAbsSendTimeLog = | 261 static const char* kAbsSendTimeLog = |
262 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; | 262 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; |
263 static const char* kSingleStreamLog = | 263 static const char* kSingleStreamLog = |
264 "RemoteBitrateEstimatorSingleStream: Instantiating."; | 264 "RemoteBitrateEstimatorSingleStream: Instantiating."; |
265 | 265 |
266 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 266 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { |
267 send_config_.rtp.extensions.push_back( | 267 video_send_config_.rtp.extensions.push_back( |
268 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 268 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
269 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 269 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
270 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 270 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
271 streams_.push_back(new Stream(this, false)); | 271 streams_.push_back(new Stream(this, false)); |
272 EXPECT_TRUE(receiver_log_.Wait()); | 272 EXPECT_TRUE(receiver_log_.Wait()); |
273 } | 273 } |
274 | 274 |
275 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { | 275 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { |
276 send_config_.rtp.extensions.push_back( | 276 video_send_config_.rtp.extensions.push_back( |
277 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 277 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
278 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 278 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
279 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 279 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
280 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 280 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
281 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 281 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
282 streams_.push_back(new Stream(this, true)); | 282 streams_.push_back(new Stream(this, true)); |
283 EXPECT_TRUE(receiver_log_.Wait()); | 283 EXPECT_TRUE(receiver_log_.Wait()); |
284 } | 284 } |
285 | 285 |
286 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 286 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { |
287 send_config_.rtp.extensions.push_back( | 287 video_send_config_.rtp.extensions.push_back( |
288 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 288 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
289 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 289 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
290 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 290 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
291 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 291 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
292 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 292 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
293 streams_.push_back(new Stream(this, false)); | 293 streams_.push_back(new Stream(this, false)); |
294 EXPECT_TRUE(receiver_log_.Wait()); | 294 EXPECT_TRUE(receiver_log_.Wait()); |
295 } | 295 } |
296 | 296 |
297 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { | 297 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { |
298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
299 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 299 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
300 streams_.push_back(new Stream(this, true)); | 300 streams_.push_back(new Stream(this, true)); |
301 EXPECT_TRUE(receiver_log_.Wait()); | 301 EXPECT_TRUE(receiver_log_.Wait()); |
302 | 302 |
303 send_config_.rtp.extensions.push_back( | 303 video_send_config_.rtp.extensions.push_back( |
304 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 304 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
305 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 305 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
307 streams_.push_back(new Stream(this, true)); | 307 streams_.push_back(new Stream(this, true)); |
308 EXPECT_TRUE(receiver_log_.Wait()); | 308 EXPECT_TRUE(receiver_log_.Wait()); |
309 } | 309 } |
310 | 310 |
311 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 311 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { |
312 send_config_.rtp.extensions.push_back( | 312 video_send_config_.rtp.extensions.push_back( |
313 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 313 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
314 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 314 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
315 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 315 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
316 streams_.push_back(new Stream(this, false)); | 316 streams_.push_back(new Stream(this, false)); |
317 EXPECT_TRUE(receiver_log_.Wait()); | 317 EXPECT_TRUE(receiver_log_.Wait()); |
318 | 318 |
319 send_config_.rtp.extensions[0] = | 319 video_send_config_.rtp.extensions[0] = |
320 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 320 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
321 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 321 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
322 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 322 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
323 streams_.push_back(new Stream(this, false)); | 323 streams_.push_back(new Stream(this, false)); |
324 EXPECT_TRUE(receiver_log_.Wait()); | 324 EXPECT_TRUE(receiver_log_.Wait()); |
325 } | 325 } |
326 | 326 |
327 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { | 327 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { |
328 send_config_.rtp.extensions.push_back( | 328 video_send_config_.rtp.extensions.push_back( |
329 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 329 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
330 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 330 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
331 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 331 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
332 streams_.push_back(new Stream(this, false)); | 332 streams_.push_back(new Stream(this, false)); |
333 EXPECT_TRUE(receiver_log_.Wait()); | 333 EXPECT_TRUE(receiver_log_.Wait()); |
334 | 334 |
335 send_config_.rtp.extensions[0] = | 335 video_send_config_.rtp.extensions[0] = |
336 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 336 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
337 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 337 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
338 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 338 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
339 streams_.push_back(new Stream(this, false)); | 339 streams_.push_back(new Stream(this, false)); |
340 EXPECT_TRUE(receiver_log_.Wait()); | 340 EXPECT_TRUE(receiver_log_.Wait()); |
341 | 341 |
342 send_config_.rtp.extensions[0] = | 342 video_send_config_.rtp.extensions[0] = |
343 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); | 343 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); |
344 receiver_log_.PushExpectedLogLine( | 344 receiver_log_.PushExpectedLogLine( |
345 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 345 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); |
346 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 346 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
347 streams_.push_back(new Stream(this, false)); | 347 streams_.push_back(new Stream(this, false)); |
348 streams_[0]->StopSending(); | 348 streams_[0]->StopSending(); |
349 streams_[1]->StopSending(); | 349 streams_[1]->StopSending(); |
350 EXPECT_TRUE(receiver_log_.Wait()); | 350 EXPECT_TRUE(receiver_log_.Wait()); |
351 } | 351 } |
352 } // namespace webrtc | 352 } // namespace webrtc |
OLD | NEW |