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

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

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