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

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

Issue 2522493002: Now run EndToEndTest with the WebRTC-NewVideoJitterBuffer experiment. (Closed)
Patch Set: Threading fix. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/video_coding/video_receiver.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> 10 #include <algorithm>
(...skipping 24 matching lines...) Expand all
35 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" 35 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
36 #include "webrtc/modules/video_coding/include/video_coding_defines.h" 36 #include "webrtc/modules/video_coding/include/video_coding_defines.h"
37 #include "webrtc/system_wrappers/include/metrics.h" 37 #include "webrtc/system_wrappers/include/metrics.h"
38 #include "webrtc/system_wrappers/include/metrics_default.h" 38 #include "webrtc/system_wrappers/include/metrics_default.h"
39 #include "webrtc/system_wrappers/include/sleep.h" 39 #include "webrtc/system_wrappers/include/sleep.h"
40 #include "webrtc/test/call_test.h" 40 #include "webrtc/test/call_test.h"
41 #include "webrtc/test/direct_transport.h" 41 #include "webrtc/test/direct_transport.h"
42 #include "webrtc/test/encoder_settings.h" 42 #include "webrtc/test/encoder_settings.h"
43 #include "webrtc/test/fake_decoder.h" 43 #include "webrtc/test/fake_decoder.h"
44 #include "webrtc/test/fake_encoder.h" 44 #include "webrtc/test/fake_encoder.h"
45 #include "webrtc/test/field_trial.h"
45 #include "webrtc/test/frame_generator.h" 46 #include "webrtc/test/frame_generator.h"
46 #include "webrtc/test/frame_generator_capturer.h" 47 #include "webrtc/test/frame_generator_capturer.h"
47 #include "webrtc/test/gtest.h" 48 #include "webrtc/test/gtest.h"
49 #include "webrtc/test/gmock.h"
48 #include "webrtc/test/null_transport.h" 50 #include "webrtc/test/null_transport.h"
49 #include "webrtc/test/rtcp_packet_parser.h" 51 #include "webrtc/test/rtcp_packet_parser.h"
50 #include "webrtc/test/rtp_rtcp_observer.h" 52 #include "webrtc/test/rtp_rtcp_observer.h"
51 #include "webrtc/test/testsupport/fileutils.h" 53 #include "webrtc/test/testsupport/fileutils.h"
52 #include "webrtc/test/testsupport/perf_test.h" 54 #include "webrtc/test/testsupport/perf_test.h"
53 #include "webrtc/video/transport_adapter.h" 55 #include "webrtc/video/transport_adapter.h"
54 #include "webrtc/video_encoder.h" 56 #include "webrtc/video_encoder.h"
55 57
56 namespace webrtc { 58 namespace webrtc {
57 59
58 static const int kSilenceTimeoutMs = 2000; 60 static const int kSilenceTimeoutMs = 2000;
59 61
60 class EndToEndTest : public test::CallTest { 62 class EndToEndTest : public test::CallTest,
63 public ::testing::WithParamInterface<std::string> {
61 public: 64 public:
62 EndToEndTest() {} 65 EndToEndTest() : scoped_field_trial_(GetParam()) {}
63 66
64 virtual ~EndToEndTest() { 67 virtual ~EndToEndTest() {
65 EXPECT_EQ(nullptr, video_send_stream_); 68 EXPECT_EQ(nullptr, video_send_stream_);
66 EXPECT_TRUE(video_receive_streams_.empty()); 69 EXPECT_TRUE(video_receive_streams_.empty());
67 } 70 }
68 71
69 protected: 72 protected:
70 class UnusedTransport : public Transport { 73 class UnusedTransport : public Transport {
71 private: 74 private:
72 bool SendRtp(const uint8_t* packet, 75 bool SendRtp(const uint8_t* packet,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); 124 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
122 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); 125 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp);
123 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); 126 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare);
124 void VerifyNewVideoSendStreamsRespectNetworkState( 127 void VerifyNewVideoSendStreamsRespectNetworkState(
125 MediaType network_to_bring_up, 128 MediaType network_to_bring_up,
126 VideoEncoder* encoder, 129 VideoEncoder* encoder,
127 Transport* transport); 130 Transport* transport);
128 void VerifyNewVideoReceiveStreamsRespectNetworkState( 131 void VerifyNewVideoReceiveStreamsRespectNetworkState(
129 MediaType network_to_bring_up, 132 MediaType network_to_bring_up,
130 Transport* transport); 133 Transport* transport);
134 test::ScopedFieldTrials scoped_field_trial_;
131 }; 135 };
132 136
133 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { 137 INSTANTIATE_TEST_CASE_P(
138 TestWithNewVideoJitterBuffer,
139 EndToEndTest,
140 ::testing::Values("WebRTC-NewVideoJitterBuffer/Enabled/",
141 "WebRTC-NewVideoJitterBuffer/Disabled/"));
142
143 TEST_P(EndToEndTest, ReceiverCanBeStartedTwice) {
134 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); 144 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
135 145
136 test::NullTransport transport; 146 test::NullTransport transport;
137 CreateSendConfig(1, 0, 0, &transport); 147 CreateSendConfig(1, 0, 0, &transport);
138 CreateMatchingReceiveConfigs(&transport); 148 CreateMatchingReceiveConfigs(&transport);
139 149
140 CreateVideoStreams(); 150 CreateVideoStreams();
141 151
142 video_receive_streams_[0]->Start(); 152 video_receive_streams_[0]->Start();
143 video_receive_streams_[0]->Start(); 153 video_receive_streams_[0]->Start();
144 154
145 DestroyStreams(); 155 DestroyStreams();
146 } 156 }
147 157
148 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { 158 TEST_P(EndToEndTest, ReceiverCanBeStoppedTwice) {
149 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); 159 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
150 160
151 test::NullTransport transport; 161 test::NullTransport transport;
152 CreateSendConfig(1, 0, 0, &transport); 162 CreateSendConfig(1, 0, 0, &transport);
153 CreateMatchingReceiveConfigs(&transport); 163 CreateMatchingReceiveConfigs(&transport);
154 164
155 CreateVideoStreams(); 165 CreateVideoStreams();
156 166
157 video_receive_streams_[0]->Stop(); 167 video_receive_streams_[0]->Stop();
158 video_receive_streams_[0]->Stop(); 168 video_receive_streams_[0]->Stop();
159 169
160 DestroyStreams(); 170 DestroyStreams();
161 } 171 }
162 172
163 TEST_F(EndToEndTest, ReceiverCanBeStoppedAndRestarted) { 173 TEST_P(EndToEndTest, ReceiverCanBeStoppedAndRestarted) {
164 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); 174 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
165 175
166 test::NullTransport transport; 176 test::NullTransport transport;
167 CreateSendConfig(1, 0, 0, &transport); 177 CreateSendConfig(1, 0, 0, &transport);
168 CreateMatchingReceiveConfigs(&transport); 178 CreateMatchingReceiveConfigs(&transport);
169 179
170 CreateVideoStreams(); 180 CreateVideoStreams();
171 181
172 video_receive_streams_[0]->Stop(); 182 video_receive_streams_[0]->Stop();
173 video_receive_streams_[0]->Start(); 183 video_receive_streams_[0]->Start();
174 video_receive_streams_[0]->Stop(); 184 video_receive_streams_[0]->Stop();
175 185
176 DestroyStreams(); 186 DestroyStreams();
177 } 187 }
178 188
179 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { 189 TEST_P(EndToEndTest, RendersSingleDelayedFrame) {
180 static const int kWidth = 320; 190 static const int kWidth = 320;
181 static const int kHeight = 240; 191 static const int kHeight = 240;
182 // This constant is chosen to be higher than the timeout in the video_render 192 // This constant is chosen to be higher than the timeout in the video_render
183 // module. This makes sure that frames aren't dropped if there are no other 193 // module. This makes sure that frames aren't dropped if there are no other
184 // frames in the queue. 194 // frames in the queue.
185 static const int kDelayRenderCallbackMs = 1000; 195 static const int kDelayRenderCallbackMs = 1000;
186 196
187 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { 197 class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
188 public: 198 public:
189 Renderer() : event_(false, false) {} 199 Renderer() : event_(false, false) {}
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 << "Timed out while waiting for the frame to render."; 252 << "Timed out while waiting for the frame to render.";
243 253
244 Stop(); 254 Stop();
245 255
246 sender_transport.StopSending(); 256 sender_transport.StopSending();
247 receiver_transport.StopSending(); 257 receiver_transport.StopSending();
248 258
249 DestroyStreams(); 259 DestroyStreams();
250 } 260 }
251 261
252 TEST_F(EndToEndTest, TransmitsFirstFrame) { 262 TEST_P(EndToEndTest, TransmitsFirstFrame) {
253 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { 263 class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
254 public: 264 public:
255 Renderer() : event_(false, false) {} 265 Renderer() : event_(false, false) {}
256 266
257 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } 267 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); }
258 268
259 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } 269 bool Wait() { return event_.Wait(kDefaultTimeoutMs); }
260 270
261 rtc::Event event_; 271 rtc::Event event_;
262 } renderer; 272 } renderer;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 355
346 private: 356 private:
347 int no_frames_to_wait_for_; 357 int no_frames_to_wait_for_;
348 VideoRotation expected_rotation_; 358 VideoRotation expected_rotation_;
349 std::string payload_name_; 359 std::string payload_name_;
350 std::unique_ptr<webrtc::VideoEncoder> encoder_; 360 std::unique_ptr<webrtc::VideoEncoder> encoder_;
351 std::unique_ptr<webrtc::VideoDecoder> decoder_; 361 std::unique_ptr<webrtc::VideoDecoder> decoder_;
352 int frame_counter_; 362 int frame_counter_;
353 }; 363 };
354 364
355 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) { 365 TEST_P(EndToEndTest, SendsAndReceivesVP8) {
366 CodecObserver test(5, kVideoRotation_0, "VP8", VP8Encoder::Create(),
367 VP8Decoder::Create());
368 RunBaseTest(&test);
369 }
370
371 TEST_P(EndToEndTest, SendsAndReceivesVP8Rotation90) {
356 CodecObserver test(5, kVideoRotation_90, "VP8", VP8Encoder::Create(), 372 CodecObserver test(5, kVideoRotation_90, "VP8", VP8Encoder::Create(),
357 VP8Decoder::Create()); 373 VP8Decoder::Create());
358 RunBaseTest(&test); 374 RunBaseTest(&test);
359 } 375 }
360 376
361 #if !defined(RTC_DISABLE_VP9) 377 #if !defined(RTC_DISABLE_VP9)
362 TEST_F(EndToEndTest, SendsAndReceivesVP9) { 378 TEST_P(EndToEndTest, SendsAndReceivesVP9) {
363 CodecObserver test(500, kVideoRotation_0, "VP9", VP9Encoder::Create(), 379 CodecObserver test(500, kVideoRotation_0, "VP9", VP9Encoder::Create(),
364 VP9Decoder::Create()); 380 VP9Decoder::Create());
365 RunBaseTest(&test); 381 RunBaseTest(&test);
366 } 382 }
367 383
368 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) { 384 TEST_P(EndToEndTest, SendsAndReceivesVP9VideoRotation90) {
369 CodecObserver test(5, kVideoRotation_90, "VP9", VP9Encoder::Create(), 385 CodecObserver test(5, kVideoRotation_90, "VP9", VP9Encoder::Create(),
370 VP9Decoder::Create()); 386 VP9Decoder::Create());
371 RunBaseTest(&test); 387 RunBaseTest(&test);
372 } 388 }
373 #endif // !defined(RTC_DISABLE_VP9) 389 #endif // !defined(RTC_DISABLE_VP9)
374 390
375 #if defined(WEBRTC_USE_H264) 391 #if defined(WEBRTC_USE_H264)
376 TEST_F(EndToEndTest, SendsAndReceivesH264) { 392 TEST_P(EndToEndTest, SendsAndReceivesH264) {
377 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(), 393 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(),
378 H264Decoder::Create()); 394 H264Decoder::Create());
379 RunBaseTest(&test); 395 RunBaseTest(&test);
380 } 396 }
381 397
382 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) { 398 TEST_P(EndToEndTest, SendsAndReceivesH264VideoRotation90) {
383 CodecObserver test(5, kVideoRotation_90, "H264", H264Encoder::Create(), 399 CodecObserver test(5, kVideoRotation_90, "H264", H264Encoder::Create(),
384 H264Decoder::Create()); 400 H264Decoder::Create());
385 RunBaseTest(&test); 401 RunBaseTest(&test);
386 } 402 }
387 #endif // defined(WEBRTC_USE_H264) 403 #endif // defined(WEBRTC_USE_H264)
388 404
389 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 405 TEST_P(EndToEndTest, ReceiverUsesLocalSsrc) {
390 class SyncRtcpObserver : public test::EndToEndTest { 406 class SyncRtcpObserver : public test::EndToEndTest {
391 public: 407 public:
392 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 408 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
393 409
394 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 410 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
395 test::RtcpPacketParser parser; 411 test::RtcpPacketParser parser;
396 EXPECT_TRUE(parser.Parse(packet, length)); 412 EXPECT_TRUE(parser.Parse(packet, length));
397 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.sender_ssrc()); 413 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.sender_ssrc());
398 observation_complete_.Set(); 414 observation_complete_.Set();
399 415
400 return SEND_PACKET; 416 return SEND_PACKET;
401 } 417 }
402 418
403 void PerformTest() override { 419 void PerformTest() override {
404 EXPECT_TRUE(Wait()) 420 EXPECT_TRUE(Wait())
405 << "Timed out while waiting for a receiver RTCP packet to be sent."; 421 << "Timed out while waiting for a receiver RTCP packet to be sent.";
406 } 422 }
407 } test; 423 } test;
408 424
409 RunBaseTest(&test); 425 RunBaseTest(&test);
410 } 426 }
411 427
412 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { 428 TEST_P(EndToEndTest, ReceivesAndRetransmitsNack) {
413 static const int kNumberOfNacksToObserve = 2; 429 static const int kNumberOfNacksToObserve = 2;
414 static const int kLossBurstSize = 2; 430 static const int kLossBurstSize = 2;
415 static const int kPacketsBetweenLossBursts = 9; 431 static const int kPacketsBetweenLossBursts = 9;
416 class NackObserver : public test::EndToEndTest { 432 class NackObserver : public test::EndToEndTest {
417 public: 433 public:
418 NackObserver() 434 NackObserver()
419 : EndToEndTest(kLongTimeoutMs), 435 : EndToEndTest(kLongTimeoutMs),
420 sent_rtp_packets_(0), 436 sent_rtp_packets_(0),
421 packets_left_to_drop_(0), 437 packets_left_to_drop_(0),
422 nacks_left_(kNumberOfNacksToObserve) {} 438 nacks_left_(kNumberOfNacksToObserve) {}
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 std::set<uint16_t> dropped_packets_; 500 std::set<uint16_t> dropped_packets_;
485 std::set<uint16_t> retransmitted_packets_; 501 std::set<uint16_t> retransmitted_packets_;
486 uint64_t sent_rtp_packets_; 502 uint64_t sent_rtp_packets_;
487 int packets_left_to_drop_; 503 int packets_left_to_drop_;
488 int nacks_left_ GUARDED_BY(&crit_); 504 int nacks_left_ GUARDED_BY(&crit_);
489 } test; 505 } test;
490 506
491 RunBaseTest(&test); 507 RunBaseTest(&test);
492 } 508 }
493 509
494 TEST_F(EndToEndTest, ReceivesNackAndRetransmitsAudio) { 510 TEST_P(EndToEndTest, ReceivesNackAndRetransmitsAudio) {
495 class NackObserver : public test::EndToEndTest { 511 class NackObserver : public test::EndToEndTest {
496 public: 512 public:
497 NackObserver() 513 NackObserver()
498 : EndToEndTest(kLongTimeoutMs), 514 : EndToEndTest(kLongTimeoutMs),
499 local_ssrc_(0), 515 local_ssrc_(0),
500 remote_ssrc_(0), 516 remote_ssrc_(0),
501 receive_transport_(nullptr) {} 517 receive_transport_(nullptr) {}
502 518
503 private: 519 private:
504 size_t GetNumVideoStreams() const override { return 0; } 520 size_t GetNumVideoStreams() const override { return 0; }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 571
556 uint32_t local_ssrc_; 572 uint32_t local_ssrc_;
557 uint32_t remote_ssrc_; 573 uint32_t remote_ssrc_;
558 Transport* receive_transport_; 574 Transport* receive_transport_;
559 rtc::Optional<uint16_t> sequence_number_to_retransmit_; 575 rtc::Optional<uint16_t> sequence_number_to_retransmit_;
560 } test; 576 } test;
561 577
562 RunBaseTest(&test); 578 RunBaseTest(&test);
563 } 579 }
564 580
565 TEST_F(EndToEndTest, CanReceiveUlpfec) { 581 TEST_P(EndToEndTest, CanReceiveUlpfec) {
566 class UlpfecRenderObserver : public test::EndToEndTest, 582 class UlpfecRenderObserver : public test::EndToEndTest,
567 public rtc::VideoSinkInterface<VideoFrame> { 583 public rtc::VideoSinkInterface<VideoFrame> {
568 public: 584 public:
569 UlpfecRenderObserver() 585 UlpfecRenderObserver()
570 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} 586 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
571 587
572 private: 588 private:
573 Action OnSendRtp(const uint8_t* packet, size_t length) override { 589 Action OnSendRtp(const uint8_t* packet, size_t length) override {
574 rtc::CritScope lock(&crit_); 590 rtc::CritScope lock(&crit_);
575 RTPHeader header; 591 RTPHeader header;
576 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 592 EXPECT_TRUE(parser_->Parse(packet, length, &header));
577 593
578 int encapsulated_payload_type = -1; 594 int encapsulated_payload_type = -1;
579 if (header.payloadType == kRedPayloadType) { 595 if (header.payloadType == kRedPayloadType) {
580 encapsulated_payload_type = 596 encapsulated_payload_type =
581 static_cast<int>(packet[header.headerLength]); 597 static_cast<int>(packet[header.headerLength]);
582 if (encapsulated_payload_type != kFakeVideoSendPayloadType) 598 if (encapsulated_payload_type != kFakeVideoSendPayloadType)
583 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type); 599 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
584 } else { 600 } else {
585 EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType); 601 EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
586 } 602 }
587 603
588 if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) { 604 if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) {
589 // Retransmitted packet, should not count. 605 // Retransmitted packet, should not count.
590 protected_sequence_numbers_.erase(header.sequenceNumber); 606 protected_sequence_numbers_.erase(header.sequenceNumber);
591 EXPECT_GT(protected_timestamps_.count(header.timestamp), 0u); 607 EXPECT_GT(protected_timestamps_.count(header.timestamp), 0u);
592 protected_timestamps_.erase(header.timestamp); 608 protected_timestamps_.erase(header.timestamp);
brandtr 2016/11/24 13:03:57 This call will remove all protected timestamps wit
philipel 2016/11/24 13:58:24 Done.
593 return SEND_PACKET; 609 return SEND_PACKET;
594 } 610 }
595 611
596 switch (state_) { 612 switch (state_) {
597 case kFirstPacket: 613 case kFirstPacket:
598 state_ = kDropEveryOtherPacketUntilUlpfec; 614 state_ = kDropEveryOtherPacketUntilUlpfec;
599 break; 615 break;
600 case kDropEveryOtherPacketUntilUlpfec: 616 case kDropEveryOtherPacketUntilUlpfec:
601 if (encapsulated_payload_type == kUlpfecPayloadType) { 617 if (encapsulated_payload_type == kUlpfecPayloadType) {
602 state_ = kDropNextMediaPacket; 618 state_ = kDropNextMediaPacket;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 (*receive_configs)[0].renderer = this; 664 (*receive_configs)[0].renderer = this;
649 } 665 }
650 666
651 void PerformTest() override { 667 void PerformTest() override {
652 EXPECT_TRUE(Wait()) 668 EXPECT_TRUE(Wait())
653 << "Timed out waiting for dropped frames to be rendered."; 669 << "Timed out waiting for dropped frames to be rendered.";
654 } 670 }
655 671
656 rtc::CriticalSection crit_; 672 rtc::CriticalSection crit_;
657 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); 673 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_);
658 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); 674 // Since several packets can have the same timestamp a multiset is used
675 // instead of a set.
676 std::multiset<uint32_t> protected_timestamps_ GUARDED_BY(crit_);
659 } test; 677 } test;
660 678
661 RunBaseTest(&test); 679 RunBaseTest(&test);
662 } 680 }
663 681
664 TEST_F(EndToEndTest, CanReceiveFlexfec) { 682 TEST_P(EndToEndTest, CanReceiveFlexfec) {
665 class FlexfecRenderObserver : public test::EndToEndTest, 683 class FlexfecRenderObserver : public test::EndToEndTest,
666 public rtc::VideoSinkInterface<VideoFrame> { 684 public rtc::VideoSinkInterface<VideoFrame> {
667 public: 685 public:
668 FlexfecRenderObserver() 686 FlexfecRenderObserver()
669 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} 687 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
670 688
671 size_t GetNumFlexfecStreams() const override { return 1; } 689 size_t GetNumFlexfecStreams() const override { return 1; }
672 690
673 private: 691 private:
674 Action OnSendRtp(const uint8_t* packet, size_t length) override { 692 Action OnSendRtp(const uint8_t* packet, size_t length) override {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 (*receive_configs)[0].renderer = this; 756 (*receive_configs)[0].renderer = this;
739 } 757 }
740 758
741 void PerformTest() override { 759 void PerformTest() override {
742 EXPECT_TRUE(Wait()) 760 EXPECT_TRUE(Wait())
743 << "Timed out waiting for dropped frames to be rendered."; 761 << "Timed out waiting for dropped frames to be rendered.";
744 } 762 }
745 763
746 rtc::CriticalSection crit_; 764 rtc::CriticalSection crit_;
747 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); 765 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_);
748 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); 766 // Since several packets can have the same timestamp a multiset is used
767 // instead of a set.
768 std::multiset<uint32_t> protected_timestamps_ GUARDED_BY(crit_);
749 } test; 769 } test;
750 770
751 RunBaseTest(&test); 771 RunBaseTest(&test);
752 } 772 }
753 773
754 TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { 774 TEST_P(EndToEndTest, ReceivedUlpfecPacketsNotNacked) {
755 class UlpfecNackObserver : public test::EndToEndTest { 775 class UlpfecNackObserver : public test::EndToEndTest {
756 public: 776 public:
757 UlpfecNackObserver() 777 UlpfecNackObserver()
758 : EndToEndTest(kDefaultTimeoutMs), 778 : EndToEndTest(kDefaultTimeoutMs),
759 state_(kFirstPacket), 779 state_(kFirstPacket),
760 ulpfec_sequence_number_(0), 780 ulpfec_sequence_number_(0),
761 has_last_sequence_number_(false), 781 has_last_sequence_number_(false),
762 last_sequence_number_(0), 782 last_sequence_number_(0),
763 encoder_(VP8Encoder::Create()), 783 encoder_(VP8Encoder::Create()),
764 decoder_(VP8Decoder::Create()) {} 784 decoder_(VP8Decoder::Create()) {}
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 std::unique_ptr<VideoEncoder> encoder_; 1062 std::unique_ptr<VideoEncoder> encoder_;
1043 const std::string payload_name_; 1063 const std::string payload_name_;
1044 int marker_bits_observed_; 1064 int marker_bits_observed_;
1045 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); 1065 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_);
1046 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_); 1066 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_);
1047 } test(enable_rtx, enable_red); 1067 } test(enable_rtx, enable_red);
1048 1068
1049 RunBaseTest(&test); 1069 RunBaseTest(&test);
1050 } 1070 }
1051 1071
1052 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { 1072 TEST_P(EndToEndTest, DecodesRetransmittedFrame) {
1053 DecodesRetransmittedFrame(false, false); 1073 DecodesRetransmittedFrame(false, false);
1054 } 1074 }
1055 1075
1056 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { 1076 TEST_P(EndToEndTest, DecodesRetransmittedFrameOverRtx) {
1057 DecodesRetransmittedFrame(true, false); 1077 DecodesRetransmittedFrame(true, false);
1058 } 1078 }
1059 1079
1060 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRed) { 1080 TEST_P(EndToEndTest, DecodesRetransmittedFrameByRed) {
1061 DecodesRetransmittedFrame(false, true); 1081 DecodesRetransmittedFrame(false, true);
1062 } 1082 }
1063 1083
1064 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { 1084 TEST_P(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) {
1065 DecodesRetransmittedFrame(true, true); 1085 DecodesRetransmittedFrame(true, true);
1066 } 1086 }
1067 1087
1068 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { 1088 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) {
1069 static const int kPacketsToDrop = 1; 1089 static const int kPacketsToDrop = 1;
1070 1090
1071 class PliObserver : public test::EndToEndTest, 1091 class PliObserver : public test::EndToEndTest,
1072 public rtc::VideoSinkInterface<VideoFrame> { 1092 public rtc::VideoSinkInterface<VideoFrame> {
1073 public: 1093 public:
1074 explicit PliObserver(int rtp_history_ms) 1094 explicit PliObserver(int rtp_history_ms)
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 int rtp_history_ms_; 1158 int rtp_history_ms_;
1139 bool nack_enabled_; 1159 bool nack_enabled_;
1140 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); 1160 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_);
1141 int frames_to_drop_ GUARDED_BY(&crit_); 1161 int frames_to_drop_ GUARDED_BY(&crit_);
1142 bool received_pli_ GUARDED_BY(&crit_); 1162 bool received_pli_ GUARDED_BY(&crit_);
1143 } test(rtp_history_ms); 1163 } test(rtp_history_ms);
1144 1164
1145 RunBaseTest(&test); 1165 RunBaseTest(&test);
1146 } 1166 }
1147 1167
1148 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { 1168 TEST_P(EndToEndTest, ReceivesPliAndRecoversWithNack) {
1149 ReceivesPliAndRecovers(1000); 1169 ReceivesPliAndRecovers(1000);
1150 } 1170 }
1151 1171
1152 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { 1172 TEST_P(EndToEndTest, ReceivesPliAndRecoversWithoutNack) {
1173 // This test makes no sense for the new video jitter buffer.
1174 if (GetParam() == "WebRTC-NewVideoJitterBuffer/Enabled/")
1175 return;
1153 ReceivesPliAndRecovers(0); 1176 ReceivesPliAndRecovers(0);
1154 } 1177 }
1155 1178
1156 TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { 1179 TEST_P(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
1157 class PacketInputObserver : public PacketReceiver { 1180 class PacketInputObserver : public PacketReceiver {
1158 public: 1181 public:
1159 explicit PacketInputObserver(PacketReceiver* receiver) 1182 explicit PacketInputObserver(PacketReceiver* receiver)
1160 : receiver_(receiver), delivered_packet_(false, false) {} 1183 : receiver_(receiver), delivered_packet_(false, false) {}
1161 1184
1162 bool Wait() { return delivered_packet_.Wait(kDefaultTimeoutMs); } 1185 bool Wait() { return delivered_packet_.Wait(kDefaultTimeoutMs); }
1163 1186
1164 private: 1187 private:
1165 DeliveryStatus DeliverPacket(MediaType media_type, 1188 DeliveryStatus DeliverPacket(MediaType media_type,
1166 const uint8_t* packet, 1189 const uint8_t* packet,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 } 1301 }
1279 1302
1280 RtcpMode rtcp_mode_; 1303 RtcpMode rtcp_mode_;
1281 int sent_rtp_; 1304 int sent_rtp_;
1282 int sent_rtcp_; 1305 int sent_rtcp_;
1283 } test(rtcp_mode); 1306 } test(rtcp_mode);
1284 1307
1285 RunBaseTest(&test); 1308 RunBaseTest(&test);
1286 } 1309 }
1287 1310
1288 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { 1311 TEST_P(EndToEndTest, UsesRtcpCompoundMode) {
1289 RespectsRtcpMode(RtcpMode::kCompound); 1312 RespectsRtcpMode(RtcpMode::kCompound);
1290 } 1313 }
1291 1314
1292 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { 1315 TEST_P(EndToEndTest, UsesRtcpReducedSizeMode) {
1293 RespectsRtcpMode(RtcpMode::kReducedSize); 1316 RespectsRtcpMode(RtcpMode::kReducedSize);
1294 } 1317 }
1295 1318
1296 // Test sets up a Call multiple senders with different resolutions and SSRCs. 1319 // Test sets up a Call multiple senders with different resolutions and SSRCs.
1297 // Another is set up to receive all three of these with different renderers. 1320 // Another is set up to receive all three of these with different renderers.
1298 class MultiStreamTest { 1321 class MultiStreamTest {
1299 public: 1322 public:
1300 static const size_t kNumStreams = 3; 1323 static const size_t kNumStreams = 3;
1301 struct CodecSettings { 1324 struct CodecSettings {
1302 uint32_t ssrc; 1325 uint32_t ssrc;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1406 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { 1429 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) {
1407 return new test::DirectTransport(sender_call); 1430 return new test::DirectTransport(sender_call);
1408 } 1431 }
1409 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { 1432 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) {
1410 return new test::DirectTransport(receiver_call); 1433 return new test::DirectTransport(receiver_call);
1411 } 1434 }
1412 }; 1435 };
1413 1436
1414 // Each renderer verifies that it receives the expected resolution, and as soon 1437 // Each renderer verifies that it receives the expected resolution, and as soon
1415 // as every renderer has received a frame, the test finishes. 1438 // as every renderer has received a frame, the test finishes.
1416 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { 1439 TEST_P(EndToEndTest, SendsAndReceivesMultipleStreams) {
1417 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { 1440 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> {
1418 public: 1441 public:
1419 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, 1442 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings,
1420 uint32_t ssrc, 1443 uint32_t ssrc,
1421 test::FrameGeneratorCapturer** frame_generator) 1444 test::FrameGeneratorCapturer** frame_generator)
1422 : settings_(settings), 1445 : settings_(settings),
1423 ssrc_(ssrc), 1446 ssrc_(ssrc),
1424 frame_generator_(frame_generator), 1447 frame_generator_(frame_generator),
1425 done_(false, false) {} 1448 done_(false, false) {}
1426 1449
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 receive_config->renderer = observers_[stream_index].get(); 1494 receive_config->renderer = observers_[stream_index].get();
1472 } 1495 }
1473 1496
1474 private: 1497 private:
1475 std::unique_ptr<VideoOutputObserver> observers_[kNumStreams]; 1498 std::unique_ptr<VideoOutputObserver> observers_[kNumStreams];
1476 } tester; 1499 } tester;
1477 1500
1478 tester.RunTest(); 1501 tester.RunTest();
1479 } 1502 }
1480 1503
1481 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { 1504 TEST_P(EndToEndTest, AssignsTransportSequenceNumbers) {
1482 static const int kExtensionId = 5; 1505 static const int kExtensionId = 5;
1483 1506
1484 class RtpExtensionHeaderObserver : public test::DirectTransport { 1507 class RtpExtensionHeaderObserver : public test::DirectTransport {
1485 public: 1508 public:
1486 RtpExtensionHeaderObserver(Call* sender_call, 1509 RtpExtensionHeaderObserver(Call* sender_call,
1487 const uint32_t& first_media_ssrc, 1510 const uint32_t& first_media_ssrc,
1488 const std::map<uint32_t, uint32_t>& ssrc_map) 1511 const std::map<uint32_t, uint32_t>& ssrc_map)
1489 : DirectTransport(sender_call), 1512 : DirectTransport(sender_call),
1490 done_(false, false), 1513 done_(false, false),
1491 parser_(RtpHeaderParser::Create()), 1514 parser_(RtpHeaderParser::Create()),
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 } 1761 }
1739 1762
1740 private: 1763 private:
1741 static const int kExtensionId = 5; 1764 static const int kExtensionId = 5;
1742 const bool feedback_enabled_; 1765 const bool feedback_enabled_;
1743 const size_t num_video_streams_; 1766 const size_t num_video_streams_;
1744 const size_t num_audio_streams_; 1767 const size_t num_audio_streams_;
1745 Call* receiver_call_; 1768 Call* receiver_call_;
1746 }; 1769 };
1747 1770
1748 TEST_F(EndToEndTest, VideoReceivesTransportFeedback) { 1771 TEST_P(EndToEndTest, VideoReceivesTransportFeedback) {
1749 TransportFeedbackTester test(true, 1, 0); 1772 TransportFeedbackTester test(true, 1, 0);
1750 RunBaseTest(&test); 1773 RunBaseTest(&test);
1751 } 1774 }
1752 1775
1753 TEST_F(EndToEndTest, VideoTransportFeedbackNotConfigured) { 1776 TEST_P(EndToEndTest, VideoTransportFeedbackNotConfigured) {
1754 TransportFeedbackTester test(false, 1, 0); 1777 TransportFeedbackTester test(false, 1, 0);
1755 RunBaseTest(&test); 1778 RunBaseTest(&test);
1756 } 1779 }
1757 1780
1758 TEST_F(EndToEndTest, AudioReceivesTransportFeedback) { 1781 TEST_P(EndToEndTest, AudioReceivesTransportFeedback) {
1759 TransportFeedbackTester test(true, 0, 1); 1782 TransportFeedbackTester test(true, 0, 1);
1760 RunBaseTest(&test); 1783 RunBaseTest(&test);
1761 } 1784 }
1762 1785
1763 TEST_F(EndToEndTest, AudioTransportFeedbackNotConfigured) { 1786 TEST_P(EndToEndTest, AudioTransportFeedbackNotConfigured) {
1764 TransportFeedbackTester test(false, 0, 1); 1787 TransportFeedbackTester test(false, 0, 1);
1765 RunBaseTest(&test); 1788 RunBaseTest(&test);
1766 } 1789 }
1767 1790
1768 TEST_F(EndToEndTest, AudioVideoReceivesTransportFeedback) { 1791 TEST_P(EndToEndTest, AudioVideoReceivesTransportFeedback) {
1769 TransportFeedbackTester test(true, 1, 1); 1792 TransportFeedbackTester test(true, 1, 1);
1770 RunBaseTest(&test); 1793 RunBaseTest(&test);
1771 } 1794 }
1772 1795
1773 TEST_F(EndToEndTest, ObserversEncodedFrames) { 1796 TEST_P(EndToEndTest, ObserversEncodedFrames) {
1774 class EncodedFrameTestObserver : public EncodedFrameObserver { 1797 class EncodedFrameTestObserver : public EncodedFrameObserver {
1775 public: 1798 public:
1776 EncodedFrameTestObserver() 1799 EncodedFrameTestObserver()
1777 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {} 1800 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {}
1778 virtual ~EncodedFrameTestObserver() {} 1801 virtual ~EncodedFrameTestObserver() {}
1779 1802
1780 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { 1803 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) {
1781 frame_type_ = encoded_frame.frame_type_; 1804 frame_type_ = encoded_frame.frame_type_;
1782 length_ = encoded_frame.length_; 1805 length_ = encoded_frame.length_;
1783 buffer_.reset(new uint8_t[length_]); 1806 buffer_.reset(new uint8_t[length_]);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1838 post_encode_observer.ExpectEqualFrames(pre_decode_observer); 1861 post_encode_observer.ExpectEqualFrames(pre_decode_observer);
1839 1862
1840 Stop(); 1863 Stop();
1841 1864
1842 sender_transport.StopSending(); 1865 sender_transport.StopSending();
1843 receiver_transport.StopSending(); 1866 receiver_transport.StopSending();
1844 1867
1845 DestroyStreams(); 1868 DestroyStreams();
1846 } 1869 }
1847 1870
1848 TEST_F(EndToEndTest, ReceiveStreamSendsRemb) { 1871 TEST_P(EndToEndTest, ReceiveStreamSendsRemb) {
1849 class RembObserver : public test::EndToEndTest { 1872 class RembObserver : public test::EndToEndTest {
1850 public: 1873 public:
1851 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} 1874 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {}
1852 1875
1853 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 1876 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
1854 test::RtcpPacketParser parser; 1877 test::RtcpPacketParser parser;
1855 EXPECT_TRUE(parser.Parse(packet, length)); 1878 EXPECT_TRUE(parser.Parse(packet, length));
1856 1879
1857 if (parser.remb()->num_packets() > 0) { 1880 if (parser.remb()->num_packets() > 0) {
1858 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.remb()->sender_ssrc()); 1881 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.remb()->sender_ssrc());
1859 EXPECT_LT(0U, parser.remb()->bitrate_bps()); 1882 EXPECT_LT(0U, parser.remb()->bitrate_bps());
1860 EXPECT_EQ(1U, parser.remb()->ssrcs().size()); 1883 EXPECT_EQ(1U, parser.remb()->ssrcs().size());
1861 EXPECT_EQ(kVideoSendSsrcs[0], parser.remb()->ssrcs()[0]); 1884 EXPECT_EQ(kVideoSendSsrcs[0], parser.remb()->ssrcs()[0]);
1862 observation_complete_.Set(); 1885 observation_complete_.Set();
1863 } 1886 }
1864 1887
1865 return SEND_PACKET; 1888 return SEND_PACKET;
1866 } 1889 }
1867 void PerformTest() override { 1890 void PerformTest() override {
1868 EXPECT_TRUE(Wait()) << "Timed out while waiting for a " 1891 EXPECT_TRUE(Wait()) << "Timed out while waiting for a "
1869 "receiver RTCP REMB packet to be " 1892 "receiver RTCP REMB packet to be "
1870 "sent."; 1893 "sent.";
1871 } 1894 }
1872 } test; 1895 } test;
1873 1896
1874 RunBaseTest(&test); 1897 RunBaseTest(&test);
1875 } 1898 }
1876 1899
1877 TEST_F(EndToEndTest, VerifyBandwidthStats) { 1900 TEST_P(EndToEndTest, VerifyBandwidthStats) {
1878 class RtcpObserver : public test::EndToEndTest { 1901 class RtcpObserver : public test::EndToEndTest {
1879 public: 1902 public:
1880 RtcpObserver() 1903 RtcpObserver()
1881 : EndToEndTest(kDefaultTimeoutMs), 1904 : EndToEndTest(kDefaultTimeoutMs),
1882 sender_call_(nullptr), 1905 sender_call_(nullptr),
1883 receiver_call_(nullptr), 1906 receiver_call_(nullptr),
1884 has_seen_pacer_delay_(false) {} 1907 has_seen_pacer_delay_(false) {}
1885 1908
1886 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1909 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1887 Call::Stats sender_stats = sender_call_->GetStats(); 1910 Call::Stats sender_stats = sender_call_->GetStats();
(...skipping 25 matching lines...) Expand all
1913 1936
1914 RunBaseTest(&test); 1937 RunBaseTest(&test);
1915 } 1938 }
1916 1939
1917 1940
1918 // Verifies that it's possible to limit the send BWE by sending a REMB. 1941 // Verifies that it's possible to limit the send BWE by sending a REMB.
1919 // This is verified by allowing the send BWE to ramp-up to >1000 kbps, 1942 // This is verified by allowing the send BWE to ramp-up to >1000 kbps,
1920 // then have the test generate a REMB of 500 kbps and verify that the send BWE 1943 // then have the test generate a REMB of 500 kbps and verify that the send BWE
1921 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the 1944 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the
1922 // test verifies that the send BWE ramps back up to exactly 1000 kbps. 1945 // test verifies that the send BWE ramps back up to exactly 1000 kbps.
1923 TEST_F(EndToEndTest, RembWithSendSideBwe) { 1946 TEST_P(EndToEndTest, RembWithSendSideBwe) {
1924 class BweObserver : public test::EndToEndTest { 1947 class BweObserver : public test::EndToEndTest {
1925 public: 1948 public:
1926 BweObserver() 1949 BweObserver()
1927 : EndToEndTest(kDefaultTimeoutMs), 1950 : EndToEndTest(kDefaultTimeoutMs),
1928 sender_call_(nullptr), 1951 sender_call_(nullptr),
1929 clock_(Clock::GetRealTimeClock()), 1952 clock_(Clock::GetRealTimeClock()),
1930 sender_ssrc_(0), 1953 sender_ssrc_(0),
1931 remb_bitrate_bps_(1000000), 1954 remb_bitrate_bps_(1000000),
1932 receive_transport_(nullptr), 1955 receive_transport_(nullptr),
1933 event_(false, false), 1956 event_(false, false),
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
2046 test::PacketTransport* receive_transport_; 2069 test::PacketTransport* receive_transport_;
2047 rtc::Event event_; 2070 rtc::Event event_;
2048 rtc::PlatformThread poller_thread_; 2071 rtc::PlatformThread poller_thread_;
2049 TestState state_; 2072 TestState state_;
2050 RateLimiter retransmission_rate_limiter_; 2073 RateLimiter retransmission_rate_limiter_;
2051 } test; 2074 } test;
2052 2075
2053 RunBaseTest(&test); 2076 RunBaseTest(&test);
2054 } 2077 }
2055 2078
2056 TEST_F(EndToEndTest, VerifyNackStats) { 2079 TEST_P(EndToEndTest, VerifyNackStats) {
2057 static const int kPacketNumberToDrop = 200; 2080 static const int kPacketNumberToDrop = 200;
2058 class NackObserver : public test::EndToEndTest { 2081 class NackObserver : public test::EndToEndTest {
2059 public: 2082 public:
2060 NackObserver() 2083 NackObserver()
2061 : EndToEndTest(kLongTimeoutMs), 2084 : EndToEndTest(kLongTimeoutMs),
2062 sent_rtp_packets_(0), 2085 sent_rtp_packets_(0),
2063 dropped_rtp_packet_(0), 2086 dropped_rtp_packet_(0),
2064 dropped_rtp_packet_requested_(false), 2087 dropped_rtp_packet_requested_(false),
2065 send_stream_(nullptr), 2088 send_stream_(nullptr),
2066 start_runtime_ms_(-1) {} 2089 start_runtime_ms_(-1) {}
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
2378 2401
2379 int num_red_samples = use_red ? 1 : 0; 2402 int num_red_samples = use_red ? 1 : 0;
2380 EXPECT_EQ(num_red_samples, 2403 EXPECT_EQ(num_red_samples,
2381 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); 2404 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps"));
2382 EXPECT_EQ(num_red_samples, 2405 EXPECT_EQ(num_red_samples,
2383 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps")); 2406 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps"));
2384 EXPECT_EQ(num_red_samples, 2407 EXPECT_EQ(num_red_samples,
2385 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent")); 2408 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent"));
2386 } 2409 }
2387 2410
2388 TEST_F(EndToEndTest, VerifyHistogramStatsWithRtx) { 2411 TEST_P(EndToEndTest, VerifyHistogramStatsWithRtx) {
2389 const bool kEnabledRtx = true; 2412 const bool kEnabledRtx = true;
2390 const bool kEnabledRed = false; 2413 const bool kEnabledRed = false;
2391 const bool kScreenshare = false; 2414 const bool kScreenshare = false;
2392 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); 2415 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare);
2393 } 2416 }
2394 2417
2395 TEST_F(EndToEndTest, VerifyHistogramStatsWithRed) { 2418 TEST_P(EndToEndTest, VerifyHistogramStatsWithRed) {
2396 const bool kEnabledRtx = false; 2419 const bool kEnabledRtx = false;
2397 const bool kEnabledRed = true; 2420 const bool kEnabledRed = true;
2398 const bool kScreenshare = false; 2421 const bool kScreenshare = false;
2399 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); 2422 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare);
2400 } 2423 }
2401 2424
2402 TEST_F(EndToEndTest, VerifyHistogramStatsWithScreenshare) { 2425 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) {
2403 const bool kEnabledRtx = false; 2426 const bool kEnabledRtx = false;
2404 const bool kEnabledRed = false; 2427 const bool kEnabledRed = false;
2405 const bool kScreenshare = true; 2428 const bool kScreenshare = true;
2406 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); 2429 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare);
2407 } 2430 }
2408 2431
2409 void EndToEndTest::TestXrReceiverReferenceTimeReport(bool enable_rrtr) { 2432 void EndToEndTest::TestXrReceiverReferenceTimeReport(bool enable_rrtr) {
2410 static const int kNumRtcpReportPacketsToObserve = 5; 2433 static const int kNumRtcpReportPacketsToObserve = 5;
2411 class RtcpXrObserver : public test::EndToEndTest { 2434 class RtcpXrObserver : public test::EndToEndTest {
2412 public: 2435 public:
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 size_t ssrcs_to_observe_; 2623 size_t ssrcs_to_observe_;
2601 bool expect_single_ssrc_; 2624 bool expect_single_ssrc_;
2602 2625
2603 VideoSendStream* send_stream_; 2626 VideoSendStream* send_stream_;
2604 VideoEncoderConfig video_encoder_config_all_streams_; 2627 VideoEncoderConfig video_encoder_config_all_streams_;
2605 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first); 2628 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first);
2606 2629
2607 RunBaseTest(&test); 2630 RunBaseTest(&test);
2608 } 2631 }
2609 2632
2610 TEST_F(EndToEndTest, ReportsSetEncoderRates) { 2633 TEST_P(EndToEndTest, ReportsSetEncoderRates) {
2611 class EncoderRateStatsTest : public test::EndToEndTest, 2634 class EncoderRateStatsTest : public test::EndToEndTest,
2612 public test::FakeEncoder { 2635 public test::FakeEncoder {
2613 public: 2636 public:
2614 EncoderRateStatsTest() 2637 EncoderRateStatsTest()
2615 : EndToEndTest(kDefaultTimeoutMs), 2638 : EndToEndTest(kDefaultTimeoutMs),
2616 FakeEncoder(Clock::GetRealTimeClock()), 2639 FakeEncoder(Clock::GetRealTimeClock()),
2617 send_stream_(nullptr), 2640 send_stream_(nullptr),
2618 bitrate_kbps_(0) {} 2641 bitrate_kbps_(0) {}
2619 2642
2620 void OnVideoStreamsCreated( 2643 void OnVideoStreamsCreated(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2680 2703
2681 private: 2704 private:
2682 rtc::CriticalSection crit_; 2705 rtc::CriticalSection crit_;
2683 VideoSendStream* send_stream_; 2706 VideoSendStream* send_stream_;
2684 uint32_t bitrate_kbps_ GUARDED_BY(crit_); 2707 uint32_t bitrate_kbps_ GUARDED_BY(crit_);
2685 } test; 2708 } test;
2686 2709
2687 RunBaseTest(&test); 2710 RunBaseTest(&test);
2688 } 2711 }
2689 2712
2690 TEST_F(EndToEndTest, GetStats) { 2713 TEST_P(EndToEndTest, GetStats) {
2691 static const int kStartBitrateBps = 3000000; 2714 static const int kStartBitrateBps = 3000000;
2692 static const int kExpectedRenderDelayMs = 20; 2715 static const int kExpectedRenderDelayMs = 20;
2693 2716
2694 class ReceiveStreamRenderer : public rtc::VideoSinkInterface<VideoFrame> { 2717 class ReceiveStreamRenderer : public rtc::VideoSinkInterface<VideoFrame> {
2695 public: 2718 public:
2696 ReceiveStreamRenderer() {} 2719 ReceiveStreamRenderer() {}
2697 2720
2698 private: 2721 private:
2699 void OnFrame(const VideoFrame& video_frame) override {} 2722 void OnFrame(const VideoFrame& video_frame) override {}
2700 }; 2723 };
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
3021 std::map<std::string, bool> send_stats_filled_; 3044 std::map<std::string, bool> send_stats_filled_;
3022 3045
3023 std::vector<uint32_t> expected_receive_ssrcs_; 3046 std::vector<uint32_t> expected_receive_ssrcs_;
3024 std::set<uint32_t> expected_send_ssrcs_; 3047 std::set<uint32_t> expected_send_ssrcs_;
3025 std::string expected_cname_; 3048 std::string expected_cname_;
3026 3049
3027 rtc::Event check_stats_event_; 3050 rtc::Event check_stats_event_;
3028 ReceiveStreamRenderer receive_stream_renderer_; 3051 ReceiveStreamRenderer receive_stream_renderer_;
3029 } test; 3052 } test;
3030 3053
3054 // TODO(philipel): Implement statistics for the new video jitter buffer.
3055 if (GetParam() == "WebRTC-NewVideoJitterBuffer/Enabled/")
3056 return;
3057
3031 RunBaseTest(&test); 3058 RunBaseTest(&test);
3032 } 3059 }
3033 3060
3034 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) { 3061 TEST_P(EndToEndTest, ReceiverReferenceTimeReportEnabled) {
3035 TestXrReceiverReferenceTimeReport(true); 3062 TestXrReceiverReferenceTimeReport(true);
3036 } 3063 }
3037 3064
3038 TEST_F(EndToEndTest, ReceiverReferenceTimeReportDisabled) { 3065 TEST_P(EndToEndTest, ReceiverReferenceTimeReportDisabled) {
3039 TestXrReceiverReferenceTimeReport(false); 3066 TestXrReceiverReferenceTimeReport(false);
3040 } 3067 }
3041 3068
3042 TEST_F(EndToEndTest, TestReceivedRtpPacketStats) { 3069 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) {
3043 static const size_t kNumRtpPacketsToSend = 5; 3070 static const size_t kNumRtpPacketsToSend = 5;
3044 class ReceivedRtpStatsObserver : public test::EndToEndTest { 3071 class ReceivedRtpStatsObserver : public test::EndToEndTest {
3045 public: 3072 public:
3046 ReceivedRtpStatsObserver() 3073 ReceivedRtpStatsObserver()
3047 : EndToEndTest(kDefaultTimeoutMs), 3074 : EndToEndTest(kDefaultTimeoutMs),
3048 receive_stream_(nullptr), 3075 receive_stream_(nullptr),
3049 sent_rtp_(0) {} 3076 sent_rtp_(0) {}
3050 3077
3051 private: 3078 private:
3052 void OnVideoStreamsCreated( 3079 void OnVideoStreamsCreated(
(...skipping 19 matching lines...) Expand all
3072 << "Timed out while verifying number of received RTP packets."; 3099 << "Timed out while verifying number of received RTP packets.";
3073 } 3100 }
3074 3101
3075 VideoReceiveStream* receive_stream_; 3102 VideoReceiveStream* receive_stream_;
3076 uint32_t sent_rtp_; 3103 uint32_t sent_rtp_;
3077 } test; 3104 } test;
3078 3105
3079 RunBaseTest(&test); 3106 RunBaseTest(&test);
3080 } 3107 }
3081 3108
3082 TEST_F(EndToEndTest, SendsSetSsrc) { TestSendsSetSsrcs(1, false); } 3109 TEST_P(EndToEndTest, SendsSetSsrc) {
3110 TestSendsSetSsrcs(1, false);
3111 }
3083 3112
3084 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) { 3113 TEST_P(EndToEndTest, SendsSetSimulcastSsrcs) {
3085 TestSendsSetSsrcs(kNumSsrcs, false); 3114 TestSendsSetSsrcs(kNumSsrcs, false);
3086 } 3115 }
3087 3116
3088 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) { 3117 TEST_P(EndToEndTest, CanSwitchToUseAllSsrcs) {
3089 TestSendsSetSsrcs(kNumSsrcs, true); 3118 TestSendsSetSsrcs(kNumSsrcs, true);
3090 } 3119 }
3091 3120
3092 TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { 3121 TEST_P(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) {
3093 class ObserveRedundantPayloads: public test::EndToEndTest { 3122 class ObserveRedundantPayloads: public test::EndToEndTest {
3094 public: 3123 public:
3095 ObserveRedundantPayloads() 3124 ObserveRedundantPayloads()
3096 : EndToEndTest(kDefaultTimeoutMs), ssrcs_to_observe_(kNumSsrcs) { 3125 : EndToEndTest(kDefaultTimeoutMs), ssrcs_to_observe_(kNumSsrcs) {
3097 for (size_t i = 0; i < kNumSsrcs; ++i) { 3126 for (size_t i = 0; i < kNumSsrcs; ++i) {
3098 registered_rtx_ssrc_[kSendRtxSsrcs[i]] = true; 3127 registered_rtx_ssrc_[kSendRtxSsrcs[i]] = true;
3099 } 3128 }
3100 } 3129 }
3101 3130
3102 private: 3131 private:
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
3416 << "Timed out waiting for all SSRCs to send packets."; 3445 << "Timed out waiting for all SSRCs to send packets.";
3417 } 3446 }
3418 3447
3419 send_transport.StopSending(); 3448 send_transport.StopSending();
3420 receive_transport.StopSending(); 3449 receive_transport.StopSending();
3421 3450
3422 Stop(); 3451 Stop();
3423 DestroyStreams(); 3452 DestroyStreams();
3424 } 3453 }
3425 3454
3426 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpState) { 3455 TEST_P(EndToEndTest, RestartingSendStreamPreservesRtpState) {
3427 TestRtpStatePreservation(false, false); 3456 TestRtpStatePreservation(false, false);
3428 } 3457 }
3429 3458
3430 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) { 3459 TEST_P(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) {
3431 TestRtpStatePreservation(true, false); 3460 TestRtpStatePreservation(true, false);
3432 } 3461 }
3433 3462
3434 TEST_F(EndToEndTest, RestartingSendStreamKeepsRtpAndRtcpTimestampsSynced) { 3463 TEST_P(EndToEndTest, RestartingSendStreamKeepsRtpAndRtcpTimestampsSynced) {
3435 TestRtpStatePreservation(true, true); 3464 TestRtpStatePreservation(true, true);
3436 } 3465 }
3437 3466
3438 TEST_F(EndToEndTest, RespectsNetworkState) { 3467 TEST_P(EndToEndTest, RespectsNetworkState) {
3439 // TODO(pbos): Remove accepted downtime packets etc. when signaling network 3468 // TODO(pbos): Remove accepted downtime packets etc. when signaling network
3440 // down blocks until no more packets will be sent. 3469 // down blocks until no more packets will be sent.
3441 3470
3442 // Pacer will send from its packet list and then send required padding before 3471 // Pacer will send from its packet list and then send required padding before
3443 // checking paused_ again. This should be enough for one round of pacing, 3472 // checking paused_ again. This should be enough for one round of pacing,
3444 // otherwise increase. 3473 // otherwise increase.
3445 static const int kNumAcceptedDowntimeRtp = 5; 3474 static const int kNumAcceptedDowntimeRtp = 5;
3446 // A single RTCP may be in the pipeline. 3475 // A single RTCP may be in the pipeline.
3447 static const int kNumAcceptedDowntimeRtcp = 1; 3476 static const int kNumAcceptedDowntimeRtcp = 1;
3448 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { 3477 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
3622 NetworkState sender_state_ GUARDED_BY(test_crit_); 3651 NetworkState sender_state_ GUARDED_BY(test_crit_);
3623 int sender_rtp_ GUARDED_BY(test_crit_); 3652 int sender_rtp_ GUARDED_BY(test_crit_);
3624 int sender_rtcp_ GUARDED_BY(test_crit_); 3653 int sender_rtcp_ GUARDED_BY(test_crit_);
3625 int receiver_rtcp_ GUARDED_BY(test_crit_); 3654 int receiver_rtcp_ GUARDED_BY(test_crit_);
3626 int down_frames_ GUARDED_BY(test_crit_); 3655 int down_frames_ GUARDED_BY(test_crit_);
3627 } test; 3656 } test;
3628 3657
3629 RunBaseTest(&test); 3658 RunBaseTest(&test);
3630 } 3659 }
3631 3660
3632 TEST_F(EndToEndTest, CallReportsRttForSender) { 3661 TEST_P(EndToEndTest, CallReportsRttForSender) {
3633 static const int kSendDelayMs = 30; 3662 static const int kSendDelayMs = 30;
3634 static const int kReceiveDelayMs = 70; 3663 static const int kReceiveDelayMs = 70;
3635 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); 3664 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_));
3636 3665
3637 FakeNetworkPipe::Config config; 3666 FakeNetworkPipe::Config config;
3638 config.queue_delay_ms = kSendDelayMs; 3667 config.queue_delay_ms = kSendDelayMs;
3639 test::DirectTransport sender_transport(config, sender_call_.get()); 3668 test::DirectTransport sender_transport(config, sender_call_.get());
3640 config.queue_delay_ms = kReceiveDelayMs; 3669 config.queue_delay_ms = kReceiveDelayMs;
3641 test::DirectTransport receiver_transport(config, receiver_call_.get()); 3670 test::DirectTransport receiver_transport(config, receiver_call_.get());
3642 sender_transport.SetReceiver(receiver_call_->Receiver()); 3671 sender_transport.SetReceiver(receiver_call_->Receiver());
(...skipping 16 matching lines...) Expand all
3659 if (stats.rtt_ms != -1) { 3688 if (stats.rtt_ms != -1) {
3660 // To avoid failures caused by rounding or minor ntp clock adjustments, 3689 // To avoid failures caused by rounding or minor ntp clock adjustments,
3661 // relax expectation by 1ms. 3690 // relax expectation by 1ms.
3662 constexpr int kAllowedErrorMs = 1; 3691 constexpr int kAllowedErrorMs = 1;
3663 EXPECT_GE(stats.rtt_ms, kSendDelayMs + kReceiveDelayMs - kAllowedErrorMs); 3692 EXPECT_GE(stats.rtt_ms, kSendDelayMs + kReceiveDelayMs - kAllowedErrorMs);
3664 break; 3693 break;
3665 } 3694 }
3666 SleepMs(10); 3695 SleepMs(10);
3667 } 3696 }
3668 3697
3698 sender_transport.StopSending();
3699 receiver_transport.StopSending();
3669 Stop(); 3700 Stop();
3670 DestroyStreams(); 3701 DestroyStreams();
3702 DestroyCalls();
3671 } 3703 }
3672 3704
3673 void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState( 3705 void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState(
3674 MediaType network_to_bring_up, 3706 MediaType network_to_bring_up,
3675 VideoEncoder* encoder, 3707 VideoEncoder* encoder,
3676 Transport* transport) { 3708 Transport* transport) {
3677 CreateSenderCall(Call::Config(&event_log_)); 3709 CreateSenderCall(Call::Config(&event_log_));
3678 sender_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp); 3710 sender_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
3679 3711
3680 CreateSendConfig(1, 0, 0, transport); 3712 CreateSendConfig(1, 0, 0, transport);
(...skipping 26 matching lines...) Expand all
3707 3739
3708 Start(); 3740 Start();
3709 SleepMs(kSilenceTimeoutMs); 3741 SleepMs(kSilenceTimeoutMs);
3710 Stop(); 3742 Stop();
3711 3743
3712 sender_transport.StopSending(); 3744 sender_transport.StopSending();
3713 3745
3714 DestroyStreams(); 3746 DestroyStreams();
3715 } 3747 }
3716 3748
3717 TEST_F(EndToEndTest, NewVideoSendStreamsRespectVideoNetworkDown) { 3749 TEST_P(EndToEndTest, NewVideoSendStreamsRespectVideoNetworkDown) {
3718 class UnusedEncoder : public test::FakeEncoder { 3750 class UnusedEncoder : public test::FakeEncoder {
3719 public: 3751 public:
3720 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {} 3752 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {}
3721 3753
3722 int32_t InitEncode(const VideoCodec* config, 3754 int32_t InitEncode(const VideoCodec* config,
3723 int32_t number_of_cores, 3755 int32_t number_of_cores,
3724 size_t max_payload_size) override { 3756 size_t max_payload_size) override {
3725 EXPECT_GT(config->startBitrate, 0u); 3757 EXPECT_GT(config->startBitrate, 0u);
3726 return 0; 3758 return 0;
3727 } 3759 }
3728 int32_t Encode(const VideoFrame& input_image, 3760 int32_t Encode(const VideoFrame& input_image,
3729 const CodecSpecificInfo* codec_specific_info, 3761 const CodecSpecificInfo* codec_specific_info,
3730 const std::vector<FrameType>* frame_types) override { 3762 const std::vector<FrameType>* frame_types) override {
3731 ADD_FAILURE() << "Unexpected frame encode."; 3763 ADD_FAILURE() << "Unexpected frame encode.";
3732 return test::FakeEncoder::Encode(input_image, codec_specific_info, 3764 return test::FakeEncoder::Encode(input_image, codec_specific_info,
3733 frame_types); 3765 frame_types);
3734 } 3766 }
3735 }; 3767 };
3736 3768
3737 UnusedEncoder unused_encoder; 3769 UnusedEncoder unused_encoder;
3738 UnusedTransport unused_transport; 3770 UnusedTransport unused_transport;
3739 VerifyNewVideoSendStreamsRespectNetworkState( 3771 VerifyNewVideoSendStreamsRespectNetworkState(
3740 MediaType::AUDIO, &unused_encoder, &unused_transport); 3772 MediaType::AUDIO, &unused_encoder, &unused_transport);
3741 } 3773 }
3742 3774
3743 TEST_F(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) { 3775 TEST_P(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) {
3744 class RequiredEncoder : public test::FakeEncoder { 3776 class RequiredEncoder : public test::FakeEncoder {
3745 public: 3777 public:
3746 RequiredEncoder() 3778 RequiredEncoder()
3747 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {} 3779 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {}
3748 ~RequiredEncoder() { 3780 ~RequiredEncoder() {
3749 if (!encoded_frame_) { 3781 if (!encoded_frame_) {
3750 ADD_FAILURE() << "Didn't encode an expected frame"; 3782 ADD_FAILURE() << "Didn't encode an expected frame";
3751 } 3783 }
3752 } 3784 }
3753 int32_t Encode(const VideoFrame& input_image, 3785 int32_t Encode(const VideoFrame& input_image,
3754 const CodecSpecificInfo* codec_specific_info, 3786 const CodecSpecificInfo* codec_specific_info,
3755 const std::vector<FrameType>* frame_types) override { 3787 const std::vector<FrameType>* frame_types) override {
3756 encoded_frame_ = true; 3788 encoded_frame_ = true;
3757 return test::FakeEncoder::Encode(input_image, codec_specific_info, 3789 return test::FakeEncoder::Encode(input_image, codec_specific_info,
3758 frame_types); 3790 frame_types);
3759 } 3791 }
3760 3792
3761 private: 3793 private:
3762 bool encoded_frame_; 3794 bool encoded_frame_;
3763 }; 3795 };
3764 3796
3765 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/); 3797 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/);
3766 RequiredEncoder required_encoder; 3798 RequiredEncoder required_encoder;
3767 VerifyNewVideoSendStreamsRespectNetworkState( 3799 VerifyNewVideoSendStreamsRespectNetworkState(
3768 MediaType::VIDEO, &required_encoder, &required_transport); 3800 MediaType::VIDEO, &required_encoder, &required_transport);
3769 } 3801 }
3770 3802
3771 TEST_F(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) { 3803 TEST_P(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) {
3772 UnusedTransport transport; 3804 UnusedTransport transport;
3773 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport); 3805 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport);
3774 } 3806 }
3775 3807
3776 TEST_F(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) { 3808 TEST_P(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) {
3777 RequiredTransport transport(false /*rtp*/, true /*rtcp*/); 3809 RequiredTransport transport(false /*rtp*/, true /*rtcp*/);
3778 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport); 3810 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport);
3779 } 3811 }
3780 3812
3781 void VerifyEmptyNackConfig(const NackConfig& config) { 3813 void VerifyEmptyNackConfig(const NackConfig& config) {
3782 EXPECT_EQ(0, config.rtp_history_ms) 3814 EXPECT_EQ(0, config.rtp_history_ms)
3783 << "Enabling NACK requires rtcp-fb: nack negotiation."; 3815 << "Enabling NACK requires rtcp-fb: nack negotiation.";
3784 } 3816 }
3785 3817
3786 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) { 3818 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) {
3787 EXPECT_EQ(-1, config.ulpfec_payload_type) 3819 EXPECT_EQ(-1, config.ulpfec_payload_type)
3788 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; 3820 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation.";
3789 EXPECT_EQ(-1, config.red_payload_type) 3821 EXPECT_EQ(-1, config.red_payload_type)
3790 << "Enabling ULPFEC requires rtpmap: red negotiation."; 3822 << "Enabling ULPFEC requires rtpmap: red negotiation.";
3791 EXPECT_EQ(-1, config.red_rtx_payload_type) 3823 EXPECT_EQ(-1, config.red_rtx_payload_type)
3792 << "Enabling RTX in ULPFEC requires rtpmap: rtx negotiation."; 3824 << "Enabling RTX in ULPFEC requires rtpmap: rtx negotiation.";
3793 } 3825 }
3794 3826
3795 void VerifyEmptyFlexfecConfig(const FlexfecConfig& config) { 3827 void VerifyEmptyFlexfecConfig(const FlexfecConfig& config) {
3796 EXPECT_EQ(-1, config.flexfec_payload_type) 3828 EXPECT_EQ(-1, config.flexfec_payload_type)
3797 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; 3829 << "Enabling FlexFEC requires rtpmap: flexfec negotiation.";
3798 EXPECT_TRUE(config.protected_media_ssrcs.empty()) 3830 EXPECT_TRUE(config.protected_media_ssrcs.empty())
3799 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; 3831 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation.";
3800 } 3832 }
3801 3833
3802 TEST_F(EndToEndTest, VerifyDefaultSendConfigParameters) { 3834 TEST_P(EndToEndTest, VerifyDefaultSendConfigParameters) {
3803 VideoSendStream::Config default_send_config(nullptr); 3835 VideoSendStream::Config default_send_config(nullptr);
3804 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms) 3836 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms)
3805 << "Enabling NACK require rtcp-fb: nack negotiation."; 3837 << "Enabling NACK require rtcp-fb: nack negotiation.";
3806 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty()) 3838 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty())
3807 << "Enabling RTX requires rtpmap: rtx negotiation."; 3839 << "Enabling RTX requires rtpmap: rtx negotiation.";
3808 EXPECT_TRUE(default_send_config.rtp.extensions.empty()) 3840 EXPECT_TRUE(default_send_config.rtp.extensions.empty())
3809 << "Enabling RTP extensions require negotiation."; 3841 << "Enabling RTP extensions require negotiation.";
3810 3842
3811 VerifyEmptyNackConfig(default_send_config.rtp.nack); 3843 VerifyEmptyNackConfig(default_send_config.rtp.nack);
3812 VerifyEmptyUlpfecConfig(default_send_config.rtp.ulpfec); 3844 VerifyEmptyUlpfecConfig(default_send_config.rtp.ulpfec);
3813 VerifyEmptyFlexfecConfig(default_send_config.rtp.flexfec); 3845 VerifyEmptyFlexfecConfig(default_send_config.rtp.flexfec);
3814 } 3846 }
3815 3847
3816 TEST_F(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) { 3848 TEST_P(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) {
3817 VideoReceiveStream::Config default_receive_config(nullptr); 3849 VideoReceiveStream::Config default_receive_config(nullptr);
3818 EXPECT_EQ(RtcpMode::kCompound, default_receive_config.rtp.rtcp_mode) 3850 EXPECT_EQ(RtcpMode::kCompound, default_receive_config.rtp.rtcp_mode)
3819 << "Reduced-size RTCP require rtcp-rsize to be negotiated."; 3851 << "Reduced-size RTCP require rtcp-rsize to be negotiated.";
3820 EXPECT_FALSE(default_receive_config.rtp.remb) 3852 EXPECT_FALSE(default_receive_config.rtp.remb)
3821 << "REMB require rtcp-fb: goog-remb to be negotiated."; 3853 << "REMB require rtcp-fb: goog-remb to be negotiated.";
3822 EXPECT_FALSE( 3854 EXPECT_FALSE(
3823 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) 3855 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report)
3824 << "RTCP XR settings require rtcp-xr to be negotiated."; 3856 << "RTCP XR settings require rtcp-xr to be negotiated.";
3825 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3857 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3826 << "Enabling RTX requires rtpmap: rtx negotiation."; 3858 << "Enabling RTX requires rtpmap: rtx negotiation.";
3827 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3859 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3828 << "Enabling RTP extensions require negotiation."; 3860 << "Enabling RTP extensions require negotiation.";
3829 3861
3830 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3862 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3831 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); 3863 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec);
3832 } 3864 }
3833 3865
3834 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { 3866 TEST_P(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) {
3835 FlexfecReceiveStream::Config default_receive_config; 3867 FlexfecReceiveStream::Config default_receive_config;
3836 VerifyEmptyFlexfecConfig(default_receive_config); 3868 VerifyEmptyFlexfecConfig(default_receive_config);
3837 } 3869 }
3838 3870
3839 TEST_F(EndToEndTest, TransportSeqNumOnAudioAndVideo) { 3871 TEST_P(EndToEndTest, TransportSeqNumOnAudioAndVideo) {
3840 static const int kExtensionId = 8; 3872 static const int kExtensionId = 8;
3841 class TransportSequenceNumberTest : public test::EndToEndTest { 3873 class TransportSequenceNumberTest : public test::EndToEndTest {
3842 public: 3874 public:
3843 TransportSequenceNumberTest() 3875 TransportSequenceNumberTest()
3844 : EndToEndTest(kDefaultTimeoutMs), 3876 : EndToEndTest(kDefaultTimeoutMs),
3845 video_observed_(false), 3877 video_observed_(false),
3846 audio_observed_(false) { 3878 audio_observed_(false) {
3847 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, 3879 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber,
3848 kExtensionId); 3880 kExtensionId);
3849 } 3881 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3940 video_receive_streams_[0]->EnableEncodedFrameRecording( 3972 video_receive_streams_[0]->EnableEncodedFrameRecording(
3941 OpenFile(AddFile()), 0); 3973 OpenFile(AddFile()), 0);
3942 } else { 3974 } else {
3943 video_receive_streams_[0]->DisableEncodedFrameRecording(); 3975 video_receive_streams_[0]->DisableEncodedFrameRecording();
3944 } 3976 }
3945 } 3977 }
3946 3978
3947 std::vector<std::string> paths_; 3979 std::vector<std::string> paths_;
3948 }; 3980 };
3949 3981
3950 TEST_F(EndToEndLogTest, LogsEncodedFramesWhenRequested) { 3982 TEST_P(EndToEndLogTest, LogsEncodedFramesWhenRequested) {
3951 static const int kNumFramesToRecord = 10; 3983 static const int kNumFramesToRecord = 10;
3952 class LogEncodingObserver : public test::EndToEndTest, 3984 class LogEncodingObserver : public test::EndToEndTest,
3953 public EncodedFrameObserver { 3985 public EncodedFrameObserver {
3954 public: 3986 public:
3955 explicit LogEncodingObserver(EndToEndLogTest* fixture) 3987 explicit LogEncodingObserver(EndToEndLogTest* fixture)
3956 : EndToEndTest(kDefaultTimeoutMs), 3988 : EndToEndTest(kDefaultTimeoutMs),
3957 fixture_(fixture), 3989 fixture_(fixture),
3958 recorded_frames_(0) {} 3990 recorded_frames_(0) {}
3959 3991
3960 void PerformTest() override { 3992 void PerformTest() override {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
4003 std::unique_ptr<VideoEncoder> encoder_; 4035 std::unique_ptr<VideoEncoder> encoder_;
4004 std::unique_ptr<VideoDecoder> decoder_; 4036 std::unique_ptr<VideoDecoder> decoder_;
4005 rtc::CriticalSection crit_; 4037 rtc::CriticalSection crit_;
4006 int recorded_frames_ GUARDED_BY(crit_); 4038 int recorded_frames_ GUARDED_BY(crit_);
4007 } test(this); 4039 } test(this);
4008 4040
4009 RunBaseTest(&test); 4041 RunBaseTest(&test);
4010 } 4042 }
4011 4043
4012 } // namespace webrtc 4044 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/video_receiver.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698