OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |