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

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

Powered by Google App Engine
This is Rietveld 408576698