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