Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 1419193002: Call OnSentPacket for all packets sent in the test framework. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Comments addresded. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/video/video_quality_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> // max 10 #include <algorithm> // max
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 VideoEncoderConfig* encoder_config) override { 113 VideoEncoderConfig* encoder_config) override {
114 send_config->rtp.c_name = kCName; 114 send_config->rtp.c_name = kCName;
115 } 115 }
116 116
117 void PerformTest() override { 117 void PerformTest() override {
118 EXPECT_EQ(kEventSignaled, Wait()) 118 EXPECT_EQ(kEventSignaled, Wait())
119 << "Timed out while waiting for RTCP with CNAME."; 119 << "Timed out while waiting for RTCP with CNAME.";
120 } 120 }
121 } test; 121 } test;
122 122
123 RunBaseTest(&test); 123 RunBaseTest(&test, FakeNetworkPipe::Config());
124 } 124 }
125 125
126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { 126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) {
127 static const uint8_t kAbsSendTimeExtensionId = 13; 127 static const uint8_t kAbsSendTimeExtensionId = 13;
128 class AbsoluteSendTimeObserver : public test::SendTest { 128 class AbsoluteSendTimeObserver : public test::SendTest {
129 public: 129 public:
130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { 130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) {
131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId)); 132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId));
133 } 133 }
(...skipping 18 matching lines...) Expand all
152 send_config->rtp.extensions.push_back( 152 send_config->rtp.extensions.push_back(
153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); 153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId));
154 } 154 }
155 155
156 void PerformTest() override { 156 void PerformTest() override {
157 EXPECT_EQ(kEventSignaled, Wait()) 157 EXPECT_EQ(kEventSignaled, Wait())
158 << "Timed out while waiting for single RTP packet."; 158 << "Timed out while waiting for single RTP packet.";
159 } 159 }
160 } test; 160 } test;
161 161
162 RunBaseTest(&test); 162 RunBaseTest(&test, FakeNetworkPipe::Config());
163 } 163 }
164 164
165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { 165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) {
166 static const uint8_t kTOffsetExtensionId = 13; 166 static const uint8_t kTOffsetExtensionId = 13;
167 static const int kEncodeDelayMs = 5; 167 static const int kEncodeDelayMs = 5;
168 class TransmissionTimeOffsetObserver : public test::SendTest { 168 class TransmissionTimeOffsetObserver : public test::SendTest {
169 public: 169 public:
170 TransmissionTimeOffsetObserver() 170 TransmissionTimeOffsetObserver()
171 : SendTest(kDefaultTimeoutMs), 171 : SendTest(kDefaultTimeoutMs),
172 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { 172 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) {
(...skipping 24 matching lines...) Expand all
197 } 197 }
198 198
199 void PerformTest() override { 199 void PerformTest() override {
200 EXPECT_EQ(kEventSignaled, Wait()) 200 EXPECT_EQ(kEventSignaled, Wait())
201 << "Timed out while waiting for a single RTP packet."; 201 << "Timed out while waiting for a single RTP packet.";
202 } 202 }
203 203
204 test::DelayedEncoder encoder_; 204 test::DelayedEncoder encoder_;
205 } test; 205 } test;
206 206
207 RunBaseTest(&test); 207 RunBaseTest(&test, FakeNetworkPipe::Config());
208 } 208 }
209 209
210 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { 210 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) {
211 static const uint8_t kExtensionId = 13; 211 static const uint8_t kExtensionId = 13;
212 class TransportWideSequenceNumberObserver : public test::SendTest { 212 class TransportWideSequenceNumberObserver : public test::SendTest {
213 public: 213 public:
214 TransportWideSequenceNumberObserver() 214 TransportWideSequenceNumberObserver()
215 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { 215 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) {
216 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( 216 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension(
217 kRtpExtensionTransportSequenceNumber, kExtensionId)); 217 kRtpExtensionTransportSequenceNumber, kExtensionId));
(...skipping 22 matching lines...) Expand all
240 } 240 }
241 241
242 void PerformTest() override { 242 void PerformTest() override {
243 EXPECT_EQ(kEventSignaled, Wait()) 243 EXPECT_EQ(kEventSignaled, Wait())
244 << "Timed out while waiting for a single RTP packet."; 244 << "Timed out while waiting for a single RTP packet.";
245 } 245 }
246 246
247 test::FakeEncoder encoder_; 247 test::FakeEncoder encoder_;
248 } test; 248 } test;
249 249
250 RunBaseTest(&test); 250 RunBaseTest(&test, FakeNetworkPipe::Config());
251 } 251 }
252 252
253 class FakeReceiveStatistics : public NullReceiveStatistics { 253 class FakeReceiveStatistics : public NullReceiveStatistics {
254 public: 254 public:
255 FakeReceiveStatistics(uint32_t send_ssrc, 255 FakeReceiveStatistics(uint32_t send_ssrc,
256 uint32_t last_sequence_number, 256 uint32_t last_sequence_number,
257 uint32_t cumulative_lost, 257 uint32_t cumulative_lost,
258 uint8_t fraction_lost) 258 uint8_t fraction_lost)
259 : lossy_stats_(new LossyStatistician(last_sequence_number, 259 : lossy_stats_(new LossyStatistician(last_sequence_number,
260 cumulative_lost, 260 cumulative_lost,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 304
305 rtc::scoped_ptr<LossyStatistician> lossy_stats_; 305 rtc::scoped_ptr<LossyStatistician> lossy_stats_;
306 StatisticianMap stats_map_; 306 StatisticianMap stats_map_;
307 }; 307 };
308 308
309 TEST_F(VideoSendStreamTest, SupportsFec) { 309 TEST_F(VideoSendStreamTest, SupportsFec) {
310 class FecObserver : public test::SendTest { 310 class FecObserver : public test::SendTest {
311 public: 311 public:
312 FecObserver() 312 FecObserver()
313 : SendTest(kDefaultTimeoutMs), 313 : SendTest(kDefaultTimeoutMs),
314 transport_adapter_(SendTransport()),
315 send_count_(0), 314 send_count_(0),
316 received_media_(false), 315 received_media_(false),
317 received_fec_(false) { 316 received_fec_(false) {
318 transport_adapter_.Enable();
319 } 317 }
320 318
321 private: 319 private:
322 Action OnSendRtp(const uint8_t* packet, size_t length) override { 320 Action OnSendRtp(const uint8_t* packet, size_t length) override {
323 RTPHeader header; 321 RTPHeader header;
324 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 322 EXPECT_TRUE(parser_->Parse(packet, length, &header));
325 323
326 // Send lossy receive reports to trigger FEC enabling. 324 // Send lossy receive reports to trigger FEC enabling.
327 if (send_count_++ % 2 != 0) { 325 if (send_count_++ % 2 != 0) {
328 // Receive statistics reporting having lost 50% of the packets. 326 // Receive statistics reporting having lost 50% of the packets.
329 FakeReceiveStatistics lossy_receive_stats( 327 FakeReceiveStatistics lossy_receive_stats(
330 kSendSsrcs[0], header.sequenceNumber, send_count_ / 2, 127); 328 kSendSsrcs[0], header.sequenceNumber, send_count_ / 2, 127);
331 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), 329 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(),
332 &lossy_receive_stats, nullptr, 330 &lossy_receive_stats, nullptr,
333 &transport_adapter_); 331 transport_adapter_.get());
334 332
335 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 333 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
336 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 334 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
337 335
338 RTCPSender::FeedbackState feedback_state; 336 RTCPSender::FeedbackState feedback_state;
339 337
340 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 338 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
341 } 339 }
342 340
343 int encapsulated_payload_type = -1; 341 int encapsulated_payload_type = -1;
(...skipping 16 matching lines...) Expand all
360 358
361 if (received_media_ && received_fec_) 359 if (received_media_ && received_fec_)
362 observation_complete_->Set(); 360 observation_complete_->Set();
363 361
364 return SEND_PACKET; 362 return SEND_PACKET;
365 } 363 }
366 364
367 void ModifyConfigs(VideoSendStream::Config* send_config, 365 void ModifyConfigs(VideoSendStream::Config* send_config,
368 std::vector<VideoReceiveStream::Config>* receive_configs, 366 std::vector<VideoReceiveStream::Config>* receive_configs,
369 VideoEncoderConfig* encoder_config) override { 367 VideoEncoderConfig* encoder_config) override {
368 transport_adapter_.reset(
369 new internal::TransportAdapter(send_config->send_transport));
370 transport_adapter_->Enable();
370 send_config->rtp.fec.red_payload_type = kRedPayloadType; 371 send_config->rtp.fec.red_payload_type = kRedPayloadType;
371 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 372 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
372 } 373 }
373 374
374 void PerformTest() override { 375 void PerformTest() override {
375 EXPECT_TRUE(Wait()) << "Timed out waiting for FEC and media packets."; 376 EXPECT_TRUE(Wait()) << "Timed out waiting for FEC and media packets.";
376 } 377 }
377 378
378 internal::TransportAdapter transport_adapter_; 379 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
379 int send_count_; 380 int send_count_;
380 bool received_media_; 381 bool received_media_;
381 bool received_fec_; 382 bool received_fec_;
382 } test; 383 } test;
383 384
384 RunBaseTest(&test); 385 RunBaseTest(&test, FakeNetworkPipe::Config());
385 } 386 }
386 387
387 void VideoSendStreamTest::TestNackRetransmission( 388 void VideoSendStreamTest::TestNackRetransmission(
388 uint32_t retransmit_ssrc, 389 uint32_t retransmit_ssrc,
389 uint8_t retransmit_payload_type) { 390 uint8_t retransmit_payload_type) {
390 class NackObserver : public test::SendTest { 391 class NackObserver : public test::SendTest {
391 public: 392 public:
392 explicit NackObserver(uint32_t retransmit_ssrc, 393 explicit NackObserver(uint32_t retransmit_ssrc,
393 uint8_t retransmit_payload_type) 394 uint8_t retransmit_payload_type)
394 : SendTest(kDefaultTimeoutMs), 395 : SendTest(kDefaultTimeoutMs),
395 transport_adapter_(SendTransport()),
396 send_count_(0), 396 send_count_(0),
397 retransmit_ssrc_(retransmit_ssrc), 397 retransmit_ssrc_(retransmit_ssrc),
398 retransmit_payload_type_(retransmit_payload_type), 398 retransmit_payload_type_(retransmit_payload_type),
399 nacked_sequence_number_(-1) { 399 nacked_sequence_number_(-1) {
400 transport_adapter_.Enable();
401 } 400 }
402 401
403 private: 402 private:
404 Action OnSendRtp(const uint8_t* packet, size_t length) override { 403 Action OnSendRtp(const uint8_t* packet, size_t length) override {
405 RTPHeader header; 404 RTPHeader header;
406 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 405 EXPECT_TRUE(parser_->Parse(packet, length, &header));
407 406
408 // Nack second packet after receiving the third one. 407 // Nack second packet after receiving the third one.
409 if (++send_count_ == 3) { 408 if (++send_count_ == 3) {
410 uint16_t nack_sequence_number = header.sequenceNumber - 1; 409 uint16_t nack_sequence_number = header.sequenceNumber - 1;
411 nacked_sequence_number_ = nack_sequence_number; 410 nacked_sequence_number_ = nack_sequence_number;
412 NullReceiveStatistics null_stats; 411 NullReceiveStatistics null_stats;
413 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats, 412 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats,
414 nullptr, &transport_adapter_); 413 nullptr, transport_adapter_.get());
415 414
416 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 415 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
417 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 416 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
418 417
419 RTCPSender::FeedbackState feedback_state; 418 RTCPSender::FeedbackState feedback_state;
420 419
421 EXPECT_EQ(0, 420 EXPECT_EQ(0,
422 rtcp_sender.SendRTCP( 421 rtcp_sender.SendRTCP(
423 feedback_state, kRtcpNack, 1, &nack_sequence_number)); 422 feedback_state, kRtcpNack, 1, &nack_sequence_number));
424 } 423 }
(...skipping 13 matching lines...) Expand all
438 EXPECT_EQ(retransmit_payload_type_, header.payloadType); 437 EXPECT_EQ(retransmit_payload_type_, header.payloadType);
439 observation_complete_->Set(); 438 observation_complete_->Set();
440 } 439 }
441 440
442 return SEND_PACKET; 441 return SEND_PACKET;
443 } 442 }
444 443
445 void ModifyConfigs(VideoSendStream::Config* send_config, 444 void ModifyConfigs(VideoSendStream::Config* send_config,
446 std::vector<VideoReceiveStream::Config>* receive_configs, 445 std::vector<VideoReceiveStream::Config>* receive_configs,
447 VideoEncoderConfig* encoder_config) override { 446 VideoEncoderConfig* encoder_config) override {
447 transport_adapter_.reset(
448 new internal::TransportAdapter(send_config->send_transport));
449 transport_adapter_->Enable();
448 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 450 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
449 send_config->rtp.rtx.payload_type = retransmit_payload_type_; 451 send_config->rtp.rtx.payload_type = retransmit_payload_type_;
450 if (retransmit_ssrc_ != kSendSsrcs[0]) 452 if (retransmit_ssrc_ != kSendSsrcs[0])
451 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); 453 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_);
452 } 454 }
453 455
454 void PerformTest() override { 456 void PerformTest() override {
455 EXPECT_EQ(kEventSignaled, Wait()) 457 EXPECT_EQ(kEventSignaled, Wait())
456 << "Timed out while waiting for NACK retransmission."; 458 << "Timed out while waiting for NACK retransmission.";
457 } 459 }
458 460
459 internal::TransportAdapter transport_adapter_; 461 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
460 int send_count_; 462 int send_count_;
461 uint32_t retransmit_ssrc_; 463 uint32_t retransmit_ssrc_;
462 uint8_t retransmit_payload_type_; 464 uint8_t retransmit_payload_type_;
463 int nacked_sequence_number_; 465 int nacked_sequence_number_;
464 } test(retransmit_ssrc, retransmit_payload_type); 466 } test(retransmit_ssrc, retransmit_payload_type);
465 467
466 RunBaseTest(&test); 468 RunBaseTest(&test, FakeNetworkPipe::Config());
467 } 469 }
468 470
469 TEST_F(VideoSendStreamTest, RetransmitsNack) { 471 TEST_F(VideoSendStreamTest, RetransmitsNack) {
470 // Normal NACKs should use the send SSRC. 472 // Normal NACKs should use the send SSRC.
471 TestNackRetransmission(kSendSsrcs[0], kFakeSendPayloadType); 473 TestNackRetransmission(kSendSsrcs[0], kFakeSendPayloadType);
472 } 474 }
473 475
474 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) { 476 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) {
475 // NACKs over RTX should use a separate SSRC. 477 // NACKs over RTX should use a separate SSRC.
476 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType); 478 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType);
(...skipping 12 matching lines...) Expand all
489 // arrive for each frame size, from start_size to stop_size. 491 // arrive for each frame size, from start_size to stop_size.
490 class FrameFragmentationTest : public test::SendTest, 492 class FrameFragmentationTest : public test::SendTest,
491 public EncodedFrameObserver { 493 public EncodedFrameObserver {
492 public: 494 public:
493 FrameFragmentationTest(size_t max_packet_size, 495 FrameFragmentationTest(size_t max_packet_size,
494 size_t start_size, 496 size_t start_size,
495 size_t stop_size, 497 size_t stop_size,
496 bool test_generic_packetization, 498 bool test_generic_packetization,
497 bool use_fec) 499 bool use_fec)
498 : SendTest(kLongTimeoutMs), 500 : SendTest(kLongTimeoutMs),
499 transport_adapter_(SendTransport()),
500 encoder_(stop), 501 encoder_(stop),
501 max_packet_size_(max_packet_size), 502 max_packet_size_(max_packet_size),
502 stop_size_(stop_size), 503 stop_size_(stop_size),
503 test_generic_packetization_(test_generic_packetization), 504 test_generic_packetization_(test_generic_packetization),
504 use_fec_(use_fec), 505 use_fec_(use_fec),
505 packet_count_(0), 506 packet_count_(0),
506 accumulated_size_(0), 507 accumulated_size_(0),
507 accumulated_payload_(0), 508 accumulated_payload_(0),
508 fec_packet_received_(false), 509 fec_packet_received_(false),
509 current_size_rtp_(start_size), 510 current_size_rtp_(start_size),
510 current_size_frame_(static_cast<int32_t>(start_size)) { 511 current_size_frame_(static_cast<int32_t>(start_size)) {
511 // Fragmentation required, this test doesn't make sense without it. 512 // Fragmentation required, this test doesn't make sense without it.
512 encoder_.SetFrameSize(start_size); 513 encoder_.SetFrameSize(start_size);
513 RTC_DCHECK_GT(stop_size, max_packet_size); 514 RTC_DCHECK_GT(stop_size, max_packet_size);
514 transport_adapter_.Enable();
515 } 515 }
516 516
517 private: 517 private:
518 Action OnSendRtp(const uint8_t* packet, size_t size) override { 518 Action OnSendRtp(const uint8_t* packet, size_t size) override {
519 size_t length = size; 519 size_t length = size;
520 RTPHeader header; 520 RTPHeader header;
521 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 521 EXPECT_TRUE(parser_->Parse(packet, length, &header));
522 522
523 EXPECT_LE(length, max_packet_size_); 523 EXPECT_LE(length, max_packet_size_);
524 524
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 } 591 }
592 592
593 void TriggerLossReport(const RTPHeader& header) { 593 void TriggerLossReport(const RTPHeader& header) {
594 // Send lossy receive reports to trigger FEC enabling. 594 // Send lossy receive reports to trigger FEC enabling.
595 if (packet_count_++ % 2 != 0) { 595 if (packet_count_++ % 2 != 0) {
596 // Receive statistics reporting having lost 50% of the packets. 596 // Receive statistics reporting having lost 50% of the packets.
597 FakeReceiveStatistics lossy_receive_stats( 597 FakeReceiveStatistics lossy_receive_stats(
598 kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127); 598 kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127);
599 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), 599 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(),
600 &lossy_receive_stats, nullptr, 600 &lossy_receive_stats, nullptr,
601 &transport_adapter_); 601 transport_adapter_.get());
602 602
603 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 603 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
604 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 604 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
605 605
606 RTCPSender::FeedbackState feedback_state; 606 RTCPSender::FeedbackState feedback_state;
607 607
608 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 608 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
609 } 609 }
610 } 610 }
611 611
(...skipping 10 matching lines...) Expand all
622 Call::Config GetSenderCallConfig() override { 622 Call::Config GetSenderCallConfig() override {
623 Call::Config config; 623 Call::Config config;
624 const int kMinBitrateBps = 30000; 624 const int kMinBitrateBps = 30000;
625 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; 625 config.bitrate_config.min_bitrate_bps = kMinBitrateBps;
626 return config; 626 return config;
627 } 627 }
628 628
629 void ModifyConfigs(VideoSendStream::Config* send_config, 629 void ModifyConfigs(VideoSendStream::Config* send_config,
630 std::vector<VideoReceiveStream::Config>* receive_configs, 630 std::vector<VideoReceiveStream::Config>* receive_configs,
631 VideoEncoderConfig* encoder_config) override { 631 VideoEncoderConfig* encoder_config) override {
632 transport_adapter_.reset(
633 new internal::TransportAdapter(send_config->send_transport));
634 transport_adapter_->Enable();
632 if (use_fec_) { 635 if (use_fec_) {
633 send_config->rtp.fec.red_payload_type = kRedPayloadType; 636 send_config->rtp.fec.red_payload_type = kRedPayloadType;
634 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 637 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
635 } 638 }
636 639
637 if (!test_generic_packetization_) 640 if (!test_generic_packetization_)
638 send_config->encoder_settings.payload_name = "VP8"; 641 send_config->encoder_settings.payload_name = "VP8";
639 642
640 send_config->encoder_settings.encoder = &encoder_; 643 send_config->encoder_settings.encoder = &encoder_;
641 send_config->rtp.max_packet_size = kMaxPacketSize; 644 send_config->rtp.max_packet_size = kMaxPacketSize;
642 send_config->post_encode_callback = this; 645 send_config->post_encode_callback = this;
643 646
644 // Make sure there is at least one extension header, to make the RTP 647 // Make sure there is at least one extension header, to make the RTP
645 // header larger than the base length of 12 bytes. 648 // header larger than the base length of 12 bytes.
646 EXPECT_FALSE(send_config->rtp.extensions.empty()); 649 EXPECT_FALSE(send_config->rtp.extensions.empty());
647 } 650 }
648 651
649 void PerformTest() override { 652 void PerformTest() override {
650 EXPECT_EQ(kEventSignaled, Wait()) 653 EXPECT_EQ(kEventSignaled, Wait())
651 << "Timed out while observing incoming RTP packets."; 654 << "Timed out while observing incoming RTP packets.";
652 } 655 }
653 656
654 internal::TransportAdapter transport_adapter_; 657 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
655 test::ConfigurableFrameSizeEncoder encoder_; 658 test::ConfigurableFrameSizeEncoder encoder_;
656 659
657 const size_t max_packet_size_; 660 const size_t max_packet_size_;
658 const size_t stop_size_; 661 const size_t stop_size_;
659 const bool test_generic_packetization_; 662 const bool test_generic_packetization_;
660 const bool use_fec_; 663 const bool use_fec_;
661 664
662 uint32_t packet_count_; 665 uint32_t packet_count_;
663 size_t accumulated_size_; 666 size_t accumulated_size_;
664 size_t accumulated_payload_; 667 size_t accumulated_payload_;
665 bool fec_packet_received_; 668 bool fec_packet_received_;
666 669
667 size_t current_size_rtp_; 670 size_t current_size_rtp_;
668 Atomic32 current_size_frame_; 671 Atomic32 current_size_frame_;
669 }; 672 };
670 673
671 // Don't auto increment if FEC is used; continue sending frame size until 674 // Don't auto increment if FEC is used; continue sending frame size until
672 // a FEC packet has been received. 675 // a FEC packet has been received.
673 FrameFragmentationTest test( 676 FrameFragmentationTest test(
674 kMaxPacketSize, start, stop, format == kGeneric, with_fec); 677 kMaxPacketSize, start, stop, format == kGeneric, with_fec);
675 678
676 RunBaseTest(&test); 679 RunBaseTest(&test, FakeNetworkPipe::Config());
677 } 680 }
678 681
679 // TODO(sprang): Is there any way of speeding up these tests? 682 // TODO(sprang): Is there any way of speeding up these tests?
680 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSize) { 683 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSize) {
681 TestPacketFragmentationSize(kGeneric, false); 684 TestPacketFragmentationSize(kGeneric, false);
682 } 685 }
683 686
684 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSizeWithFec) { 687 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSizeWithFec) {
685 TestPacketFragmentationSize(kGeneric, true); 688 TestPacketFragmentationSize(kGeneric, true);
686 } 689 }
(...skipping 15 matching lines...) Expand all
702 // 4. Signal a high REMB and then wait for the RTP stream to start again. 705 // 4. Signal a high REMB and then wait for the RTP stream to start again.
703 // When the stream is detected again, and the stats show that the stream 706 // When the stream is detected again, and the stats show that the stream
704 // is no longer suspended, the test ends. 707 // is no longer suspended, the test ends.
705 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { 708 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) {
706 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps. 709 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps.
707 710
708 class RembObserver : public test::SendTest, public I420FrameCallback { 711 class RembObserver : public test::SendTest, public I420FrameCallback {
709 public: 712 public:
710 RembObserver() 713 RembObserver()
711 : SendTest(kDefaultTimeoutMs), 714 : SendTest(kDefaultTimeoutMs),
712 transport_adapter_(&transport_),
713 clock_(Clock::GetRealTimeClock()), 715 clock_(Clock::GetRealTimeClock()),
714 test_state_(kBeforeSuspend), 716 test_state_(kBeforeSuspend),
715 rtp_count_(0), 717 rtp_count_(0),
716 last_sequence_number_(0), 718 last_sequence_number_(0),
717 suspended_frame_count_(0), 719 suspended_frame_count_(0),
718 low_remb_bps_(0), 720 low_remb_bps_(0),
719 high_remb_bps_(0) { 721 high_remb_bps_(0) {
720 transport_adapter_.Enable();
721 } 722 }
722 723
723 private: 724 private:
724 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
725 // Receive statistics reporting having lost 0% of the packets.
726 // This is needed for the send-side bitrate controller to work properly.
727 rtc::CritScope lock(&crit_);
728 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
729 return SEND_PACKET;
730 }
731
732 Action OnSendRtp(const uint8_t* packet, size_t length) override { 725 Action OnSendRtp(const uint8_t* packet, size_t length) override {
733 rtc::CritScope lock(&crit_); 726 rtc::CritScope lock(&crit_);
734 ++rtp_count_; 727 ++rtp_count_;
735 RTPHeader header; 728 RTPHeader header;
736 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 729 EXPECT_TRUE(parser_->Parse(packet, length, &header));
737 last_sequence_number_ = header.sequenceNumber; 730 last_sequence_number_ = header.sequenceNumber;
738 731
739 if (test_state_ == kBeforeSuspend) { 732 if (test_state_ == kBeforeSuspend) {
740 // The stream has started. Try to suspend it. 733 // The stream has started. Try to suspend it.
741 SendRtcpFeedback(low_remb_bps_); 734 SendRtcpFeedback(low_remb_bps_);
742 test_state_ = kDuringSuspend; 735 test_state_ = kDuringSuspend;
743 } else if (test_state_ == kDuringSuspend) { 736 } else if (test_state_ == kDuringSuspend) {
744 if (header.paddingLength == 0) { 737 if (header.paddingLength == 0) {
745 // Received non-padding packet during suspension period. Reset the 738 // Received non-padding packet during suspension period. Reset the
746 // counter. 739 // counter.
747 suspended_frame_count_ = 0; 740 suspended_frame_count_ = 0;
748 } 741 }
742 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
749 } else if (test_state_ == kWaitingForPacket) { 743 } else if (test_state_ == kWaitingForPacket) {
750 if (header.paddingLength == 0) { 744 if (header.paddingLength == 0) {
751 // Non-padding packet observed. Test is almost complete. Will just 745 // Non-padding packet observed. Test is almost complete. Will just
752 // have to wait for the stats to change. 746 // have to wait for the stats to change.
753 test_state_ = kWaitingForStats; 747 test_state_ = kWaitingForStats;
754 } 748 }
749 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
755 } else if (test_state_ == kWaitingForStats) { 750 } else if (test_state_ == kWaitingForStats) {
756 VideoSendStream::Stats stats = stream_->GetStats(); 751 VideoSendStream::Stats stats = stream_->GetStats();
757 if (stats.suspended == false) { 752 if (stats.suspended == false) {
758 // Stats flipped to false. Test is complete. 753 // Stats flipped to false. Test is complete.
759 observation_complete_->Set(); 754 observation_complete_->Set();
760 } 755 }
756 SendRtcpFeedback(0); // REMB is only sent if value is > 0.
761 } 757 }
762 758
763 return SEND_PACKET; 759 return SEND_PACKET;
764 } 760 }
765 761
766 // This method implements the I420FrameCallback. 762 // This method implements the I420FrameCallback.
767 void FrameCallback(VideoFrame* video_frame) override { 763 void FrameCallback(VideoFrame* video_frame) override {
768 rtc::CritScope lock(&crit_); 764 rtc::CritScope lock(&crit_);
769 if (test_state_ == kDuringSuspend && 765 if (test_state_ == kDuringSuspend &&
770 ++suspended_frame_count_ > kSuspendTimeFrames) { 766 ++suspended_frame_count_ > kSuspendTimeFrames) {
771 VideoSendStream::Stats stats = stream_->GetStats(); 767 VideoSendStream::Stats stats = stream_->GetStats();
772 EXPECT_TRUE(stats.suspended); 768 EXPECT_TRUE(stats.suspended);
773 SendRtcpFeedback(high_remb_bps_); 769 SendRtcpFeedback(high_remb_bps_);
774 test_state_ = kWaitingForPacket; 770 test_state_ = kWaitingForPacket;
775 } 771 }
776 } 772 }
777 773
778 void set_low_remb_bps(int value) { 774 void set_low_remb_bps(int value) {
779 rtc::CritScope lock(&crit_); 775 rtc::CritScope lock(&crit_);
780 low_remb_bps_ = value; 776 low_remb_bps_ = value;
781 } 777 }
782 778
783 void set_high_remb_bps(int value) { 779 void set_high_remb_bps(int value) {
784 rtc::CritScope lock(&crit_); 780 rtc::CritScope lock(&crit_);
785 high_remb_bps_ = value; 781 high_remb_bps_ = value;
786 } 782 }
787 783
788 void SetReceivers(PacketReceiver* send_transport_receiver,
789 PacketReceiver* receive_transport_receiver) override {
790 transport_.SetReceiver(send_transport_receiver);
791 }
792
793 void OnStreamsCreated( 784 void OnStreamsCreated(
794 VideoSendStream* send_stream, 785 VideoSendStream* send_stream,
795 const std::vector<VideoReceiveStream*>& receive_streams) override { 786 const std::vector<VideoReceiveStream*>& receive_streams) override {
796 stream_ = send_stream; 787 stream_ = send_stream;
797 } 788 }
798 789
799 void ModifyConfigs(VideoSendStream::Config* send_config, 790 void ModifyConfigs(VideoSendStream::Config* send_config,
800 std::vector<VideoReceiveStream::Config>* receive_configs, 791 std::vector<VideoReceiveStream::Config>* receive_configs,
801 VideoEncoderConfig* encoder_config) override { 792 VideoEncoderConfig* encoder_config) override {
793 transport_adapter_.reset(
794 new internal::TransportAdapter(send_config->send_transport));
795 transport_adapter_->Enable();
802 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 796 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
803 send_config->pre_encode_callback = this; 797 send_config->pre_encode_callback = this;
804 send_config->suspend_below_min_bitrate = true; 798 send_config->suspend_below_min_bitrate = true;
805 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; 799 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps;
806 set_low_remb_bps(min_bitrate_bps - 10000); 800 set_low_remb_bps(min_bitrate_bps - 10000);
807 int threshold_window = std::max(min_bitrate_bps / 10, 10000); 801 int threshold_window = std::max(min_bitrate_bps / 10, 10000);
808 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, 802 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps,
809 min_bitrate_bps + threshold_window + 5000); 803 min_bitrate_bps + threshold_window + 5000);
810 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); 804 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000);
811 } 805 }
812 806
813 void PerformTest() override { 807 void PerformTest() override {
814 EXPECT_EQ(kEventSignaled, Wait()) 808 EXPECT_EQ(kEventSignaled, Wait())
815 << "Timed out during suspend-below-min-bitrate test."; 809 << "Timed out during suspend-below-min-bitrate test.";
816 transport_.StopSending();
817 } 810 }
818 811
819 enum TestState { 812 enum TestState {
820 kBeforeSuspend, 813 kBeforeSuspend,
821 kDuringSuspend, 814 kDuringSuspend,
822 kWaitingForPacket, 815 kWaitingForPacket,
823 kWaitingForStats 816 kWaitingForStats
824 }; 817 };
825 818
826 virtual void SendRtcpFeedback(int remb_value) 819 virtual void SendRtcpFeedback(int remb_value)
827 EXCLUSIVE_LOCKS_REQUIRED(crit_) { 820 EXCLUSIVE_LOCKS_REQUIRED(crit_) {
828 FakeReceiveStatistics receive_stats( 821 FakeReceiveStatistics receive_stats(
829 kSendSsrcs[0], last_sequence_number_, rtp_count_, 0); 822 kSendSsrcs[0], last_sequence_number_, rtp_count_, 0);
830 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, 823 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr,
831 &transport_adapter_); 824 transport_adapter_.get());
832 825
833 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 826 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
834 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 827 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
835 if (remb_value > 0) { 828 if (remb_value > 0) {
836 rtcp_sender.SetREMBStatus(true); 829 rtcp_sender.SetREMBStatus(true);
837 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>()); 830 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>());
838 } 831 }
839 RTCPSender::FeedbackState feedback_state; 832 RTCPSender::FeedbackState feedback_state;
840 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 833 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
841 } 834 }
842 835
843 internal::TransportAdapter transport_adapter_; 836 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
844 test::DirectTransport transport_;
845 Clock* const clock_; 837 Clock* const clock_;
846 VideoSendStream* stream_; 838 VideoSendStream* stream_;
847 839
848 rtc::CriticalSection crit_; 840 rtc::CriticalSection crit_;
849 TestState test_state_ GUARDED_BY(crit_); 841 TestState test_state_ GUARDED_BY(crit_);
850 int rtp_count_ GUARDED_BY(crit_); 842 int rtp_count_ GUARDED_BY(crit_);
851 int last_sequence_number_ GUARDED_BY(crit_); 843 int last_sequence_number_ GUARDED_BY(crit_);
852 int suspended_frame_count_ GUARDED_BY(crit_); 844 int suspended_frame_count_ GUARDED_BY(crit_);
853 int low_remb_bps_ GUARDED_BY(crit_); 845 int low_remb_bps_ GUARDED_BY(crit_);
854 int high_remb_bps_ GUARDED_BY(crit_); 846 int high_remb_bps_ GUARDED_BY(crit_);
855 } test; 847 } test;
856 848
857 RunBaseTest(&test); 849 RunBaseTest(&test, FakeNetworkPipe::Config());
858 } 850 }
859 851
860 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { 852 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) {
861 class NoPaddingWhenVideoIsMuted : public test::SendTest { 853 class NoPaddingWhenVideoIsMuted : public test::SendTest {
862 public: 854 public:
863 NoPaddingWhenVideoIsMuted() 855 NoPaddingWhenVideoIsMuted()
864 : SendTest(kDefaultTimeoutMs), 856 : SendTest(kDefaultTimeoutMs),
865 clock_(Clock::GetRealTimeClock()), 857 clock_(Clock::GetRealTimeClock()),
866 transport_adapter_(ReceiveTransport()),
867 last_packet_time_ms_(-1), 858 last_packet_time_ms_(-1),
868 capturer_(nullptr) { 859 capturer_(nullptr) {
869 transport_adapter_.Enable();
870 } 860 }
871 861
872 private: 862 private:
873 Action OnSendRtp(const uint8_t* packet, size_t length) override { 863 Action OnSendRtp(const uint8_t* packet, size_t length) override {
874 rtc::CritScope lock(&crit_); 864 rtc::CritScope lock(&crit_);
875 last_packet_time_ms_ = clock_->TimeInMilliseconds(); 865 last_packet_time_ms_ = clock_->TimeInMilliseconds();
876 capturer_->Stop(); 866 capturer_->Stop();
877 return SEND_PACKET; 867 return SEND_PACKET;
878 } 868 }
879 869
880 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 870 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
881 rtc::CritScope lock(&crit_); 871 rtc::CritScope lock(&crit_);
882 const int kVideoMutedThresholdMs = 10000; 872 const int kVideoMutedThresholdMs = 10000;
883 if (last_packet_time_ms_ > 0 && 873 if (last_packet_time_ms_ > 0 &&
884 clock_->TimeInMilliseconds() - last_packet_time_ms_ > 874 clock_->TimeInMilliseconds() - last_packet_time_ms_ >
885 kVideoMutedThresholdMs) 875 kVideoMutedThresholdMs)
886 observation_complete_->Set(); 876 observation_complete_->Set();
887 // Receive statistics reporting having lost 50% of the packets. 877 // Receive statistics reporting having lost 50% of the packets.
888 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); 878 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0);
889 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, 879 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats,
890 nullptr, &transport_adapter_); 880 nullptr, transport_adapter_.get());
891 881
892 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 882 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
893 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 883 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]);
894 884
895 RTCPSender::FeedbackState feedback_state; 885 RTCPSender::FeedbackState feedback_state;
896 886
897 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 887 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
898 return SEND_PACKET; 888 return SEND_PACKET;
899 } 889 }
900 890
901 void SetReceivers(PacketReceiver* send_transport_receiver, 891 void OnTransportsCreated(
902 PacketReceiver* receive_transport_receiver) override { 892 test::PacketTransport* send_transport,
903 RtpRtcpObserver::SetReceivers(send_transport_receiver, 893 test::PacketTransport* receive_transport) override {
904 send_transport_receiver); 894 transport_adapter_.reset(
895 new internal::TransportAdapter(receive_transport));
896 transport_adapter_->Enable();
905 } 897 }
906 898
907 size_t GetNumStreams() const override { return 3; } 899 size_t GetNumStreams() const override { return 3; }
908 900
909 virtual void OnFrameGeneratorCapturerCreated( 901 virtual void OnFrameGeneratorCapturerCreated(
910 test::FrameGeneratorCapturer* frame_generator_capturer) { 902 test::FrameGeneratorCapturer* frame_generator_capturer) {
911 rtc::CritScope lock(&crit_); 903 rtc::CritScope lock(&crit_);
912 capturer_ = frame_generator_capturer; 904 capturer_ = frame_generator_capturer;
913 } 905 }
914 906
915 void PerformTest() override { 907 void PerformTest() override {
916 EXPECT_EQ(kEventSignaled, Wait()) 908 EXPECT_EQ(kEventSignaled, Wait())
917 << "Timed out while waiting for RTP packets to stop being sent."; 909 << "Timed out while waiting for RTP packets to stop being sent.";
918 } 910 }
919 911
920 Clock* const clock_; 912 Clock* const clock_;
921 internal::TransportAdapter transport_adapter_; 913 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
922 rtc::CriticalSection crit_; 914 rtc::CriticalSection crit_;
923 int64_t last_packet_time_ms_ GUARDED_BY(crit_); 915 int64_t last_packet_time_ms_ GUARDED_BY(crit_);
924 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); 916 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_);
925 } test; 917 } test;
926 918
927 RunBaseTest(&test); 919 RunBaseTest(&test, FakeNetworkPipe::Config());
928 } 920 }
929 921
930 // This test first observes "high" bitrate use at which point it sends a REMB to 922 // This test first observes "high" bitrate use at which point it sends a REMB to
931 // indicate that it should be lowered significantly. The test then observes that 923 // indicate that it should be lowered significantly. The test then observes that
932 // the bitrate observed is sinking well below the min-transmit-bitrate threshold 924 // the bitrate observed is sinking well below the min-transmit-bitrate threshold
933 // to verify that the min-transmit bitrate respects incoming REMB. 925 // to verify that the min-transmit bitrate respects incoming REMB.
934 // 926 //
935 // Note that the test starts at "high" bitrate and does not ramp up to "higher" 927 // Note that the test starts at "high" bitrate and does not ramp up to "higher"
936 // bitrate since no receiver block or remb is sent in the initial phase. 928 // bitrate since no receiver block or remb is sent in the initial phase.
937 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { 929 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) {
938 static const int kMinTransmitBitrateBps = 400000; 930 static const int kMinTransmitBitrateBps = 400000;
939 static const int kHighBitrateBps = 150000; 931 static const int kHighBitrateBps = 150000;
940 static const int kRembBitrateBps = 80000; 932 static const int kRembBitrateBps = 80000;
941 static const int kRembRespectedBitrateBps = 100000; 933 static const int kRembRespectedBitrateBps = 100000;
942 class BitrateObserver : public test::SendTest, public PacketReceiver { 934 class BitrateObserver : public test::SendTest {
943 public: 935 public:
944 BitrateObserver() 936 BitrateObserver()
945 : SendTest(kDefaultTimeoutMs), 937 : SendTest(kDefaultTimeoutMs),
946 feedback_transport_(ReceiveTransport()),
947 bitrate_capped_(false) { 938 bitrate_capped_(false) {
948 RtpRtcp::Configuration config;
949 feedback_transport_.Enable();
950 config.outgoing_transport = &feedback_transport_;
951 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config));
952 rtp_rtcp_->SetREMBStatus(true);
953 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
954 }
955
956 void OnStreamsCreated(
957 VideoSendStream* send_stream,
958 const std::vector<VideoReceiveStream*>& receive_streams) override {
959 stream_ = send_stream;
960 } 939 }
961 940
962 private: 941 private:
963 DeliveryStatus DeliverPacket(MediaType media_type, 942 virtual Action OnSendRtp(const uint8_t* packet, size_t length) {
964 const uint8_t* packet,
965 size_t length,
966 const PacketTime& packet_time) override {
967 EXPECT_TRUE(media_type == MediaType::ANY ||
968 media_type == MediaType::VIDEO);
969 if (RtpHeaderParser::IsRtcp(packet, length)) 943 if (RtpHeaderParser::IsRtcp(packet, length))
970 return DELIVERY_OK; 944 return DROP_PACKET;
971 945
972 RTPHeader header; 946 RTPHeader header;
973 if (!parser_->Parse(packet, length, &header)) 947 if (!parser_->Parse(packet, length, &header))
974 return DELIVERY_PACKET_ERROR; 948 return DROP_PACKET;
975 RTC_DCHECK(stream_ != nullptr); 949 RTC_DCHECK(stream_ != nullptr);
976 VideoSendStream::Stats stats = stream_->GetStats(); 950 VideoSendStream::Stats stats = stream_->GetStats();
977 if (!stats.substreams.empty()) { 951 if (!stats.substreams.empty()) {
978 EXPECT_EQ(1u, stats.substreams.size()); 952 EXPECT_EQ(1u, stats.substreams.size());
979 int total_bitrate_bps = 953 int total_bitrate_bps =
980 stats.substreams.begin()->second.total_bitrate_bps; 954 stats.substreams.begin()->second.total_bitrate_bps;
981 test::PrintResult("bitrate_stats_", 955 test::PrintResult("bitrate_stats_",
982 "min_transmit_bitrate_low_remb", 956 "min_transmit_bitrate_low_remb",
983 "bitrate_bps", 957 "bitrate_bps",
984 static_cast<size_t>(total_bitrate_bps), 958 static_cast<size_t>(total_bitrate_bps),
985 "bps", 959 "bps",
986 false); 960 false);
987 if (total_bitrate_bps > kHighBitrateBps) { 961 if (total_bitrate_bps > kHighBitrateBps) {
988 rtp_rtcp_->SetREMBData(kRembBitrateBps, 962 rtp_rtcp_->SetREMBData(kRembBitrateBps,
989 std::vector<uint32_t>(1, header.ssrc)); 963 std::vector<uint32_t>(1, header.ssrc));
990 rtp_rtcp_->Process(); 964 rtp_rtcp_->Process();
991 bitrate_capped_ = true; 965 bitrate_capped_ = true;
992 } else if (bitrate_capped_ && 966 } else if (bitrate_capped_ &&
993 total_bitrate_bps < kRembRespectedBitrateBps) { 967 total_bitrate_bps < kRembRespectedBitrateBps) {
994 observation_complete_->Set(); 968 observation_complete_->Set();
995 } 969 }
996 } 970 }
997 return DELIVERY_OK; 971 // Packets don't have to be delivered since the test is the receiver.
972 return DROP_PACKET;
998 } 973 }
999 974
1000 void SetReceivers(PacketReceiver* send_transport_receiver, 975 void OnStreamsCreated(
1001 PacketReceiver* receive_transport_receiver) override { 976 VideoSendStream* send_stream,
1002 RtpRtcpObserver::SetReceivers(this, send_transport_receiver); 977 const std::vector<VideoReceiveStream*>& receive_streams) override {
978 stream_ = send_stream;
979 RtpRtcp::Configuration config;
980 config.outgoing_transport = feedback_transport_.get();
981 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config));
982 rtp_rtcp_->SetREMBStatus(true);
983 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize);
1003 } 984 }
1004 985
1005 void ModifyConfigs(VideoSendStream::Config* send_config, 986 void ModifyConfigs(VideoSendStream::Config* send_config,
1006 std::vector<VideoReceiveStream::Config>* receive_configs, 987 std::vector<VideoReceiveStream::Config>* receive_configs,
1007 VideoEncoderConfig* encoder_config) override { 988 VideoEncoderConfig* encoder_config) override {
989 feedback_transport_.reset(
990 new internal::TransportAdapter(send_config->send_transport));
991 feedback_transport_->Enable();
1008 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; 992 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
1009 } 993 }
1010 994
1011 void PerformTest() override { 995 void PerformTest() override {
1012 EXPECT_EQ(kEventSignaled, Wait()) 996 EXPECT_EQ(kEventSignaled, Wait())
1013 << "Timeout while waiting for low bitrate stats after REMB."; 997 << "Timeout while waiting for low bitrate stats after REMB.";
1014 } 998 }
1015 999
1016 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; 1000 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_;
1017 internal::TransportAdapter feedback_transport_; 1001 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_;
1018 VideoSendStream* stream_; 1002 VideoSendStream* stream_;
1019 bool bitrate_capped_; 1003 bool bitrate_capped_;
1020 } test; 1004 } test;
1021 1005
1022 RunBaseTest(&test); 1006 RunBaseTest(&test, FakeNetworkPipe::Config());
1023 } 1007 }
1024 1008
1025 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { 1009 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) {
1026 class StartBitrateObserver : public test::FakeEncoder { 1010 class StartBitrateObserver : public test::FakeEncoder {
1027 public: 1011 public:
1028 StartBitrateObserver() 1012 StartBitrateObserver()
1029 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} 1013 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {}
1030 int32_t InitEncode(const VideoCodec* config, 1014 int32_t InitEncode(const VideoCodec* config,
1031 int32_t number_of_cores, 1015 int32_t number_of_cores,
1032 size_t max_payload_size) override { 1016 size_t max_payload_size) override {
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 1306
1323 rtc::CriticalSection crit_; 1307 rtc::CriticalSection crit_;
1324 VideoSendStream* stream_; 1308 VideoSendStream* stream_;
1325 bool initialized_ GUARDED_BY(crit_); 1309 bool initialized_ GUARDED_BY(crit_);
1326 bool callback_registered_ GUARDED_BY(crit_); 1310 bool callback_registered_ GUARDED_BY(crit_);
1327 size_t num_releases_ GUARDED_BY(crit_); 1311 size_t num_releases_ GUARDED_BY(crit_);
1328 bool released_ GUARDED_BY(crit_); 1312 bool released_ GUARDED_BY(crit_);
1329 VideoEncoderConfig encoder_config_; 1313 VideoEncoderConfig encoder_config_;
1330 } test_encoder; 1314 } test_encoder;
1331 1315
1332 RunBaseTest(&test_encoder); 1316 RunBaseTest(&test_encoder, FakeNetworkPipe::Config());
1333 1317
1334 EXPECT_TRUE(test_encoder.IsReleased()); 1318 EXPECT_TRUE(test_encoder.IsReleased());
1335 EXPECT_EQ(1u, test_encoder.num_releases()); 1319 EXPECT_EQ(1u, test_encoder.num_releases());
1336 } 1320 }
1337 1321
1338 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { 1322 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) {
1339 class VideoCodecConfigObserver : public test::SendTest, 1323 class VideoCodecConfigObserver : public test::SendTest,
1340 public test::FakeEncoder { 1324 public test::FakeEncoder {
1341 public: 1325 public:
1342 VideoCodecConfigObserver() 1326 VideoCodecConfigObserver()
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 EXPECT_EQ(2u, num_initializations_) 1364 EXPECT_EQ(2u, num_initializations_)
1381 << "ReconfigureVideoEncoder did not reinitialize the encoder with " 1365 << "ReconfigureVideoEncoder did not reinitialize the encoder with "
1382 "new encoder settings."; 1366 "new encoder settings.";
1383 } 1367 }
1384 1368
1385 size_t num_initializations_; 1369 size_t num_initializations_;
1386 VideoSendStream* stream_; 1370 VideoSendStream* stream_;
1387 VideoEncoderConfig encoder_config_; 1371 VideoEncoderConfig encoder_config_;
1388 } test; 1372 } test;
1389 1373
1390 RunBaseTest(&test); 1374 RunBaseTest(&test, FakeNetworkPipe::Config());
1391 } 1375 }
1392 1376
1393 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; 1377 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4;
1394 template <typename T> 1378 template <typename T>
1395 class VideoCodecConfigObserver : public test::SendTest, 1379 class VideoCodecConfigObserver : public test::SendTest,
1396 public test::FakeEncoder { 1380 public test::FakeEncoder {
1397 1381
1398 public: 1382 public:
1399 VideoCodecConfigObserver(VideoCodecType video_codec_type, 1383 VideoCodecConfigObserver(VideoCodecType video_codec_type,
1400 const char* codec_name) 1384 const char* codec_name)
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 // reconfiguring the encoder and not match the set config. 1492 // reconfiguring the encoder and not match the set config.
1509 VideoCodecVP9 encoder_settings = encoder_settings_; 1493 VideoCodecVP9 encoder_settings = encoder_settings_;
1510 encoder_settings.numberOfTemporalLayers = 1494 encoder_settings.numberOfTemporalLayers =
1511 kVideoCodecConfigObserverNumberOfTemporalLayers; 1495 kVideoCodecConfigObserverNumberOfTemporalLayers;
1512 EXPECT_EQ(0, memcmp(&config.codecSpecific.VP9, &encoder_settings, 1496 EXPECT_EQ(0, memcmp(&config.codecSpecific.VP9, &encoder_settings,
1513 sizeof(encoder_settings_))); 1497 sizeof(encoder_settings_)));
1514 } 1498 }
1515 1499
1516 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { 1500 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) {
1517 VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8"); 1501 VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8");
1518 RunBaseTest(&test); 1502 RunBaseTest(&test, FakeNetworkPipe::Config());
1519 } 1503 }
1520 1504
1521 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) { 1505 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) {
1522 VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9"); 1506 VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9");
1523 RunBaseTest(&test); 1507 RunBaseTest(&test, FakeNetworkPipe::Config());
1524 } 1508 }
1525 1509
1526 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesH264Config) { 1510 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesH264Config) {
1527 VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264"); 1511 VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264");
1528 RunBaseTest(&test); 1512 RunBaseTest(&test, FakeNetworkPipe::Config());
1529 } 1513 }
1530 1514
1531 TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) { 1515 TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) {
1532 class RtcpSenderReportTest : public test::SendTest { 1516 class RtcpSenderReportTest : public test::SendTest {
1533 public: 1517 public:
1534 RtcpSenderReportTest() : SendTest(kDefaultTimeoutMs), 1518 RtcpSenderReportTest() : SendTest(kDefaultTimeoutMs),
1535 rtp_packets_sent_(0), 1519 rtp_packets_sent_(0),
1536 media_bytes_sent_(0) {} 1520 media_bytes_sent_(0) {}
1537 1521
1538 private: 1522 private:
(...skipping 29 matching lines...) Expand all
1568 1552
1569 void PerformTest() override { 1553 void PerformTest() override {
1570 EXPECT_EQ(kEventSignaled, Wait()) 1554 EXPECT_EQ(kEventSignaled, Wait())
1571 << "Timed out while waiting for RTCP sender report."; 1555 << "Timed out while waiting for RTCP sender report.";
1572 } 1556 }
1573 1557
1574 size_t rtp_packets_sent_; 1558 size_t rtp_packets_sent_;
1575 size_t media_bytes_sent_; 1559 size_t media_bytes_sent_;
1576 } test; 1560 } test;
1577 1561
1578 RunBaseTest(&test); 1562 RunBaseTest(&test, FakeNetworkPipe::Config());
1579 } 1563 }
1580 1564
1581 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { 1565 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) {
1582 static const int kScreencastTargetBitrateKbps = 200; 1566 static const int kScreencastTargetBitrateKbps = 200;
1583 class ScreencastTargetBitrateTest : public test::SendTest, 1567 class ScreencastTargetBitrateTest : public test::SendTest,
1584 public test::FakeEncoder { 1568 public test::FakeEncoder {
1585 public: 1569 public:
1586 ScreencastTargetBitrateTest() 1570 ScreencastTargetBitrateTest()
1587 : SendTest(kDefaultTimeoutMs), 1571 : SendTest(kDefaultTimeoutMs),
1588 test::FakeEncoder(Clock::GetRealTimeClock()) {} 1572 test::FakeEncoder(Clock::GetRealTimeClock()) {}
(...skipping 19 matching lines...) Expand all
1608 kScreencastTargetBitrateKbps * 1000); 1592 kScreencastTargetBitrateKbps * 1000);
1609 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; 1593 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1610 } 1594 }
1611 1595
1612 void PerformTest() override { 1596 void PerformTest() override {
1613 EXPECT_EQ(kEventSignaled, Wait()) 1597 EXPECT_EQ(kEventSignaled, Wait())
1614 << "Timed out while waiting for the encoder to be initialized."; 1598 << "Timed out while waiting for the encoder to be initialized.";
1615 } 1599 }
1616 } test; 1600 } test;
1617 1601
1618 RunBaseTest(&test); 1602 RunBaseTest(&test, FakeNetworkPipe::Config());
1619 } 1603 }
1620 1604
1621 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { 1605 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) {
1622 // These are chosen to be "kind of odd" to not be accidentally checked against 1606 // These are chosen to be "kind of odd" to not be accidentally checked against
1623 // default values. 1607 // default values.
1624 static const int kMinBitrateKbps = 137; 1608 static const int kMinBitrateKbps = 137;
1625 static const int kStartBitrateKbps = 345; 1609 static const int kStartBitrateKbps = 345;
1626 static const int kLowerMaxBitrateKbps = 312; 1610 static const int kLowerMaxBitrateKbps = 312;
1627 static const int kMaxBitrateKbps = 413; 1611 static const int kMaxBitrateKbps = 413;
1628 static const int kIncreasedStartBitrateKbps = 451; 1612 static const int kIncreasedStartBitrateKbps = 451;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1714 EXPECT_EQ(3, num_initializations_) 1698 EXPECT_EQ(3, num_initializations_)
1715 << "Encoder should have been reconfigured with the new value."; 1699 << "Encoder should have been reconfigured with the new value.";
1716 } 1700 }
1717 1701
1718 int num_initializations_; 1702 int num_initializations_;
1719 webrtc::Call* call_; 1703 webrtc::Call* call_;
1720 webrtc::VideoSendStream* send_stream_; 1704 webrtc::VideoSendStream* send_stream_;
1721 webrtc::VideoEncoderConfig encoder_config_; 1705 webrtc::VideoEncoderConfig encoder_config_;
1722 } test; 1706 } test;
1723 1707
1724 RunBaseTest(&test); 1708 RunBaseTest(&test, FakeNetworkPipe::Config());
1725 } 1709 }
1726 1710
1727 TEST_F(VideoSendStreamTest, ReportsSentResolution) { 1711 TEST_F(VideoSendStreamTest, ReportsSentResolution) {
1728 static const size_t kNumStreams = 3; 1712 static const size_t kNumStreams = 3;
1729 // Unusual resolutions to make sure that they are the ones being reported. 1713 // Unusual resolutions to make sure that they are the ones being reported.
1730 static const struct { 1714 static const struct {
1731 int width; 1715 int width;
1732 int height; 1716 int height;
1733 } kEncodedResolution[kNumStreams] = { 1717 } kEncodedResolution[kNumStreams] = {
1734 {241, 181}, {300, 121}, {121, 221}}; 1718 {241, 181}, {300, 121}, {121, 221}};
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1793 1777
1794 void OnStreamsCreated( 1778 void OnStreamsCreated(
1795 VideoSendStream* send_stream, 1779 VideoSendStream* send_stream,
1796 const std::vector<VideoReceiveStream*>& receive_streams) override { 1780 const std::vector<VideoReceiveStream*>& receive_streams) override {
1797 send_stream_ = send_stream; 1781 send_stream_ = send_stream;
1798 } 1782 }
1799 1783
1800 VideoSendStream* send_stream_; 1784 VideoSendStream* send_stream_;
1801 } test; 1785 } test;
1802 1786
1803 RunBaseTest(&test); 1787 RunBaseTest(&test, FakeNetworkPipe::Config());
1804 } 1788 }
1805 1789
1806 class VP9HeaderObeserver : public test::SendTest { 1790 class VP9HeaderObeserver : public test::SendTest {
1807 public: 1791 public:
1808 VP9HeaderObeserver() 1792 VP9HeaderObeserver()
1809 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), 1793 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs),
1810 vp9_encoder_(VP9Encoder::Create()), 1794 vp9_encoder_(VP9Encoder::Create()),
1811 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {} 1795 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {}
1812 1796
1813 virtual void ModifyConfigsHook( 1797 virtual void ModifyConfigsHook(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1873 }; 1857 };
1874 1858
1875 TEST_F(VideoSendStreamTest, VP9NoFlexMode) { 1859 TEST_F(VideoSendStreamTest, VP9NoFlexMode) {
1876 class NoFlexibleMode : public VP9HeaderObeserver { 1860 class NoFlexibleMode : public VP9HeaderObeserver {
1877 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1861 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1878 EXPECT_FALSE(vp9videoHeader->flexible_mode); 1862 EXPECT_FALSE(vp9videoHeader->flexible_mode);
1879 observation_complete_->Set(); 1863 observation_complete_->Set();
1880 } 1864 }
1881 } test; 1865 } test;
1882 1866
1883 RunBaseTest(&test); 1867 RunBaseTest(&test, FakeNetworkPipe::Config());
1884 } 1868 }
1885 1869
1886 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { 1870 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) {
1887 class FlexibleMode : public VP9HeaderObeserver { 1871 class FlexibleMode : public VP9HeaderObeserver {
1888 void ModifyConfigsHook( 1872 void ModifyConfigsHook(
1889 VideoSendStream::Config* send_config, 1873 VideoSendStream::Config* send_config,
1890 std::vector<VideoReceiveStream::Config>* receive_configs, 1874 std::vector<VideoReceiveStream::Config>* receive_configs,
1891 VideoEncoderConfig* encoder_config) override { 1875 VideoEncoderConfig* encoder_config) override {
1892 vp9_settings_.flexibleMode = true; 1876 vp9_settings_.flexibleMode = true;
1893 } 1877 }
1894 1878
1895 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { 1879 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1896 EXPECT_TRUE(vp9videoHeader->flexible_mode); 1880 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1897 observation_complete_->Set(); 1881 observation_complete_->Set();
1898 } 1882 }
1899 1883
1900 } test; 1884 } test;
1901 1885
1902 RunBaseTest(&test); 1886 RunBaseTest(&test, FakeNetworkPipe::Config());
1903 } 1887 }
1904 1888
1905 } // namespace webrtc 1889 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_quality_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698