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