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

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

Issue 1542653002: Add audio streams to CallTest and a first A/V call test. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Create audio devices earlier Created 5 years 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
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> 10 #include <algorithm>
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); 80 void TestXrReceiverReferenceTimeReport(bool enable_rrtr);
81 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); 81 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
82 void TestRtpStatePreservation(bool use_rtx); 82 void TestRtpStatePreservation(bool use_rtx);
83 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); 83 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare);
84 }; 84 };
85 85
86 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { 86 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) {
87 CreateCalls(Call::Config(), Call::Config()); 87 CreateCalls(Call::Config(), Call::Config());
88 88
89 test::NullTransport transport; 89 test::NullTransport transport;
90 CreateSendConfig(1, &transport); 90 CreateSendConfig(1, 0, &transport);
91 CreateMatchingReceiveConfigs(&transport); 91 CreateMatchingReceiveConfigs(false, &transport);
92 92
93 CreateStreams(); 93 CreateVideoStreams();
94 94
95 video_receive_streams_[0]->Start(); 95 video_receive_streams_[0]->Start();
96 video_receive_streams_[0]->Start(); 96 video_receive_streams_[0]->Start();
97 97
98 DestroyStreams(); 98 DestroyStreams();
99 } 99 }
100 100
101 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { 101 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) {
102 CreateCalls(Call::Config(), Call::Config()); 102 CreateCalls(Call::Config(), Call::Config());
103 103
104 test::NullTransport transport; 104 test::NullTransport transport;
105 CreateSendConfig(1, &transport); 105 CreateSendConfig(1, 0, &transport);
106 CreateMatchingReceiveConfigs(&transport); 106 CreateMatchingReceiveConfigs(false, &transport);
107 107
108 CreateStreams(); 108 CreateVideoStreams();
109 109
110 video_receive_streams_[0]->Stop(); 110 video_receive_streams_[0]->Stop();
111 video_receive_streams_[0]->Stop(); 111 video_receive_streams_[0]->Stop();
112 112
113 DestroyStreams(); 113 DestroyStreams();
114 } 114 }
115 115
116 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { 116 TEST_F(EndToEndTest, RendersSingleDelayedFrame) {
117 static const int kWidth = 320; 117 static const int kWidth = 320;
118 static const int kHeight = 240; 118 static const int kHeight = 240;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 rtc::Event event_; 152 rtc::Event event_;
153 }; 153 };
154 154
155 CreateCalls(Call::Config(), Call::Config()); 155 CreateCalls(Call::Config(), Call::Config());
156 156
157 test::DirectTransport sender_transport(sender_call_.get()); 157 test::DirectTransport sender_transport(sender_call_.get());
158 test::DirectTransport receiver_transport(receiver_call_.get()); 158 test::DirectTransport receiver_transport(receiver_call_.get());
159 sender_transport.SetReceiver(receiver_call_->Receiver()); 159 sender_transport.SetReceiver(receiver_call_->Receiver());
160 receiver_transport.SetReceiver(sender_call_->Receiver()); 160 receiver_transport.SetReceiver(sender_call_->Receiver());
161 161
162 CreateSendConfig(1, &sender_transport); 162 CreateSendConfig(1, 0, &sender_transport);
163 CreateMatchingReceiveConfigs(&receiver_transport); 163 CreateMatchingReceiveConfigs(false, &receiver_transport);
164 164
165 TestFrameCallback pre_render_callback; 165 TestFrameCallback pre_render_callback;
166 video_receive_configs_[0].pre_render_callback = &pre_render_callback; 166 video_receive_configs_[0].pre_render_callback = &pre_render_callback;
167 video_receive_configs_[0].renderer = &renderer; 167 video_receive_configs_[0].renderer = &renderer;
168 168
169 CreateStreams(); 169 CreateVideoStreams();
170 Start(); 170 Start();
171 171
172 // Create frames that are smaller than the send width/height, this is done to 172 // Create frames that are smaller than the send width/height, this is done to
173 // check that the callbacks are done after processing video. 173 // check that the callbacks are done after processing video.
174 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 174 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
175 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); 175 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight));
176 video_send_stream_->Input()->IncomingCapturedFrame( 176 video_send_stream_->Input()->IncomingCapturedFrame(
177 *frame_generator->NextFrame()); 177 *frame_generator->NextFrame());
178 EXPECT_TRUE(pre_render_callback.Wait()) 178 EXPECT_TRUE(pre_render_callback.Wait())
179 << "Timed out while waiting for pre-render callback."; 179 << "Timed out while waiting for pre-render callback.";
(...skipping 24 matching lines...) Expand all
204 rtc::Event event_; 204 rtc::Event event_;
205 } renderer; 205 } renderer;
206 206
207 CreateCalls(Call::Config(), Call::Config()); 207 CreateCalls(Call::Config(), Call::Config());
208 208
209 test::DirectTransport sender_transport(sender_call_.get()); 209 test::DirectTransport sender_transport(sender_call_.get());
210 test::DirectTransport receiver_transport(receiver_call_.get()); 210 test::DirectTransport receiver_transport(receiver_call_.get());
211 sender_transport.SetReceiver(receiver_call_->Receiver()); 211 sender_transport.SetReceiver(receiver_call_->Receiver());
212 receiver_transport.SetReceiver(sender_call_->Receiver()); 212 receiver_transport.SetReceiver(sender_call_->Receiver());
213 213
214 CreateSendConfig(1, &sender_transport); 214 CreateSendConfig(1, 0, &sender_transport);
215 CreateMatchingReceiveConfigs(&receiver_transport); 215 CreateMatchingReceiveConfigs(false, &receiver_transport);
216 video_receive_configs_[0].renderer = &renderer; 216 video_receive_configs_[0].renderer = &renderer;
217 217
218 CreateStreams(); 218 CreateVideoStreams();
219 Start(); 219 Start();
220 220
221 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 221 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
222 test::FrameGenerator::CreateChromaGenerator( 222 test::FrameGenerator::CreateChromaGenerator(
223 video_encoder_config_.streams[0].width, 223 video_encoder_config_.streams[0].width,
224 video_encoder_config_.streams[0].height)); 224 video_encoder_config_.streams[0].height));
225 video_send_stream_->Input()->IncomingCapturedFrame( 225 video_send_stream_->Input()->IncomingCapturedFrame(
226 *frame_generator->NextFrame()); 226 *frame_generator->NextFrame());
227 227
228 EXPECT_TRUE(renderer.Wait()) 228 EXPECT_TRUE(renderer.Wait())
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 302 }
303 303
304 void ModifyVideoConfigs( 304 void ModifyVideoConfigs(
305 VideoSendStream::Config* send_config, 305 VideoSendStream::Config* send_config,
306 std::vector<VideoReceiveStream::Config>* receive_configs, 306 std::vector<VideoReceiveStream::Config>* receive_configs,
307 VideoEncoderConfig* encoder_config) override { 307 VideoEncoderConfig* encoder_config) override {
308 send_config->rtp.nack.rtp_history_ms = 308 send_config->rtp.nack.rtp_history_ms =
309 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 309 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
310 send_config->encoder_settings.encoder = &fake_encoder_; 310 send_config->encoder_settings.encoder = &fake_encoder_;
311 send_config->encoder_settings.payload_name = "H264"; 311 send_config->encoder_settings.payload_name = "H264";
312 send_config->encoder_settings.payload_type = kFakeSendPayloadType; 312 send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType;
313 encoder_config->streams[0].min_bitrate_bps = 50000; 313 encoder_config->streams[0].min_bitrate_bps = 50000;
314 encoder_config->streams[0].target_bitrate_bps = 314 encoder_config->streams[0].target_bitrate_bps =
315 encoder_config->streams[0].max_bitrate_bps = 2000000; 315 encoder_config->streams[0].max_bitrate_bps = 2000000;
316 316
317 (*receive_configs)[0].renderer = this; 317 (*receive_configs)[0].renderer = this;
318 (*receive_configs)[0].decoders.resize(1); 318 (*receive_configs)[0].decoders.resize(1);
319 (*receive_configs)[0].decoders[0].payload_type = 319 (*receive_configs)[0].decoders[0].payload_type =
320 send_config->encoder_settings.payload_type; 320 send_config->encoder_settings.payload_type;
321 (*receive_configs)[0].decoders[0].payload_name = 321 (*receive_configs)[0].decoders[0].payload_name =
322 send_config->encoder_settings.payload_name; 322 send_config->encoder_settings.payload_name;
(...skipping 24 matching lines...) Expand all
347 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 347 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
348 348
349 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 349 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
350 RTCPUtility::RTCPParserV2 parser(packet, length, true); 350 RTCPUtility::RTCPParserV2 parser(packet, length, true);
351 EXPECT_TRUE(parser.IsValid()); 351 EXPECT_TRUE(parser.IsValid());
352 uint32_t ssrc = 0; 352 uint32_t ssrc = 0;
353 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 353 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
354 ssrc |= static_cast<uint32_t>(packet[5]) << 16; 354 ssrc |= static_cast<uint32_t>(packet[5]) << 16;
355 ssrc |= static_cast<uint32_t>(packet[6]) << 8; 355 ssrc |= static_cast<uint32_t>(packet[6]) << 8;
356 ssrc |= static_cast<uint32_t>(packet[7]) << 0; 356 ssrc |= static_cast<uint32_t>(packet[7]) << 0;
357 EXPECT_EQ(kReceiverLocalSsrc, ssrc); 357 EXPECT_EQ(kReceiverLocalVideoSsrc, ssrc);
358 observation_complete_.Set(); 358 observation_complete_.Set();
359 359
360 return SEND_PACKET; 360 return SEND_PACKET;
361 } 361 }
362 362
363 void PerformTest() override { 363 void PerformTest() override {
364 EXPECT_TRUE(Wait()) 364 EXPECT_TRUE(Wait())
365 << "Timed out while waiting for a receiver RTCP packet to be sent."; 365 << "Timed out while waiting for a receiver RTCP packet to be sent.";
366 } 366 }
367 } test; 367 } test;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 private: 468 private:
469 Action OnSendRtp(const uint8_t* packet, size_t length) override { 469 Action OnSendRtp(const uint8_t* packet, size_t length) override {
470 rtc::CritScope lock(&crit_); 470 rtc::CritScope lock(&crit_);
471 RTPHeader header; 471 RTPHeader header;
472 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 472 EXPECT_TRUE(parser_->Parse(packet, length, &header));
473 473
474 int encapsulated_payload_type = -1; 474 int encapsulated_payload_type = -1;
475 if (header.payloadType == kRedPayloadType) { 475 if (header.payloadType == kRedPayloadType) {
476 encapsulated_payload_type = 476 encapsulated_payload_type =
477 static_cast<int>(packet[header.headerLength]); 477 static_cast<int>(packet[header.headerLength]);
478 if (encapsulated_payload_type != kFakeSendPayloadType) 478 if (encapsulated_payload_type != kFakeVideoSendPayloadType)
479 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type); 479 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
480 } else { 480 } else {
481 EXPECT_EQ(kFakeSendPayloadType, header.payloadType); 481 EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
482 } 482 }
483 483
484 if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) { 484 if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) {
485 // Retransmitted packet, should not count. 485 // Retransmitted packet, should not count.
486 protected_sequence_numbers_.erase(header.sequenceNumber); 486 protected_sequence_numbers_.erase(header.sequenceNumber);
487 EXPECT_GT(protected_timestamps_.count(header.timestamp), 0u); 487 EXPECT_GT(protected_timestamps_.count(header.timestamp), 0u);
488 protected_timestamps_.erase(header.timestamp); 488 protected_timestamps_.erase(header.timestamp);
489 return SEND_PACKET; 489 return SEND_PACKET;
490 } 490 }
491 491
492 switch (state_) { 492 switch (state_) {
493 case kFirstPacket: 493 case kFirstPacket:
494 state_ = kDropEveryOtherPacketUntilFec; 494 state_ = kDropEveryOtherPacketUntilFec;
495 break; 495 break;
496 case kDropEveryOtherPacketUntilFec: 496 case kDropEveryOtherPacketUntilFec:
497 if (encapsulated_payload_type == kUlpfecPayloadType) { 497 if (encapsulated_payload_type == kUlpfecPayloadType) {
498 state_ = kDropNextMediaPacket; 498 state_ = kDropNextMediaPacket;
499 return SEND_PACKET; 499 return SEND_PACKET;
500 } 500 }
501 if (header.sequenceNumber % 2 == 0) 501 if (header.sequenceNumber % 2 == 0)
502 return DROP_PACKET; 502 return DROP_PACKET;
503 break; 503 break;
504 case kDropNextMediaPacket: 504 case kDropNextMediaPacket:
505 if (encapsulated_payload_type == kFakeSendPayloadType) { 505 if (encapsulated_payload_type == kFakeVideoSendPayloadType) {
506 protected_sequence_numbers_.insert(header.sequenceNumber); 506 protected_sequence_numbers_.insert(header.sequenceNumber);
507 protected_timestamps_.insert(header.timestamp); 507 protected_timestamps_.insert(header.timestamp);
508 state_ = kDropEveryOtherPacketUntilFec; 508 state_ = kDropEveryOtherPacketUntilFec;
509 return DROP_PACKET; 509 return DROP_PACKET;
510 } 510 }
511 break; 511 break;
512 } 512 }
513 513
514 return SEND_PACKET; 514 return SEND_PACKET;
515 } 515 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 private: 574 private:
575 Action OnSendRtp(const uint8_t* packet, size_t length) override { 575 Action OnSendRtp(const uint8_t* packet, size_t length) override {
576 rtc::CritScope lock_(&crit_); 576 rtc::CritScope lock_(&crit_);
577 RTPHeader header; 577 RTPHeader header;
578 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 578 EXPECT_TRUE(parser_->Parse(packet, length, &header));
579 579
580 int encapsulated_payload_type = -1; 580 int encapsulated_payload_type = -1;
581 if (header.payloadType == kRedPayloadType) { 581 if (header.payloadType == kRedPayloadType) {
582 encapsulated_payload_type = 582 encapsulated_payload_type =
583 static_cast<int>(packet[header.headerLength]); 583 static_cast<int>(packet[header.headerLength]);
584 if (encapsulated_payload_type != kFakeSendPayloadType) 584 if (encapsulated_payload_type != kFakeVideoSendPayloadType)
585 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type); 585 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
586 } else { 586 } else {
587 EXPECT_EQ(kFakeSendPayloadType, header.payloadType); 587 EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
588 } 588 }
589 589
590 if (has_last_sequence_number_ && 590 if (has_last_sequence_number_ &&
591 !IsNewerSequenceNumber(header.sequenceNumber, 591 !IsNewerSequenceNumber(header.sequenceNumber,
592 last_sequence_number_)) { 592 last_sequence_number_)) {
593 // Drop retransmitted packets. 593 // Drop retransmitted packets.
594 return DROP_PACKET; 594 return DROP_PACKET;
595 } 595 }
596 last_sequence_number_ = header.sequenceNumber; 596 last_sequence_number_ = header.sequenceNumber;
597 has_last_sequence_number_ = true; 597 has_last_sequence_number_ = true;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) { 692 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
693 // Must be set high enough to allow the bitrate probing to finish. 693 // Must be set high enough to allow the bitrate probing to finish.
694 static const int kMinProbePackets = 30; 694 static const int kMinProbePackets = 30;
695 static const int kDroppedFrameNumber = kMinProbePackets + 1; 695 static const int kDroppedFrameNumber = kMinProbePackets + 1;
696 class RetransmissionObserver : public test::EndToEndTest, 696 class RetransmissionObserver : public test::EndToEndTest,
697 public I420FrameCallback { 697 public I420FrameCallback {
698 public: 698 public:
699 explicit RetransmissionObserver(bool use_rtx, bool use_red) 699 explicit RetransmissionObserver(bool use_rtx, bool use_red)
700 : EndToEndTest(kDefaultTimeoutMs), 700 : EndToEndTest(kDefaultTimeoutMs),
701 payload_type_(GetPayloadType(false, use_red)), 701 payload_type_(GetPayloadType(false, use_red)),
702 retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kSendSsrcs[0]), 702 retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kVideoSendSsrcs[0]),
703 retransmission_payload_type_(GetPayloadType(use_rtx, use_red)), 703 retransmission_payload_type_(GetPayloadType(use_rtx, use_red)),
704 marker_bits_observed_(0), 704 marker_bits_observed_(0),
705 num_packets_observed_(0), 705 num_packets_observed_(0),
706 retransmitted_timestamp_(0), 706 retransmitted_timestamp_(0),
707 frame_retransmitted_(false) {} 707 frame_retransmitted_(false) {}
708 708
709 private: 709 private:
710 Action OnSendRtp(const uint8_t* packet, size_t length) override { 710 Action OnSendRtp(const uint8_t* packet, size_t length) override {
711 rtc::CritScope lock(&crit_); 711 rtc::CritScope lock(&crit_);
712 RTPHeader header; 712 RTPHeader header;
713 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 713 EXPECT_TRUE(parser_->Parse(packet, length, &header));
714 714
715 // We accept some padding or RTX packets in the beginning to enable 715 // We accept some padding or RTX packets in the beginning to enable
716 // bitrate probing. 716 // bitrate probing.
717 if (num_packets_observed_++ < kMinProbePackets && 717 if (num_packets_observed_++ < kMinProbePackets &&
718 header.payloadType != payload_type_) { 718 header.payloadType != payload_type_) {
719 EXPECT_TRUE(retransmission_payload_type_ == header.payloadType || 719 EXPECT_TRUE(retransmission_payload_type_ == header.payloadType ||
720 length == header.headerLength + header.paddingLength); 720 length == header.headerLength + header.paddingLength);
721 return SEND_PACKET; 721 return SEND_PACKET;
722 } 722 }
723 if (header.timestamp == retransmitted_timestamp_) { 723 if (header.timestamp == retransmitted_timestamp_) {
724 EXPECT_EQ(retransmission_ssrc_, header.ssrc); 724 EXPECT_EQ(retransmission_ssrc_, header.ssrc);
725 EXPECT_EQ(retransmission_payload_type_, header.payloadType); 725 EXPECT_EQ(retransmission_payload_type_, header.payloadType);
726 frame_retransmitted_ = true; 726 frame_retransmitted_ = true;
727 return SEND_PACKET; 727 return SEND_PACKET;
728 } 728 }
729 729
730 EXPECT_EQ(kSendSsrcs[0], header.ssrc); 730 EXPECT_EQ(kVideoSendSsrcs[0], header.ssrc);
731 EXPECT_EQ(payload_type_, header.payloadType); 731 EXPECT_EQ(payload_type_, header.payloadType);
732 732
733 // Found the final packet of the frame to inflict loss to, drop this and 733 // Found the final packet of the frame to inflict loss to, drop this and
734 // expect a retransmission. 734 // expect a retransmission.
735 if (header.markerBit && ++marker_bits_observed_ == kDroppedFrameNumber) { 735 if (header.markerBit && ++marker_bits_observed_ == kDroppedFrameNumber) {
736 retransmitted_timestamp_ = header.timestamp; 736 retransmitted_timestamp_ = header.timestamp;
737 return DROP_PACKET; 737 return DROP_PACKET;
738 } 738 }
739 739
740 return SEND_PACKET; 740 return SEND_PACKET;
(...skipping 18 matching lines...) Expand all
759 if (payload_type_ == kRedPayloadType) { 759 if (payload_type_ == kRedPayloadType) {
760 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 760 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
761 send_config->rtp.fec.red_payload_type = kRedPayloadType; 761 send_config->rtp.fec.red_payload_type = kRedPayloadType;
762 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 762 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
763 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 763 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
764 } 764 }
765 765
766 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) { 766 if (retransmission_ssrc_ == kSendRtxSsrcs[0]) {
767 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 767 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
768 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 768 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
769 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc = 769 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc =
770 kSendRtxSsrcs[0]; 770 kSendRtxSsrcs[0];
771 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type = 771 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type =
772 kSendRtxPayloadType; 772 kSendRtxPayloadType;
773 } 773 }
774 } 774 }
775 775
776 void PerformTest() override { 776 void PerformTest() override {
777 EXPECT_TRUE(Wait()) 777 EXPECT_TRUE(Wait())
778 << "Timed out while waiting for retransmission to render."; 778 << "Timed out while waiting for retransmission to render.";
779 } 779 }
780 780
781 int GetPayloadType(bool use_rtx, bool use_red) { 781 int GetPayloadType(bool use_rtx, bool use_red) {
782 return use_rtx ? kSendRtxPayloadType 782 return use_rtx ? kSendRtxPayloadType
783 : (use_red ? kRedPayloadType : kFakeSendPayloadType); 783 : (use_red ? kRedPayloadType : kFakeVideoSendPayloadType);
784 } 784 }
785 785
786 rtc::CriticalSection crit_; 786 rtc::CriticalSection crit_;
787 const int payload_type_; 787 const int payload_type_;
788 const uint32_t retransmission_ssrc_; 788 const uint32_t retransmission_ssrc_;
789 const int retransmission_payload_type_; 789 const int retransmission_payload_type_;
790 int marker_bits_observed_; 790 int marker_bits_observed_;
791 int num_packets_observed_; 791 int num_packets_observed_;
792 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); 792 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_);
793 bool frame_retransmitted_; 793 bool frame_retransmitted_;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255. 870 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255.
871 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. 871 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0.
872 872
873 CreateCalls(Call::Config(), Call::Config()); 873 CreateCalls(Call::Config(), Call::Config());
874 874
875 test::DirectTransport sender_transport(sender_call_.get()); 875 test::DirectTransport sender_transport(sender_call_.get());
876 test::DirectTransport receiver_transport(receiver_call_.get()); 876 test::DirectTransport receiver_transport(receiver_call_.get());
877 sender_transport.SetReceiver(receiver_call_->Receiver()); 877 sender_transport.SetReceiver(receiver_call_->Receiver());
878 receiver_transport.SetReceiver(sender_call_->Receiver()); 878 receiver_transport.SetReceiver(sender_call_->Receiver());
879 879
880 CreateSendConfig(1, &sender_transport); 880 CreateSendConfig(1, 0, &sender_transport);
881 rtc::scoped_ptr<VideoEncoder> encoder( 881 rtc::scoped_ptr<VideoEncoder> encoder(
882 VideoEncoder::Create(VideoEncoder::kVp8)); 882 VideoEncoder::Create(VideoEncoder::kVp8));
883 video_send_config_.encoder_settings.encoder = encoder.get(); 883 video_send_config_.encoder_settings.encoder = encoder.get();
884 video_send_config_.encoder_settings.payload_name = "VP8"; 884 video_send_config_.encoder_settings.payload_name = "VP8";
885 ASSERT_EQ(1u, video_encoder_config_.streams.size()) << "Test setup error."; 885 ASSERT_EQ(1u, video_encoder_config_.streams.size()) << "Test setup error.";
886 video_encoder_config_.streams[0].width = kWidth; 886 video_encoder_config_.streams[0].width = kWidth;
887 video_encoder_config_.streams[0].height = kHeight; 887 video_encoder_config_.streams[0].height = kHeight;
888 video_send_config_.pre_encode_callback = &pre_encode_callback; 888 video_send_config_.pre_encode_callback = &pre_encode_callback;
889 889
890 CreateMatchingReceiveConfigs(&receiver_transport); 890 CreateMatchingReceiveConfigs(false, &receiver_transport);
891 video_receive_configs_[0].pre_render_callback = &pre_render_callback; 891 video_receive_configs_[0].pre_render_callback = &pre_render_callback;
892 video_receive_configs_[0].renderer = &renderer; 892 video_receive_configs_[0].renderer = &renderer;
893 893
894 CreateStreams(); 894 CreateVideoStreams();
895 Start(); 895 Start();
896 896
897 // Create frames that are smaller than the send width/height, this is done to 897 // Create frames that are smaller than the send width/height, this is done to
898 // check that the callbacks are done after processing video. 898 // check that the callbacks are done after processing video.
899 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 899 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
900 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); 900 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2));
901 video_send_stream_->Input()->IncomingCapturedFrame( 901 video_send_stream_->Input()->IncomingCapturedFrame(
902 *frame_generator->NextFrame()); 902 *frame_generator->NextFrame());
903 903
904 EXPECT_TRUE(pre_encode_callback.Wait()) 904 EXPECT_TRUE(pre_encode_callback.Wait())
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 }; 1044 };
1045 1045
1046 CreateCalls(Call::Config(), Call::Config()); 1046 CreateCalls(Call::Config(), Call::Config());
1047 1047
1048 test::DirectTransport send_transport(sender_call_.get()); 1048 test::DirectTransport send_transport(sender_call_.get());
1049 test::DirectTransport receive_transport(receiver_call_.get()); 1049 test::DirectTransport receive_transport(receiver_call_.get());
1050 PacketInputObserver input_observer(receiver_call_->Receiver()); 1050 PacketInputObserver input_observer(receiver_call_->Receiver());
1051 send_transport.SetReceiver(&input_observer); 1051 send_transport.SetReceiver(&input_observer);
1052 receive_transport.SetReceiver(sender_call_->Receiver()); 1052 receive_transport.SetReceiver(sender_call_->Receiver());
1053 1053
1054 CreateSendConfig(1, &send_transport); 1054 CreateSendConfig(1, 0, &send_transport);
1055 CreateMatchingReceiveConfigs(&receive_transport); 1055 CreateMatchingReceiveConfigs(false, &receive_transport);
1056 1056
1057 CreateStreams(); 1057 CreateVideoStreams();
1058 CreateFrameGeneratorCapturer(); 1058 CreateFrameGeneratorCapturer();
1059 Start(); 1059 Start();
1060 1060
1061 receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]); 1061 receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]);
1062 video_receive_streams_.clear(); 1062 video_receive_streams_.clear();
1063 1063
1064 // Wait() waits for a received packet. 1064 // Wait() waits for a received packet.
1065 EXPECT_TRUE(input_observer.Wait()); 1065 EXPECT_TRUE(input_observer.Wait());
1066 1066
1067 Stop(); 1067 Stop();
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 stream->max_bitrate_bps = 100000; 1221 stream->max_bitrate_bps = 100000;
1222 1222
1223 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); 1223 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]);
1224 1224
1225 send_streams[i] = 1225 send_streams[i] =
1226 sender_call->CreateVideoSendStream(send_config, encoder_config); 1226 sender_call->CreateVideoSendStream(send_config, encoder_config);
1227 send_streams[i]->Start(); 1227 send_streams[i]->Start();
1228 1228
1229 VideoReceiveStream::Config receive_config(receiver_transport.get()); 1229 VideoReceiveStream::Config receive_config(receiver_transport.get());
1230 receive_config.rtp.remote_ssrc = ssrc; 1230 receive_config.rtp.remote_ssrc = ssrc;
1231 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalSsrc; 1231 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc;
1232 VideoReceiveStream::Decoder decoder = 1232 VideoReceiveStream::Decoder decoder =
1233 test::CreateMatchingDecoder(send_config.encoder_settings); 1233 test::CreateMatchingDecoder(send_config.encoder_settings);
1234 allocated_decoders.push_back(decoder.decoder); 1234 allocated_decoders.push_back(decoder.decoder);
1235 receive_config.decoders.push_back(decoder); 1235 receive_config.decoders.push_back(decoder);
1236 1236
1237 UpdateReceiveConfig(i, &receive_config); 1237 UpdateReceiveConfig(i, &receive_config);
1238 1238
1239 receive_streams[i] = 1239 receive_streams[i] =
1240 receiver_call->CreateVideoReceiveStream(receive_config); 1240 receiver_call->CreateVideoReceiveStream(receive_config);
1241 receive_streams[i]->Start(); 1241 receive_streams[i]->Start();
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 EncodedFrameTestObserver post_encode_observer; 1653 EncodedFrameTestObserver post_encode_observer;
1654 EncodedFrameTestObserver pre_decode_observer; 1654 EncodedFrameTestObserver pre_decode_observer;
1655 1655
1656 CreateCalls(Call::Config(), Call::Config()); 1656 CreateCalls(Call::Config(), Call::Config());
1657 1657
1658 test::DirectTransport sender_transport(sender_call_.get()); 1658 test::DirectTransport sender_transport(sender_call_.get());
1659 test::DirectTransport receiver_transport(receiver_call_.get()); 1659 test::DirectTransport receiver_transport(receiver_call_.get());
1660 sender_transport.SetReceiver(receiver_call_->Receiver()); 1660 sender_transport.SetReceiver(receiver_call_->Receiver());
1661 receiver_transport.SetReceiver(sender_call_->Receiver()); 1661 receiver_transport.SetReceiver(sender_call_->Receiver());
1662 1662
1663 CreateSendConfig(1, &sender_transport); 1663 CreateSendConfig(1, 0, &sender_transport);
1664 CreateMatchingReceiveConfigs(&receiver_transport); 1664 CreateMatchingReceiveConfigs(false, &receiver_transport);
1665 video_send_config_.post_encode_callback = &post_encode_observer; 1665 video_send_config_.post_encode_callback = &post_encode_observer;
1666 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; 1666 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer;
1667 1667
1668 CreateStreams(); 1668 CreateVideoStreams();
1669 Start(); 1669 Start();
1670 1670
1671 rtc::scoped_ptr<test::FrameGenerator> frame_generator( 1671 rtc::scoped_ptr<test::FrameGenerator> frame_generator(
1672 test::FrameGenerator::CreateChromaGenerator( 1672 test::FrameGenerator::CreateChromaGenerator(
1673 video_encoder_config_.streams[0].width, 1673 video_encoder_config_.streams[0].width,
1674 video_encoder_config_.streams[0].height)); 1674 video_encoder_config_.streams[0].height));
1675 video_send_stream_->Input()->IncomingCapturedFrame( 1675 video_send_stream_->Input()->IncomingCapturedFrame(
1676 *frame_generator->NextFrame()); 1676 *frame_generator->NextFrame());
1677 1677
1678 EXPECT_TRUE(post_encode_observer.Wait()) 1678 EXPECT_TRUE(post_encode_observer.Wait())
(...skipping 20 matching lines...) Expand all
1699 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 1699 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
1700 RTCPUtility::RTCPParserV2 parser(packet, length, true); 1700 RTCPUtility::RTCPParserV2 parser(packet, length, true);
1701 EXPECT_TRUE(parser.IsValid()); 1701 EXPECT_TRUE(parser.IsValid());
1702 1702
1703 bool received_psfb = false; 1703 bool received_psfb = false;
1704 bool received_remb = false; 1704 bool received_remb = false;
1705 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 1705 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
1706 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 1706 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
1707 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRemb) { 1707 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRemb) {
1708 const RTCPUtility::RTCPPacket& packet = parser.Packet(); 1708 const RTCPUtility::RTCPPacket& packet = parser.Packet();
1709 EXPECT_EQ(packet.PSFBAPP.SenderSSRC, kReceiverLocalSsrc); 1709 EXPECT_EQ(packet.PSFBAPP.SenderSSRC, kReceiverLocalVideoSsrc);
1710 received_psfb = true; 1710 received_psfb = true;
1711 } else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) { 1711 } else if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbRembItem) {
1712 const RTCPUtility::RTCPPacket& packet = parser.Packet(); 1712 const RTCPUtility::RTCPPacket& packet = parser.Packet();
1713 EXPECT_GT(packet.REMBItem.BitRate, 0u); 1713 EXPECT_GT(packet.REMBItem.BitRate, 0u);
1714 EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u); 1714 EXPECT_EQ(packet.REMBItem.NumberOfSSRCs, 1u);
1715 EXPECT_EQ(packet.REMBItem.SSRCs[0], kSendSsrcs[0]); 1715 EXPECT_EQ(packet.REMBItem.SSRCs[0], kVideoSendSsrcs[0]);
1716 received_remb = true; 1716 received_remb = true;
1717 } 1717 }
1718 packet_type = parser.Iterate(); 1718 packet_type = parser.Iterate();
1719 } 1719 }
1720 if (received_psfb && received_remb) 1720 if (received_psfb && received_remb)
1721 observation_complete_.Set(); 1721 observation_complete_.Set();
1722 return SEND_PACKET; 1722 return SEND_PACKET;
1723 } 1723 }
1724 void PerformTest() override { 1724 void PerformTest() override {
1725 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " 1725 EXPECT_TRUE(Wait()) << "Timed out while waiting for a "
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1819 stats.substreams.begin(); it != stats.substreams.end(); ++it) { 1819 stats.substreams.begin(); it != stats.substreams.end(); ++it) {
1820 const VideoSendStream::StreamStats& stream_stats = it->second; 1820 const VideoSendStream::StreamStats& stream_stats = it->second;
1821 send_stream_nack_packets += 1821 send_stream_nack_packets +=
1822 stream_stats.rtcp_packet_type_counts.nack_packets; 1822 stream_stats.rtcp_packet_type_counts.nack_packets;
1823 } 1823 }
1824 for (size_t i = 0; i < receive_streams_.size(); ++i) { 1824 for (size_t i = 0; i < receive_streams_.size(); ++i) {
1825 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats(); 1825 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats();
1826 receive_stream_nack_packets += 1826 receive_stream_nack_packets +=
1827 stats.rtcp_packet_type_counts.nack_packets; 1827 stats.rtcp_packet_type_counts.nack_packets;
1828 } 1828 }
1829 if (send_stream_nack_packets >= 1 && 1829 if (send_stream_nack_packets >= 1 && receive_stream_nack_packets >= 1) {
1830 receive_stream_nack_packets >= 1) {
1831 // NACK packet sent on receive stream and received on sent stream. 1830 // NACK packet sent on receive stream and received on sent stream.
1832 if (MinMetricRunTimePassed()) 1831 if (MinMetricRunTimePassed())
1833 observation_complete_.Set(); 1832 observation_complete_.Set();
1834 } 1833 }
1835 } 1834 }
1836 1835
1837 bool MinMetricRunTimePassed() { 1836 bool MinMetricRunTimePassed() {
1838 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); 1837 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds();
1839 if (start_runtime_ms_ == -1) { 1838 if (start_runtime_ms_ == -1) {
1840 start_runtime_ms_ = now; 1839 start_runtime_ms_ = now;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 if (use_red_) { 1933 if (use_red_) {
1935 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 1934 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
1936 send_config->rtp.fec.red_payload_type = kRedPayloadType; 1935 send_config->rtp.fec.red_payload_type = kRedPayloadType;
1937 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 1936 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
1938 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 1937 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
1939 } 1938 }
1940 // RTX 1939 // RTX
1941 if (use_rtx_) { 1940 if (use_rtx_) {
1942 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]); 1941 send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
1943 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; 1942 send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
1944 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].ssrc = 1943 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].ssrc =
1945 kSendRtxSsrcs[0]; 1944 kSendRtxSsrcs[0];
1946 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type = 1945 (*receive_configs)[0].rtp.rtx[kFakeVideoSendPayloadType].payload_type =
1947 kSendRtxPayloadType; 1946 kSendRtxPayloadType;
1948 } 1947 }
1949 encoder_config->content_type = 1948 encoder_config->content_type =
1950 screenshare_ ? VideoEncoderConfig::ContentType::kScreen 1949 screenshare_ ? VideoEncoderConfig::ContentType::kScreen
1951 : VideoEncoderConfig::ContentType::kRealtimeVideo; 1950 : VideoEncoderConfig::ContentType::kRealtimeVideo;
1952 } 1951 }
1953 1952
1954 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 1953 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1955 sender_call_ = sender_call; 1954 sender_call_ = sender_call;
1956 receiver_call_ = receiver_call; 1955 receiver_call_ = receiver_call;
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 observation_complete_.Set(); 2229 observation_complete_.Set();
2231 } 2230 }
2232 } 2231 }
2233 2232
2234 if (ssrcs_to_observe_ == 0) 2233 if (ssrcs_to_observe_ == 0)
2235 observation_complete_.Set(); 2234 observation_complete_.Set();
2236 2235
2237 return SEND_PACKET; 2236 return SEND_PACKET;
2238 } 2237 }
2239 2238
2240 size_t GetNumStreams() const override { return num_ssrcs_; } 2239 size_t GetNumVideoStreams() const override { return num_ssrcs_; }
2241 2240
2242 void ModifyVideoConfigs( 2241 void ModifyVideoConfigs(
2243 VideoSendStream::Config* send_config, 2242 VideoSendStream::Config* send_config,
2244 std::vector<VideoReceiveStream::Config>* receive_configs, 2243 std::vector<VideoReceiveStream::Config>* receive_configs,
2245 VideoEncoderConfig* encoder_config) override { 2244 VideoEncoderConfig* encoder_config) override {
2246 if (num_ssrcs_ > 1) { 2245 if (num_ssrcs_ > 1) {
2247 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. 2246 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
2248 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { 2247 for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
2249 encoder_config->streams[i].min_bitrate_bps = 10000; 2248 encoder_config->streams[i].min_bitrate_bps = 10000;
2250 encoder_config->streams[i].target_bitrate_bps = 15000; 2249 encoder_config->streams[i].target_bitrate_bps = 15000;
(...skipping 30 matching lines...) Expand all
2281 std::map<uint32_t, bool> is_observed_; 2280 std::map<uint32_t, bool> is_observed_;
2282 2281
2283 const size_t num_ssrcs_; 2282 const size_t num_ssrcs_;
2284 const bool send_single_ssrc_first_; 2283 const bool send_single_ssrc_first_;
2285 2284
2286 size_t ssrcs_to_observe_; 2285 size_t ssrcs_to_observe_;
2287 bool expect_single_ssrc_; 2286 bool expect_single_ssrc_;
2288 2287
2289 VideoSendStream* send_stream_; 2288 VideoSendStream* send_stream_;
2290 VideoEncoderConfig video_encoder_config_all_streams_; 2289 VideoEncoderConfig video_encoder_config_all_streams_;
2291 } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first); 2290 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first);
2292 2291
2293 RunBaseTest(&test, FakeNetworkPipe::Config()); 2292 RunBaseTest(&test, FakeNetworkPipe::Config());
2294 } 2293 }
2295 2294
2296 TEST_F(EndToEndTest, ReportsSetEncoderRates) { 2295 TEST_F(EndToEndTest, ReportsSetEncoderRates) {
2297 class EncoderRateStatsTest : public test::EndToEndTest, 2296 class EncoderRateStatsTest : public test::EndToEndTest,
2298 public test::FakeEncoder { 2297 public test::FakeEncoder {
2299 public: 2298 public:
2300 EncoderRateStatsTest() 2299 EncoderRateStatsTest()
2301 : EndToEndTest(kDefaultTimeoutMs), 2300 : EndToEndTest(kDefaultTimeoutMs),
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
2437 receive_stats_filled_["CName"] |= !stats.c_name.empty(); 2436 receive_stats_filled_["CName"] |= !stats.c_name.empty();
2438 2437
2439 receive_stats_filled_["RtcpPacketTypeCount"] |= 2438 receive_stats_filled_["RtcpPacketTypeCount"] |=
2440 stats.rtcp_packet_type_counts.fir_packets != 0 || 2439 stats.rtcp_packet_type_counts.fir_packets != 0 ||
2441 stats.rtcp_packet_type_counts.nack_packets != 0 || 2440 stats.rtcp_packet_type_counts.nack_packets != 0 ||
2442 stats.rtcp_packet_type_counts.pli_packets != 0 || 2441 stats.rtcp_packet_type_counts.pli_packets != 0 ||
2443 stats.rtcp_packet_type_counts.nack_requests != 0 || 2442 stats.rtcp_packet_type_counts.nack_requests != 0 ||
2444 stats.rtcp_packet_type_counts.unique_nack_requests != 0; 2443 stats.rtcp_packet_type_counts.unique_nack_requests != 0;
2445 2444
2446 assert(stats.current_payload_type == -1 || 2445 assert(stats.current_payload_type == -1 ||
2447 stats.current_payload_type == kFakeSendPayloadType); 2446 stats.current_payload_type == kFakeVideoSendPayloadType);
2448 receive_stats_filled_["IncomingPayloadType"] |= 2447 receive_stats_filled_["IncomingPayloadType"] |=
2449 stats.current_payload_type == kFakeSendPayloadType; 2448 stats.current_payload_type == kFakeVideoSendPayloadType;
2450 } 2449 }
2451 2450
2452 return AllStatsFilled(receive_stats_filled_); 2451 return AllStatsFilled(receive_stats_filled_);
2453 } 2452 }
2454 2453
2455 bool CheckSendStats() { 2454 bool CheckSendStats() {
2456 RTC_DCHECK(send_stream_ != nullptr); 2455 RTC_DCHECK(send_stream_ != nullptr);
2457 VideoSendStream::Stats stats = send_stream_->GetStats(); 2456 VideoSendStream::Stats stats = send_stream_->GetStats();
2458 2457
2459 send_stats_filled_["NumStreams"] |= 2458 send_stats_filled_["NumStreams"] |=
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2546 2545
2547 const std::vector<uint32_t>& ssrcs = send_config->rtp.ssrcs; 2546 const std::vector<uint32_t>& ssrcs = send_config->rtp.ssrcs;
2548 for (size_t i = 0; i < ssrcs.size(); ++i) { 2547 for (size_t i = 0; i < ssrcs.size(); ++i) {
2549 expected_send_ssrcs_.insert(ssrcs[i]); 2548 expected_send_ssrcs_.insert(ssrcs[i]);
2550 expected_receive_ssrcs_.push_back( 2549 expected_receive_ssrcs_.push_back(
2551 (*receive_configs)[i].rtp.remote_ssrc); 2550 (*receive_configs)[i].rtp.remote_ssrc);
2552 (*receive_configs)[i].render_delay_ms = kExpectedRenderDelayMs; 2551 (*receive_configs)[i].render_delay_ms = kExpectedRenderDelayMs;
2553 } 2552 }
2554 } 2553 }
2555 2554
2556 size_t GetNumStreams() const override { return kNumSsrcs; } 2555 size_t GetNumVideoStreams() const override { return kNumSsrcs; }
2557 2556
2558 void OnVideoStreamsCreated( 2557 void OnVideoStreamsCreated(
2559 VideoSendStream* send_stream, 2558 VideoSendStream* send_stream,
2560 const std::vector<VideoReceiveStream*>& receive_streams) override { 2559 const std::vector<VideoReceiveStream*>& receive_streams) override {
2561 send_stream_ = send_stream; 2560 send_stream_ = send_stream;
2562 receive_streams_ = receive_streams; 2561 receive_streams_ = receive_streams;
2563 } 2562 }
2564 2563
2565 void PerformTest() override { 2564 void PerformTest() override {
2566 Clock* clock = Clock::GetRealTimeClock(); 2565 Clock* clock = Clock::GetRealTimeClock();
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
2707 2706
2708 if (!observed_redundant_retransmission_[header.ssrc]) { 2707 if (!observed_redundant_retransmission_[header.ssrc]) {
2709 observed_redundant_retransmission_[header.ssrc] = true; 2708 observed_redundant_retransmission_[header.ssrc] = true;
2710 if (--ssrcs_to_observe_ == 0) 2709 if (--ssrcs_to_observe_ == 0)
2711 observation_complete_.Set(); 2710 observation_complete_.Set();
2712 } 2711 }
2713 2712
2714 return SEND_PACKET; 2713 return SEND_PACKET;
2715 } 2714 }
2716 2715
2717 size_t GetNumStreams() const override { return kNumSsrcs; } 2716 size_t GetNumVideoStreams() const override { return kNumSsrcs; }
2718 2717
2719 void ModifyVideoConfigs( 2718 void ModifyVideoConfigs(
2720 VideoSendStream::Config* send_config, 2719 VideoSendStream::Config* send_config,
2721 std::vector<VideoReceiveStream::Config>* receive_configs, 2720 std::vector<VideoReceiveStream::Config>* receive_configs,
2722 VideoEncoderConfig* encoder_config) override { 2721 VideoEncoderConfig* encoder_config) override {
2723 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. 2722 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
2724 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { 2723 for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
2725 encoder_config->streams[i].min_bitrate_bps = 10000; 2724 encoder_config->streams[i].min_bitrate_bps = 10000;
2726 encoder_config->streams[i].target_bitrate_bps = 15000; 2725 encoder_config->streams[i].target_bitrate_bps = 15000;
2727 encoder_config->streams[i].max_bitrate_bps = 20000; 2726 encoder_config->streams[i].max_bitrate_bps = 20000;
(...skipping 25 matching lines...) Expand all
2753 2752
2754 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { 2753 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) {
2755 static const uint32_t kMaxSequenceNumberGap = 100; 2754 static const uint32_t kMaxSequenceNumberGap = 100;
2756 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90; 2755 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90;
2757 class RtpSequenceObserver : public test::RtpRtcpObserver { 2756 class RtpSequenceObserver : public test::RtpRtcpObserver {
2758 public: 2757 public:
2759 explicit RtpSequenceObserver(bool use_rtx) 2758 explicit RtpSequenceObserver(bool use_rtx)
2760 : test::RtpRtcpObserver(kDefaultTimeoutMs), 2759 : test::RtpRtcpObserver(kDefaultTimeoutMs),
2761 ssrcs_to_observe_(kNumSsrcs) { 2760 ssrcs_to_observe_(kNumSsrcs) {
2762 for (size_t i = 0; i < kNumSsrcs; ++i) { 2761 for (size_t i = 0; i < kNumSsrcs; ++i) {
2763 configured_ssrcs_[kSendSsrcs[i]] = true; 2762 configured_ssrcs_[kVideoSendSsrcs[i]] = true;
2764 if (use_rtx) 2763 if (use_rtx)
2765 configured_ssrcs_[kSendRtxSsrcs[i]] = true; 2764 configured_ssrcs_[kSendRtxSsrcs[i]] = true;
2766 } 2765 }
2767 } 2766 }
2768 2767
2769 void ResetExpectedSsrcs(size_t num_expected_ssrcs) { 2768 void ResetExpectedSsrcs(size_t num_expected_ssrcs) {
2770 rtc::CritScope lock(&crit_); 2769 rtc::CritScope lock(&crit_);
2771 ssrc_observed_.clear(); 2770 ssrc_observed_.clear();
2772 ssrcs_to_observe_ = num_expected_ssrcs; 2771 ssrcs_to_observe_ = num_expected_ssrcs;
2773 } 2772 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
2846 2845
2847 test::PacketTransport send_transport(sender_call_.get(), &observer, 2846 test::PacketTransport send_transport(sender_call_.get(), &observer,
2848 test::PacketTransport::kSender, 2847 test::PacketTransport::kSender,
2849 FakeNetworkPipe::Config()); 2848 FakeNetworkPipe::Config());
2850 test::PacketTransport receive_transport(nullptr, &observer, 2849 test::PacketTransport receive_transport(nullptr, &observer,
2851 test::PacketTransport::kReceiver, 2850 test::PacketTransport::kReceiver,
2852 FakeNetworkPipe::Config()); 2851 FakeNetworkPipe::Config());
2853 send_transport.SetReceiver(receiver_call_->Receiver()); 2852 send_transport.SetReceiver(receiver_call_->Receiver());
2854 receive_transport.SetReceiver(sender_call_->Receiver()); 2853 receive_transport.SetReceiver(sender_call_->Receiver());
2855 2854
2856 CreateSendConfig(kNumSsrcs, &send_transport); 2855 CreateSendConfig(kNumSsrcs, 0, &send_transport);
2857 2856
2858 if (use_rtx) { 2857 if (use_rtx) {
2859 for (size_t i = 0; i < kNumSsrcs; ++i) { 2858 for (size_t i = 0; i < kNumSsrcs; ++i) {
2860 video_send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); 2859 video_send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]);
2861 } 2860 }
2862 video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; 2861 video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType;
2863 } 2862 }
2864 2863
2865 // Lower bitrates so that all streams send initially. 2864 // Lower bitrates so that all streams send initially.
2866 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { 2865 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) {
2867 video_encoder_config_.streams[i].min_bitrate_bps = 10000; 2866 video_encoder_config_.streams[i].min_bitrate_bps = 10000;
2868 video_encoder_config_.streams[i].target_bitrate_bps = 15000; 2867 video_encoder_config_.streams[i].target_bitrate_bps = 15000;
2869 video_encoder_config_.streams[i].max_bitrate_bps = 20000; 2868 video_encoder_config_.streams[i].max_bitrate_bps = 20000;
2870 } 2869 }
2871 2870
2872 // Use the same total bitrates when sending a single stream to avoid lowering 2871 // Use the same total bitrates when sending a single stream to avoid lowering
2873 // the bitrate estimate and requiring a subsequent rampup. 2872 // the bitrate estimate and requiring a subsequent rampup.
2874 VideoEncoderConfig one_stream = video_encoder_config_; 2873 VideoEncoderConfig one_stream = video_encoder_config_;
2875 one_stream.streams.resize(1); 2874 one_stream.streams.resize(1);
2876 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { 2875 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) {
2877 one_stream.streams.front().min_bitrate_bps += 2876 one_stream.streams.front().min_bitrate_bps +=
2878 video_encoder_config_.streams[i].min_bitrate_bps; 2877 video_encoder_config_.streams[i].min_bitrate_bps;
2879 one_stream.streams.front().target_bitrate_bps += 2878 one_stream.streams.front().target_bitrate_bps +=
2880 video_encoder_config_.streams[i].target_bitrate_bps; 2879 video_encoder_config_.streams[i].target_bitrate_bps;
2881 one_stream.streams.front().max_bitrate_bps += 2880 one_stream.streams.front().max_bitrate_bps +=
2882 video_encoder_config_.streams[i].max_bitrate_bps; 2881 video_encoder_config_.streams[i].max_bitrate_bps;
2883 } 2882 }
2884 2883
2885 CreateMatchingReceiveConfigs(&receive_transport); 2884 CreateMatchingReceiveConfigs(false, &receive_transport);
2886 2885
2887 CreateStreams(); 2886 CreateVideoStreams();
2888 CreateFrameGeneratorCapturer(); 2887 CreateFrameGeneratorCapturer();
2889 2888
2890 Start(); 2889 Start();
2891 EXPECT_TRUE(observer.Wait()) 2890 EXPECT_TRUE(observer.Wait())
2892 << "Timed out waiting for all SSRCs to send packets."; 2891 << "Timed out waiting for all SSRCs to send packets.";
2893 2892
2894 // Test stream resetting more than once to make sure that the state doesn't 2893 // Test stream resetting more than once to make sure that the state doesn't
2895 // get set once (this could be due to using std::map::insert for instance). 2894 // get set once (this could be due to using std::map::insert for instance).
2896 for (size_t i = 0; i < 3; ++i) { 2895 for (size_t i = 0; i < 3; ++i) {
2897 frame_generator_capturer_->Stop(); 2896 frame_generator_capturer_->Stop();
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
3123 CreateCalls(Call::Config(), Call::Config()); 3122 CreateCalls(Call::Config(), Call::Config());
3124 3123
3125 FakeNetworkPipe::Config config; 3124 FakeNetworkPipe::Config config;
3126 config.queue_delay_ms = kSendDelayMs; 3125 config.queue_delay_ms = kSendDelayMs;
3127 test::DirectTransport sender_transport(config, sender_call_.get()); 3126 test::DirectTransport sender_transport(config, sender_call_.get());
3128 config.queue_delay_ms = kReceiveDelayMs; 3127 config.queue_delay_ms = kReceiveDelayMs;
3129 test::DirectTransport receiver_transport(config, receiver_call_.get()); 3128 test::DirectTransport receiver_transport(config, receiver_call_.get());
3130 sender_transport.SetReceiver(receiver_call_->Receiver()); 3129 sender_transport.SetReceiver(receiver_call_->Receiver());
3131 receiver_transport.SetReceiver(sender_call_->Receiver()); 3130 receiver_transport.SetReceiver(sender_call_->Receiver());
3132 3131
3133 CreateSendConfig(1, &sender_transport); 3132 CreateSendConfig(1, 0, &sender_transport);
3134 CreateMatchingReceiveConfigs(&receiver_transport); 3133 CreateMatchingReceiveConfigs(false, &receiver_transport);
3135 3134
3136 CreateStreams(); 3135 CreateVideoStreams();
3137 CreateFrameGeneratorCapturer(); 3136 CreateFrameGeneratorCapturer();
3138 Start(); 3137 Start();
3139 3138
3140 int64_t start_time_ms = clock_->TimeInMilliseconds(); 3139 int64_t start_time_ms = clock_->TimeInMilliseconds();
3141 while (true) { 3140 while (true) {
3142 Call::Stats stats = sender_call_->GetStats(); 3141 Call::Stats stats = sender_call_->GetStats();
3143 ASSERT_GE(start_time_ms + kDefaultTimeoutMs, 3142 ASSERT_GE(start_time_ms + kDefaultTimeoutMs,
3144 clock_->TimeInMilliseconds()) 3143 clock_->TimeInMilliseconds())
3145 << "No RTT stats before timeout!"; 3144 << "No RTT stats before timeout!";
3146 if (stats.rtt_ms != -1) { 3145 if (stats.rtt_ms != -1) {
(...skipping 17 matching lines...) Expand all
3164 ADD_FAILURE() << "Unexpected frame encode."; 3163 ADD_FAILURE() << "Unexpected frame encode.";
3165 return test::FakeEncoder::Encode( 3164 return test::FakeEncoder::Encode(
3166 input_image, codec_specific_info, frame_types); 3165 input_image, codec_specific_info, frame_types);
3167 } 3166 }
3168 }; 3167 };
3169 3168
3170 CreateSenderCall(Call::Config()); 3169 CreateSenderCall(Call::Config());
3171 sender_call_->SignalNetworkState(kNetworkDown); 3170 sender_call_->SignalNetworkState(kNetworkDown);
3172 3171
3173 UnusedTransport transport; 3172 UnusedTransport transport;
3174 CreateSendConfig(1, &transport); 3173 CreateSendConfig(1, 0, &transport);
3175 UnusedEncoder unused_encoder; 3174 UnusedEncoder unused_encoder;
3176 video_send_config_.encoder_settings.encoder = &unused_encoder; 3175 video_send_config_.encoder_settings.encoder = &unused_encoder;
3177 CreateStreams(); 3176 CreateVideoStreams();
3178 CreateFrameGeneratorCapturer(); 3177 CreateFrameGeneratorCapturer();
3179 3178
3180 Start(); 3179 Start();
3181 SleepMs(kSilenceTimeoutMs); 3180 SleepMs(kSilenceTimeoutMs);
3182 Stop(); 3181 Stop();
3183 3182
3184 DestroyStreams(); 3183 DestroyStreams();
3185 } 3184 }
3186 3185
3187 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { 3186 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) {
3188 CreateCalls(Call::Config(), Call::Config()); 3187 CreateCalls(Call::Config(), Call::Config());
3189 receiver_call_->SignalNetworkState(kNetworkDown); 3188 receiver_call_->SignalNetworkState(kNetworkDown);
3190 3189
3191 test::DirectTransport sender_transport(sender_call_.get()); 3190 test::DirectTransport sender_transport(sender_call_.get());
3192 sender_transport.SetReceiver(receiver_call_->Receiver()); 3191 sender_transport.SetReceiver(receiver_call_->Receiver());
3193 CreateSendConfig(1, &sender_transport); 3192 CreateSendConfig(1, 0, &sender_transport);
3194 UnusedTransport transport; 3193 UnusedTransport transport;
3195 CreateMatchingReceiveConfigs(&transport); 3194 CreateMatchingReceiveConfigs(false, &transport);
3196 CreateStreams(); 3195 CreateVideoStreams();
3197 CreateFrameGeneratorCapturer(); 3196 CreateFrameGeneratorCapturer();
3198 3197
3199 Start(); 3198 Start();
3200 SleepMs(kSilenceTimeoutMs); 3199 SleepMs(kSilenceTimeoutMs);
3201 Stop(); 3200 Stop();
3202 3201
3203 sender_transport.StopSending(); 3202 sender_transport.StopSending();
3204 3203
3205 DestroyStreams(); 3204 DestroyStreams();
3206 } 3205 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3244 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3243 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3245 << "Enabling RTX requires rtpmap: rtx negotiation."; 3244 << "Enabling RTX requires rtpmap: rtx negotiation.";
3246 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3245 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3247 << "Enabling RTP extensions require negotiation."; 3246 << "Enabling RTP extensions require negotiation.";
3248 3247
3249 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3248 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3250 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3249 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3251 } 3250 }
3252 3251
3253 } // namespace webrtc 3252 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698