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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 #include "webrtc/test/null_transport.h" | 51 #include "webrtc/test/null_transport.h" |
52 #include "webrtc/test/rtcp_packet_parser.h" | 52 #include "webrtc/test/rtcp_packet_parser.h" |
53 #include "webrtc/test/rtp_rtcp_observer.h" | 53 #include "webrtc/test/rtp_rtcp_observer.h" |
54 #include "webrtc/test/testsupport/fileutils.h" | 54 #include "webrtc/test/testsupport/fileutils.h" |
55 #include "webrtc/test/testsupport/perf_test.h" | 55 #include "webrtc/test/testsupport/perf_test.h" |
56 #include "webrtc/video/transport_adapter.h" | 56 #include "webrtc/video/transport_adapter.h" |
57 #include "webrtc/video_encoder.h" | 57 #include "webrtc/video_encoder.h" |
58 | 58 |
59 namespace webrtc { | 59 namespace webrtc { |
60 | 60 |
61 namespace { | |
62 const char new_jb_enabled[] = "WebRTC-NewVideoJitterBuffer/Enabled/"; | |
63 const char new_jb_disabled[] = "WebRTC-NewVideoJitterBuffer/Disabled/"; | |
64 } // anonymous namespace | |
65 | |
66 static const int kSilenceTimeoutMs = 2000; | 61 static const int kSilenceTimeoutMs = 2000; |
67 | 62 |
68 class EndToEndTest : public test::CallTest, | 63 class EndToEndTest : public test::CallTest { |
69 public ::testing::WithParamInterface<std::string> { | |
70 public: | 64 public: |
71 EndToEndTest() : scoped_field_trial_(GetParam()) {} | 65 EndToEndTest() {} |
72 | 66 |
73 virtual ~EndToEndTest() { | 67 virtual ~EndToEndTest() { |
74 EXPECT_EQ(nullptr, video_send_stream_); | 68 EXPECT_EQ(nullptr, video_send_stream_); |
75 EXPECT_TRUE(video_receive_streams_.empty()); | 69 EXPECT_TRUE(video_receive_streams_.empty()); |
76 } | 70 } |
77 | 71 |
78 protected: | 72 protected: |
79 class UnusedTransport : public Transport { | 73 class UnusedTransport : public Transport { |
80 private: | 74 private: |
81 bool SendRtp(const uint8_t* packet, | 75 bool SendRtp(const uint8_t* packet, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); | 123 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); |
130 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); | 124 void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp); |
131 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); | 125 void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare); |
132 void VerifyNewVideoSendStreamsRespectNetworkState( | 126 void VerifyNewVideoSendStreamsRespectNetworkState( |
133 MediaType network_to_bring_up, | 127 MediaType network_to_bring_up, |
134 VideoEncoder* encoder, | 128 VideoEncoder* encoder, |
135 Transport* transport); | 129 Transport* transport); |
136 void VerifyNewVideoReceiveStreamsRespectNetworkState( | 130 void VerifyNewVideoReceiveStreamsRespectNetworkState( |
137 MediaType network_to_bring_up, | 131 MediaType network_to_bring_up, |
138 Transport* transport); | 132 Transport* transport); |
139 test::ScopedFieldTrials scoped_field_trial_; | |
140 }; | 133 }; |
141 | 134 |
142 INSTANTIATE_TEST_CASE_P(TestWithNewVideoJitterBuffer, | 135 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { |
143 EndToEndTest, | |
144 ::testing::Values(new_jb_enabled, new_jb_disabled)); | |
145 | |
146 TEST_P(EndToEndTest, ReceiverCanBeStartedTwice) { | |
147 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); | 136 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); |
148 | 137 |
149 test::NullTransport transport; | 138 test::NullTransport transport; |
150 CreateSendConfig(1, 0, 0, &transport); | 139 CreateSendConfig(1, 0, 0, &transport); |
151 CreateMatchingReceiveConfigs(&transport); | 140 CreateMatchingReceiveConfigs(&transport); |
152 | 141 |
153 CreateVideoStreams(); | 142 CreateVideoStreams(); |
154 | 143 |
155 video_receive_streams_[0]->Start(); | 144 video_receive_streams_[0]->Start(); |
156 video_receive_streams_[0]->Start(); | 145 video_receive_streams_[0]->Start(); |
157 | 146 |
158 DestroyStreams(); | 147 DestroyStreams(); |
159 } | 148 } |
160 | 149 |
161 TEST_P(EndToEndTest, ReceiverCanBeStoppedTwice) { | 150 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { |
162 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); | 151 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); |
163 | 152 |
164 test::NullTransport transport; | 153 test::NullTransport transport; |
165 CreateSendConfig(1, 0, 0, &transport); | 154 CreateSendConfig(1, 0, 0, &transport); |
166 CreateMatchingReceiveConfigs(&transport); | 155 CreateMatchingReceiveConfigs(&transport); |
167 | 156 |
168 CreateVideoStreams(); | 157 CreateVideoStreams(); |
169 | 158 |
170 video_receive_streams_[0]->Stop(); | 159 video_receive_streams_[0]->Stop(); |
171 video_receive_streams_[0]->Stop(); | 160 video_receive_streams_[0]->Stop(); |
172 | 161 |
173 DestroyStreams(); | 162 DestroyStreams(); |
174 } | 163 } |
175 | 164 |
176 TEST_P(EndToEndTest, ReceiverCanBeStoppedAndRestarted) { | 165 TEST_F(EndToEndTest, ReceiverCanBeStoppedAndRestarted) { |
177 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); | 166 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); |
178 | 167 |
179 test::NullTransport transport; | 168 test::NullTransport transport; |
180 CreateSendConfig(1, 0, 0, &transport); | 169 CreateSendConfig(1, 0, 0, &transport); |
181 CreateMatchingReceiveConfigs(&transport); | 170 CreateMatchingReceiveConfigs(&transport); |
182 | 171 |
183 CreateVideoStreams(); | 172 CreateVideoStreams(); |
184 | 173 |
185 video_receive_streams_[0]->Stop(); | 174 video_receive_streams_[0]->Stop(); |
186 video_receive_streams_[0]->Start(); | 175 video_receive_streams_[0]->Start(); |
187 video_receive_streams_[0]->Stop(); | 176 video_receive_streams_[0]->Stop(); |
188 | 177 |
189 DestroyStreams(); | 178 DestroyStreams(); |
190 } | 179 } |
191 | 180 |
192 TEST_P(EndToEndTest, RendersSingleDelayedFrame) { | 181 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { |
193 static const int kWidth = 320; | 182 static const int kWidth = 320; |
194 static const int kHeight = 240; | 183 static const int kHeight = 240; |
195 // This constant is chosen to be higher than the timeout in the video_render | 184 // This constant is chosen to be higher than the timeout in the video_render |
196 // module. This makes sure that frames aren't dropped if there are no other | 185 // module. This makes sure that frames aren't dropped if there are no other |
197 // frames in the queue. | 186 // frames in the queue. |
198 static const int kRenderDelayMs = 1000; | 187 static const int kRenderDelayMs = 1000; |
199 | 188 |
200 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { | 189 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
201 public: | 190 public: |
202 Renderer() : event_(false, false) {} | 191 Renderer() : event_(false, false) {} |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 << "Timed out while waiting for the frame to render."; | 228 << "Timed out while waiting for the frame to render."; |
240 | 229 |
241 Stop(); | 230 Stop(); |
242 | 231 |
243 sender_transport.StopSending(); | 232 sender_transport.StopSending(); |
244 receiver_transport.StopSending(); | 233 receiver_transport.StopSending(); |
245 | 234 |
246 DestroyStreams(); | 235 DestroyStreams(); |
247 } | 236 } |
248 | 237 |
249 TEST_P(EndToEndTest, TransmitsFirstFrame) { | 238 TEST_F(EndToEndTest, TransmitsFirstFrame) { |
250 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { | 239 class Renderer : public rtc::VideoSinkInterface<VideoFrame> { |
251 public: | 240 public: |
252 Renderer() : event_(false, false) {} | 241 Renderer() : event_(false, false) {} |
253 | 242 |
254 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } | 243 void OnFrame(const VideoFrame& video_frame) override { event_.Set(); } |
255 | 244 |
256 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } | 245 bool Wait() { return event_.Wait(kDefaultTimeoutMs); } |
257 | 246 |
258 rtc::Event event_; | 247 rtc::Event event_; |
259 } renderer; | 248 } renderer; |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 | 333 |
345 private: | 334 private: |
346 int no_frames_to_wait_for_; | 335 int no_frames_to_wait_for_; |
347 VideoRotation expected_rotation_; | 336 VideoRotation expected_rotation_; |
348 std::string payload_name_; | 337 std::string payload_name_; |
349 std::unique_ptr<webrtc::VideoEncoder> encoder_; | 338 std::unique_ptr<webrtc::VideoEncoder> encoder_; |
350 std::unique_ptr<webrtc::VideoDecoder> decoder_; | 339 std::unique_ptr<webrtc::VideoDecoder> decoder_; |
351 int frame_counter_; | 340 int frame_counter_; |
352 }; | 341 }; |
353 | 342 |
354 TEST_P(EndToEndTest, SendsAndReceivesVP8) { | 343 TEST_F(EndToEndTest, SendsAndReceivesVP8) { |
355 CodecObserver test(5, kVideoRotation_0, "VP8", VP8Encoder::Create(), | 344 CodecObserver test(5, kVideoRotation_0, "VP8", VP8Encoder::Create(), |
356 VP8Decoder::Create()); | 345 VP8Decoder::Create()); |
357 RunBaseTest(&test); | 346 RunBaseTest(&test); |
358 } | 347 } |
359 | 348 |
360 TEST_P(EndToEndTest, SendsAndReceivesVP8Rotation90) { | 349 TEST_F(EndToEndTest, SendsAndReceivesVP8Rotation90) { |
361 CodecObserver test(5, kVideoRotation_90, "VP8", VP8Encoder::Create(), | 350 CodecObserver test(5, kVideoRotation_90, "VP8", VP8Encoder::Create(), |
362 VP8Decoder::Create()); | 351 VP8Decoder::Create()); |
363 RunBaseTest(&test); | 352 RunBaseTest(&test); |
364 } | 353 } |
365 | 354 |
366 #if !defined(RTC_DISABLE_VP9) | 355 #if !defined(RTC_DISABLE_VP9) |
367 TEST_P(EndToEndTest, SendsAndReceivesVP9) { | 356 TEST_F(EndToEndTest, SendsAndReceivesVP9) { |
368 CodecObserver test(500, kVideoRotation_0, "VP9", VP9Encoder::Create(), | 357 CodecObserver test(500, kVideoRotation_0, "VP9", VP9Encoder::Create(), |
369 VP9Decoder::Create()); | 358 VP9Decoder::Create()); |
370 RunBaseTest(&test); | 359 RunBaseTest(&test); |
371 } | 360 } |
372 | 361 |
373 TEST_P(EndToEndTest, SendsAndReceivesVP9VideoRotation90) { | 362 TEST_F(EndToEndTest, SendsAndReceivesVP9VideoRotation90) { |
374 CodecObserver test(5, kVideoRotation_90, "VP9", VP9Encoder::Create(), | 363 CodecObserver test(5, kVideoRotation_90, "VP9", VP9Encoder::Create(), |
375 VP9Decoder::Create()); | 364 VP9Decoder::Create()); |
376 RunBaseTest(&test); | 365 RunBaseTest(&test); |
377 } | 366 } |
378 #endif // !defined(RTC_DISABLE_VP9) | 367 #endif // !defined(RTC_DISABLE_VP9) |
379 | 368 |
380 #if defined(WEBRTC_USE_H264) | 369 #if defined(WEBRTC_USE_H264) |
381 TEST_P(EndToEndTest, SendsAndReceivesH264) { | 370 TEST_F(EndToEndTest, SendsAndReceivesH264) { |
382 CodecObserver test(500, kVideoRotation_0, "H264", | 371 CodecObserver test(500, kVideoRotation_0, "H264", |
383 H264Encoder::Create(cricket::VideoCodec("H264")), | 372 H264Encoder::Create(cricket::VideoCodec("H264")), |
384 H264Decoder::Create()); | 373 H264Decoder::Create()); |
385 RunBaseTest(&test); | 374 RunBaseTest(&test); |
386 } | 375 } |
387 | 376 |
388 TEST_P(EndToEndTest, SendsAndReceivesH264VideoRotation90) { | 377 TEST_F(EndToEndTest, SendsAndReceivesH264VideoRotation90) { |
389 CodecObserver test(5, kVideoRotation_90, "H264", | 378 CodecObserver test(5, kVideoRotation_90, "H264", |
390 H264Encoder::Create(cricket::VideoCodec("H264")), | 379 H264Encoder::Create(cricket::VideoCodec("H264")), |
391 H264Decoder::Create()); | 380 H264Decoder::Create()); |
392 RunBaseTest(&test); | 381 RunBaseTest(&test); |
393 } | 382 } |
394 | 383 |
395 TEST_P(EndToEndTest, SendsAndReceivesH264PacketizationMode0) { | 384 TEST_F(EndToEndTest, SendsAndReceivesH264PacketizationMode0) { |
396 cricket::VideoCodec codec = cricket::VideoCodec("H264"); | 385 cricket::VideoCodec codec = cricket::VideoCodec("H264"); |
397 codec.SetParam(cricket::kH264FmtpPacketizationMode, "0"); | 386 codec.SetParam(cricket::kH264FmtpPacketizationMode, "0"); |
398 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(codec), | 387 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(codec), |
399 H264Decoder::Create()); | 388 H264Decoder::Create()); |
400 RunBaseTest(&test); | 389 RunBaseTest(&test); |
401 } | 390 } |
402 | 391 |
403 TEST_P(EndToEndTest, SendsAndReceivesH264PacketizationMode1) { | 392 TEST_F(EndToEndTest, SendsAndReceivesH264PacketizationMode1) { |
404 cricket::VideoCodec codec = cricket::VideoCodec("H264"); | 393 cricket::VideoCodec codec = cricket::VideoCodec("H264"); |
405 codec.SetParam(cricket::kH264FmtpPacketizationMode, "1"); | 394 codec.SetParam(cricket::kH264FmtpPacketizationMode, "1"); |
406 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(codec), | 395 CodecObserver test(500, kVideoRotation_0, "H264", H264Encoder::Create(codec), |
407 H264Decoder::Create()); | 396 H264Decoder::Create()); |
408 RunBaseTest(&test); | 397 RunBaseTest(&test); |
409 } | 398 } |
410 | 399 |
411 #endif // defined(WEBRTC_USE_H264) | 400 #endif // defined(WEBRTC_USE_H264) |
412 | 401 |
413 TEST_P(EndToEndTest, ReceiverUsesLocalSsrc) { | 402 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { |
414 class SyncRtcpObserver : public test::EndToEndTest { | 403 class SyncRtcpObserver : public test::EndToEndTest { |
415 public: | 404 public: |
416 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 405 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
417 | 406 |
418 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { | 407 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { |
419 test::RtcpPacketParser parser; | 408 test::RtcpPacketParser parser; |
420 EXPECT_TRUE(parser.Parse(packet, length)); | 409 EXPECT_TRUE(parser.Parse(packet, length)); |
421 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.sender_ssrc()); | 410 EXPECT_EQ(kReceiverLocalVideoSsrc, parser.sender_ssrc()); |
422 observation_complete_.Set(); | 411 observation_complete_.Set(); |
423 | 412 |
424 return SEND_PACKET; | 413 return SEND_PACKET; |
425 } | 414 } |
426 | 415 |
427 void PerformTest() override { | 416 void PerformTest() override { |
428 EXPECT_TRUE(Wait()) | 417 EXPECT_TRUE(Wait()) |
429 << "Timed out while waiting for a receiver RTCP packet to be sent."; | 418 << "Timed out while waiting for a receiver RTCP packet to be sent."; |
430 } | 419 } |
431 } test; | 420 } test; |
432 | 421 |
433 RunBaseTest(&test); | 422 RunBaseTest(&test); |
434 } | 423 } |
435 | 424 |
436 TEST_P(EndToEndTest, ReceivesAndRetransmitsNack) { | 425 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { |
437 static const int kNumberOfNacksToObserve = 2; | 426 static const int kNumberOfNacksToObserve = 2; |
438 static const int kLossBurstSize = 2; | 427 static const int kLossBurstSize = 2; |
439 static const int kPacketsBetweenLossBursts = 9; | 428 static const int kPacketsBetweenLossBursts = 9; |
440 class NackObserver : public test::EndToEndTest { | 429 class NackObserver : public test::EndToEndTest { |
441 public: | 430 public: |
442 NackObserver() | 431 NackObserver() |
443 : EndToEndTest(kLongTimeoutMs), | 432 : EndToEndTest(kLongTimeoutMs), |
444 sent_rtp_packets_(0), | 433 sent_rtp_packets_(0), |
445 packets_left_to_drop_(0), | 434 packets_left_to_drop_(0), |
446 nacks_left_(kNumberOfNacksToObserve) {} | 435 nacks_left_(kNumberOfNacksToObserve) {} |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 std::set<uint16_t> dropped_packets_; | 498 std::set<uint16_t> dropped_packets_; |
510 std::set<uint16_t> retransmitted_packets_; | 499 std::set<uint16_t> retransmitted_packets_; |
511 uint64_t sent_rtp_packets_; | 500 uint64_t sent_rtp_packets_; |
512 int packets_left_to_drop_; | 501 int packets_left_to_drop_; |
513 int nacks_left_ GUARDED_BY(&crit_); | 502 int nacks_left_ GUARDED_BY(&crit_); |
514 } test; | 503 } test; |
515 | 504 |
516 RunBaseTest(&test); | 505 RunBaseTest(&test); |
517 } | 506 } |
518 | 507 |
519 TEST_P(EndToEndTest, ReceivesNackAndRetransmitsAudio) { | 508 TEST_F(EndToEndTest, ReceivesNackAndRetransmitsAudio) { |
520 class NackObserver : public test::EndToEndTest { | 509 class NackObserver : public test::EndToEndTest { |
521 public: | 510 public: |
522 NackObserver() | 511 NackObserver() |
523 : EndToEndTest(kLongTimeoutMs), | 512 : EndToEndTest(kLongTimeoutMs), |
524 local_ssrc_(0), | 513 local_ssrc_(0), |
525 remote_ssrc_(0), | 514 remote_ssrc_(0), |
526 receive_transport_(nullptr) {} | 515 receive_transport_(nullptr) {} |
527 | 516 |
528 private: | 517 private: |
529 size_t GetNumVideoStreams() const override { return 0; } | 518 size_t GetNumVideoStreams() const override { return 0; } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 uint32_t remote_ssrc_; | 571 uint32_t remote_ssrc_; |
583 Transport* receive_transport_; | 572 Transport* receive_transport_; |
584 rtc::Optional<uint16_t> sequence_number_to_retransmit_; | 573 rtc::Optional<uint16_t> sequence_number_to_retransmit_; |
585 } test; | 574 } test; |
586 | 575 |
587 RunBaseTest(&test); | 576 RunBaseTest(&test); |
588 } | 577 } |
589 | 578 |
590 // Disabled due to flakyness, see | 579 // Disabled due to flakyness, see |
591 // https://bugs.chromium.org/p/webrtc/issues/detail?id=7047. | 580 // https://bugs.chromium.org/p/webrtc/issues/detail?id=7047. |
592 TEST_P(EndToEndTest, DISABLED_ReceivesUlpfec) { | 581 TEST_F(EndToEndTest, DISABLED_ReceivesUlpfec) { |
593 class UlpfecRenderObserver : public test::EndToEndTest, | 582 class UlpfecRenderObserver : public test::EndToEndTest, |
594 public rtc::VideoSinkInterface<VideoFrame> { | 583 public rtc::VideoSinkInterface<VideoFrame> { |
595 public: | 584 public: |
596 UlpfecRenderObserver() | 585 UlpfecRenderObserver() |
597 : EndToEndTest(kDefaultTimeoutMs), | 586 : EndToEndTest(kDefaultTimeoutMs), |
598 random_(0xcafef00d1), | 587 random_(0xcafef00d1), |
599 num_packets_sent_(0) {} | 588 num_packets_sent_(0) {} |
600 | 589 |
601 private: | 590 private: |
602 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 591 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
845 std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_); | 834 std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_); |
846 // Several packets can have the same timestamp. | 835 // Several packets can have the same timestamp. |
847 std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_); | 836 std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_); |
848 const bool enable_nack_; | 837 const bool enable_nack_; |
849 const bool expect_flexfec_rtcp_; | 838 const bool expect_flexfec_rtcp_; |
850 bool received_flexfec_rtcp_ GUARDED_BY(crit_); | 839 bool received_flexfec_rtcp_ GUARDED_BY(crit_); |
851 Random random_; | 840 Random random_; |
852 int num_packets_sent_; | 841 int num_packets_sent_; |
853 }; | 842 }; |
854 | 843 |
855 TEST_P(EndToEndTest, RecoversWithFlexfec) { | 844 TEST_F(EndToEndTest, RecoversWithFlexfec) { |
856 FlexfecRenderObserver test(false, false); | 845 FlexfecRenderObserver test(false, false); |
857 RunBaseTest(&test); | 846 RunBaseTest(&test); |
858 } | 847 } |
859 | 848 |
860 TEST_P(EndToEndTest, RecoversWithFlexfecAndNack) { | 849 TEST_F(EndToEndTest, RecoversWithFlexfecAndNack) { |
861 FlexfecRenderObserver test(true, false); | 850 FlexfecRenderObserver test(true, false); |
862 RunBaseTest(&test); | 851 RunBaseTest(&test); |
863 } | 852 } |
864 | 853 |
865 TEST_P(EndToEndTest, RecoversWithFlexfecAndSendsCorrespondingRtcp) { | 854 TEST_F(EndToEndTest, RecoversWithFlexfecAndSendsCorrespondingRtcp) { |
866 FlexfecRenderObserver test(false, true); | 855 FlexfecRenderObserver test(false, true); |
867 RunBaseTest(&test); | 856 RunBaseTest(&test); |
868 } | 857 } |
869 | 858 |
870 TEST_P(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { | 859 TEST_F(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { |
871 class UlpfecNackObserver : public test::EndToEndTest { | 860 class UlpfecNackObserver : public test::EndToEndTest { |
872 public: | 861 public: |
873 UlpfecNackObserver() | 862 UlpfecNackObserver() |
874 : EndToEndTest(kDefaultTimeoutMs), | 863 : EndToEndTest(kDefaultTimeoutMs), |
875 state_(kFirstPacket), | 864 state_(kFirstPacket), |
876 ulpfec_sequence_number_(0), | 865 ulpfec_sequence_number_(0), |
877 has_last_sequence_number_(false), | 866 has_last_sequence_number_(false), |
878 last_sequence_number_(0), | 867 last_sequence_number_(0), |
879 encoder_(VP8Encoder::Create()), | 868 encoder_(VP8Encoder::Create()), |
880 decoder_(VP8Decoder::Create()) {} | 869 decoder_(VP8Decoder::Create()) {} |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1169 std::unique_ptr<VideoEncoder> encoder_; | 1158 std::unique_ptr<VideoEncoder> encoder_; |
1170 const std::string payload_name_; | 1159 const std::string payload_name_; |
1171 int marker_bits_observed_; | 1160 int marker_bits_observed_; |
1172 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); | 1161 uint32_t retransmitted_timestamp_ GUARDED_BY(&crit_); |
1173 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_); | 1162 std::vector<uint32_t> rendered_timestamps_ GUARDED_BY(&crit_); |
1174 } test(enable_rtx, enable_red); | 1163 } test(enable_rtx, enable_red); |
1175 | 1164 |
1176 RunBaseTest(&test); | 1165 RunBaseTest(&test); |
1177 } | 1166 } |
1178 | 1167 |
1179 TEST_P(EndToEndTest, DecodesRetransmittedFrame) { | 1168 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { |
1180 DecodesRetransmittedFrame(false, false); | 1169 DecodesRetransmittedFrame(false, false); |
1181 } | 1170 } |
1182 | 1171 |
1183 TEST_P(EndToEndTest, DecodesRetransmittedFrameOverRtx) { | 1172 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { |
1184 DecodesRetransmittedFrame(true, false); | 1173 DecodesRetransmittedFrame(true, false); |
1185 } | 1174 } |
1186 | 1175 |
1187 TEST_P(EndToEndTest, DecodesRetransmittedFrameByRed) { | 1176 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRed) { |
1188 DecodesRetransmittedFrame(false, true); | 1177 DecodesRetransmittedFrame(false, true); |
1189 } | 1178 } |
1190 | 1179 |
1191 TEST_P(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { | 1180 TEST_F(EndToEndTest, DecodesRetransmittedFrameByRedOverRtx) { |
1192 DecodesRetransmittedFrame(true, true); | 1181 DecodesRetransmittedFrame(true, true); |
1193 } | 1182 } |
1194 | 1183 |
1195 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { | 1184 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) { |
1196 static const int kPacketsToDrop = 1; | 1185 static const int kPacketsToDrop = 1; |
1197 | 1186 |
1198 class PliObserver : public test::EndToEndTest, | 1187 class PliObserver : public test::EndToEndTest, |
1199 public rtc::VideoSinkInterface<VideoFrame> { | 1188 public rtc::VideoSinkInterface<VideoFrame> { |
1200 public: | 1189 public: |
1201 explicit PliObserver(int rtp_history_ms) | 1190 explicit PliObserver(int rtp_history_ms) |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 int rtp_history_ms_; | 1254 int rtp_history_ms_; |
1266 bool nack_enabled_; | 1255 bool nack_enabled_; |
1267 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); | 1256 uint32_t highest_dropped_timestamp_ GUARDED_BY(&crit_); |
1268 int frames_to_drop_ GUARDED_BY(&crit_); | 1257 int frames_to_drop_ GUARDED_BY(&crit_); |
1269 bool received_pli_ GUARDED_BY(&crit_); | 1258 bool received_pli_ GUARDED_BY(&crit_); |
1270 } test(rtp_history_ms); | 1259 } test(rtp_history_ms); |
1271 | 1260 |
1272 RunBaseTest(&test); | 1261 RunBaseTest(&test); |
1273 } | 1262 } |
1274 | 1263 |
1275 TEST_P(EndToEndTest, ReceivesPliAndRecoversWithNack) { | 1264 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { |
1276 ReceivesPliAndRecovers(1000); | 1265 ReceivesPliAndRecovers(1000); |
1277 } | 1266 } |
1278 | 1267 |
1279 TEST_P(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { | 1268 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithoutNack) { |
1280 ReceivesPliAndRecovers(0); | 1269 ReceivesPliAndRecovers(0); |
1281 } | 1270 } |
1282 | 1271 |
1283 TEST_P(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { | 1272 TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { |
1284 class PacketInputObserver : public PacketReceiver { | 1273 class PacketInputObserver : public PacketReceiver { |
1285 public: | 1274 public: |
1286 explicit PacketInputObserver(PacketReceiver* receiver) | 1275 explicit PacketInputObserver(PacketReceiver* receiver) |
1287 : receiver_(receiver), delivered_packet_(false, false) {} | 1276 : receiver_(receiver), delivered_packet_(false, false) {} |
1288 | 1277 |
1289 bool Wait() { return delivered_packet_.Wait(kDefaultTimeoutMs); } | 1278 bool Wait() { return delivered_packet_.Wait(kDefaultTimeoutMs); } |
1290 | 1279 |
1291 private: | 1280 private: |
1292 DeliveryStatus DeliverPacket(MediaType media_type, | 1281 DeliveryStatus DeliverPacket(MediaType media_type, |
1293 const uint8_t* packet, | 1282 const uint8_t* packet, |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1413 rtc::CriticalSection crit_; | 1402 rtc::CriticalSection crit_; |
1414 // Must be protected since RTCP can be sent by both the process thread | 1403 // Must be protected since RTCP can be sent by both the process thread |
1415 // and the pacer thread. | 1404 // and the pacer thread. |
1416 int sent_rtp_ GUARDED_BY(&crit_); | 1405 int sent_rtp_ GUARDED_BY(&crit_); |
1417 int sent_rtcp_ GUARDED_BY(&crit_); | 1406 int sent_rtcp_ GUARDED_BY(&crit_); |
1418 } test(rtcp_mode); | 1407 } test(rtcp_mode); |
1419 | 1408 |
1420 RunBaseTest(&test); | 1409 RunBaseTest(&test); |
1421 } | 1410 } |
1422 | 1411 |
1423 TEST_P(EndToEndTest, UsesRtcpCompoundMode) { | 1412 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { |
1424 RespectsRtcpMode(RtcpMode::kCompound); | 1413 RespectsRtcpMode(RtcpMode::kCompound); |
1425 } | 1414 } |
1426 | 1415 |
1427 TEST_P(EndToEndTest, UsesRtcpReducedSizeMode) { | 1416 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { |
1428 RespectsRtcpMode(RtcpMode::kReducedSize); | 1417 RespectsRtcpMode(RtcpMode::kReducedSize); |
1429 } | 1418 } |
1430 | 1419 |
1431 // Test sets up a Call multiple senders with different resolutions and SSRCs. | 1420 // Test sets up a Call multiple senders with different resolutions and SSRCs. |
1432 // Another is set up to receive all three of these with different renderers. | 1421 // Another is set up to receive all three of these with different renderers. |
1433 class MultiStreamTest { | 1422 class MultiStreamTest { |
1434 public: | 1423 public: |
1435 static const size_t kNumStreams = 3; | 1424 static const size_t kNumStreams = 3; |
1436 struct CodecSettings { | 1425 struct CodecSettings { |
1437 uint32_t ssrc; | 1426 uint32_t ssrc; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1541 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { | 1530 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) { |
1542 return new test::DirectTransport(sender_call); | 1531 return new test::DirectTransport(sender_call); |
1543 } | 1532 } |
1544 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { | 1533 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) { |
1545 return new test::DirectTransport(receiver_call); | 1534 return new test::DirectTransport(receiver_call); |
1546 } | 1535 } |
1547 }; | 1536 }; |
1548 | 1537 |
1549 // Each renderer verifies that it receives the expected resolution, and as soon | 1538 // Each renderer verifies that it receives the expected resolution, and as soon |
1550 // as every renderer has received a frame, the test finishes. | 1539 // as every renderer has received a frame, the test finishes. |
1551 TEST_P(EndToEndTest, SendsAndReceivesMultipleStreams) { | 1540 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { |
1552 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { | 1541 class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1553 public: | 1542 public: |
1554 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, | 1543 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, |
1555 uint32_t ssrc, | 1544 uint32_t ssrc, |
1556 test::FrameGeneratorCapturer** frame_generator) | 1545 test::FrameGeneratorCapturer** frame_generator) |
1557 : settings_(settings), | 1546 : settings_(settings), |
1558 ssrc_(ssrc), | 1547 ssrc_(ssrc), |
1559 frame_generator_(frame_generator), | 1548 frame_generator_(frame_generator), |
1560 done_(false, false) {} | 1549 done_(false, false) {} |
1561 | 1550 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1606 receive_config->renderer = observers_[stream_index].get(); | 1595 receive_config->renderer = observers_[stream_index].get(); |
1607 } | 1596 } |
1608 | 1597 |
1609 private: | 1598 private: |
1610 std::unique_ptr<VideoOutputObserver> observers_[kNumStreams]; | 1599 std::unique_ptr<VideoOutputObserver> observers_[kNumStreams]; |
1611 } tester; | 1600 } tester; |
1612 | 1601 |
1613 tester.RunTest(); | 1602 tester.RunTest(); |
1614 } | 1603 } |
1615 | 1604 |
1616 TEST_P(EndToEndTest, AssignsTransportSequenceNumbers) { | 1605 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { |
1617 static const int kExtensionId = 5; | 1606 static const int kExtensionId = 5; |
1618 | 1607 |
1619 class RtpExtensionHeaderObserver : public test::DirectTransport { | 1608 class RtpExtensionHeaderObserver : public test::DirectTransport { |
1620 public: | 1609 public: |
1621 RtpExtensionHeaderObserver(Call* sender_call, | 1610 RtpExtensionHeaderObserver(Call* sender_call, |
1622 const uint32_t& first_media_ssrc, | 1611 const uint32_t& first_media_ssrc, |
1623 const std::map<uint32_t, uint32_t>& ssrc_map) | 1612 const std::map<uint32_t, uint32_t>& ssrc_map) |
1624 : DirectTransport(sender_call), | 1613 : DirectTransport(sender_call), |
1625 done_(false, false), | 1614 done_(false, false), |
1626 parser_(RtpHeaderParser::Create()), | 1615 parser_(RtpHeaderParser::Create()), |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1867 } | 1856 } |
1868 | 1857 |
1869 private: | 1858 private: |
1870 static const int kExtensionId = 5; | 1859 static const int kExtensionId = 5; |
1871 const bool feedback_enabled_; | 1860 const bool feedback_enabled_; |
1872 const size_t num_video_streams_; | 1861 const size_t num_video_streams_; |
1873 const size_t num_audio_streams_; | 1862 const size_t num_audio_streams_; |
1874 Call* receiver_call_; | 1863 Call* receiver_call_; |
1875 }; | 1864 }; |
1876 | 1865 |
1877 TEST_P(EndToEndTest, VideoReceivesTransportFeedback) { | 1866 TEST_F(EndToEndTest, VideoReceivesTransportFeedback) { |
1878 TransportFeedbackTester test(true, 1, 0); | 1867 TransportFeedbackTester test(true, 1, 0); |
1879 RunBaseTest(&test); | 1868 RunBaseTest(&test); |
1880 } | 1869 } |
1881 | 1870 |
1882 TEST_P(EndToEndTest, VideoTransportFeedbackNotConfigured) { | 1871 TEST_F(EndToEndTest, VideoTransportFeedbackNotConfigured) { |
1883 TransportFeedbackTester test(false, 1, 0); | 1872 TransportFeedbackTester test(false, 1, 0); |
1884 RunBaseTest(&test); | 1873 RunBaseTest(&test); |
1885 } | 1874 } |
1886 | 1875 |
1887 TEST_P(EndToEndTest, AudioReceivesTransportFeedback) { | 1876 TEST_F(EndToEndTest, AudioReceivesTransportFeedback) { |
1888 TransportFeedbackTester test(true, 0, 1); | 1877 TransportFeedbackTester test(true, 0, 1); |
1889 RunBaseTest(&test); | 1878 RunBaseTest(&test); |
1890 } | 1879 } |
1891 | 1880 |
1892 TEST_P(EndToEndTest, AudioTransportFeedbackNotConfigured) { | 1881 TEST_F(EndToEndTest, AudioTransportFeedbackNotConfigured) { |
1893 TransportFeedbackTester test(false, 0, 1); | 1882 TransportFeedbackTester test(false, 0, 1); |
1894 RunBaseTest(&test); | 1883 RunBaseTest(&test); |
1895 } | 1884 } |
1896 | 1885 |
1897 TEST_P(EndToEndTest, AudioVideoReceivesTransportFeedback) { | 1886 TEST_F(EndToEndTest, AudioVideoReceivesTransportFeedback) { |
1898 TransportFeedbackTester test(true, 1, 1); | 1887 TransportFeedbackTester test(true, 1, 1); |
1899 RunBaseTest(&test); | 1888 RunBaseTest(&test); |
1900 } | 1889 } |
1901 | 1890 |
1902 TEST_P(EndToEndTest, ObserversEncodedFrames) { | 1891 TEST_F(EndToEndTest, ObserversEncodedFrames) { |
1903 class EncodedFrameTestObserver : public EncodedFrameObserver { | 1892 class EncodedFrameTestObserver : public EncodedFrameObserver { |
1904 public: | 1893 public: |
1905 EncodedFrameTestObserver() | 1894 EncodedFrameTestObserver() |
1906 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {} | 1895 : length_(0), frame_type_(kEmptyFrame), called_(false, false) {} |
1907 virtual ~EncodedFrameTestObserver() {} | 1896 virtual ~EncodedFrameTestObserver() {} |
1908 | 1897 |
1909 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { | 1898 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { |
1910 frame_type_ = encoded_frame.frame_type_; | 1899 frame_type_ = encoded_frame.frame_type_; |
1911 length_ = encoded_frame.length_; | 1900 length_ = encoded_frame.length_; |
1912 buffer_.reset(new uint8_t[length_]); | 1901 buffer_.reset(new uint8_t[length_]); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 post_encode_observer.ExpectEqualFrames(pre_decode_observer); | 1956 post_encode_observer.ExpectEqualFrames(pre_decode_observer); |
1968 | 1957 |
1969 Stop(); | 1958 Stop(); |
1970 | 1959 |
1971 sender_transport.StopSending(); | 1960 sender_transport.StopSending(); |
1972 receiver_transport.StopSending(); | 1961 receiver_transport.StopSending(); |
1973 | 1962 |
1974 DestroyStreams(); | 1963 DestroyStreams(); |
1975 } | 1964 } |
1976 | 1965 |
1977 TEST_P(EndToEndTest, ReceiveStreamSendsRemb) { | 1966 TEST_F(EndToEndTest, ReceiveStreamSendsRemb) { |
1978 class RembObserver : public test::EndToEndTest { | 1967 class RembObserver : public test::EndToEndTest { |
1979 public: | 1968 public: |
1980 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} | 1969 RembObserver() : EndToEndTest(kDefaultTimeoutMs) {} |
1981 | 1970 |
1982 void ModifyVideoConfigs( | 1971 void ModifyVideoConfigs( |
1983 VideoSendStream::Config* send_config, | 1972 VideoSendStream::Config* send_config, |
1984 std::vector<VideoReceiveStream::Config>* receive_configs, | 1973 std::vector<VideoReceiveStream::Config>* receive_configs, |
1985 VideoEncoderConfig* encoder_config) override { | 1974 VideoEncoderConfig* encoder_config) override { |
1986 send_config->rtp.extensions.clear(); | 1975 send_config->rtp.extensions.clear(); |
1987 send_config->rtp.extensions.push_back(RtpExtension( | 1976 send_config->rtp.extensions.push_back(RtpExtension( |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2058 "non-zero bandwidth stats."; | 2047 "non-zero bandwidth stats."; |
2059 } | 2048 } |
2060 | 2049 |
2061 private: | 2050 private: |
2062 Call* sender_call_; | 2051 Call* sender_call_; |
2063 Call* receiver_call_; | 2052 Call* receiver_call_; |
2064 bool has_seen_pacer_delay_; | 2053 bool has_seen_pacer_delay_; |
2065 const bool send_side_bwe_; | 2054 const bool send_side_bwe_; |
2066 }; | 2055 }; |
2067 | 2056 |
2068 TEST_P(EndToEndTest, VerifySendSideBweStats) { | 2057 TEST_F(EndToEndTest, VerifySendSideBweStats) { |
2069 BandwidthStatsTest test(true); | 2058 BandwidthStatsTest test(true); |
2070 RunBaseTest(&test); | 2059 RunBaseTest(&test); |
2071 } | 2060 } |
2072 | 2061 |
2073 TEST_P(EndToEndTest, VerifyRecvSideBweStats) { | 2062 TEST_F(EndToEndTest, VerifyRecvSideBweStats) { |
2074 BandwidthStatsTest test(false); | 2063 BandwidthStatsTest test(false); |
2075 RunBaseTest(&test); | 2064 RunBaseTest(&test); |
2076 } | 2065 } |
2077 | 2066 |
2078 // Verifies that it's possible to limit the send BWE by sending a REMB. | 2067 // Verifies that it's possible to limit the send BWE by sending a REMB. |
2079 // This is verified by allowing the send BWE to ramp-up to >1000 kbps, | 2068 // This is verified by allowing the send BWE to ramp-up to >1000 kbps, |
2080 // then have the test generate a REMB of 500 kbps and verify that the send BWE | 2069 // then have the test generate a REMB of 500 kbps and verify that the send BWE |
2081 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the | 2070 // is reduced to exactly 500 kbps. Then a REMB of 1000 kbps is generated and the |
2082 // test verifies that the send BWE ramps back up to exactly 1000 kbps. | 2071 // test verifies that the send BWE ramps back up to exactly 1000 kbps. |
2083 TEST_P(EndToEndTest, RembWithSendSideBwe) { | 2072 TEST_F(EndToEndTest, RembWithSendSideBwe) { |
2084 class BweObserver : public test::EndToEndTest { | 2073 class BweObserver : public test::EndToEndTest { |
2085 public: | 2074 public: |
2086 BweObserver() | 2075 BweObserver() |
2087 : EndToEndTest(kDefaultTimeoutMs), | 2076 : EndToEndTest(kDefaultTimeoutMs), |
2088 sender_call_(nullptr), | 2077 sender_call_(nullptr), |
2089 clock_(Clock::GetRealTimeClock()), | 2078 clock_(Clock::GetRealTimeClock()), |
2090 sender_ssrc_(0), | 2079 sender_ssrc_(0), |
2091 remb_bitrate_bps_(1000000), | 2080 remb_bitrate_bps_(1000000), |
2092 receive_transport_(nullptr), | 2081 receive_transport_(nullptr), |
2093 stop_event_(false, false), | 2082 stop_event_(false, false), |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2200 test::PacketTransport* receive_transport_; | 2189 test::PacketTransport* receive_transport_; |
2201 rtc::Event stop_event_; | 2190 rtc::Event stop_event_; |
2202 rtc::PlatformThread poller_thread_; | 2191 rtc::PlatformThread poller_thread_; |
2203 TestState state_; | 2192 TestState state_; |
2204 RateLimiter retransmission_rate_limiter_; | 2193 RateLimiter retransmission_rate_limiter_; |
2205 } test; | 2194 } test; |
2206 | 2195 |
2207 RunBaseTest(&test); | 2196 RunBaseTest(&test); |
2208 } | 2197 } |
2209 | 2198 |
2210 TEST_P(EndToEndTest, VerifyNackStats) { | 2199 TEST_F(EndToEndTest, VerifyNackStats) { |
2211 static const int kPacketNumberToDrop = 200; | 2200 static const int kPacketNumberToDrop = 200; |
2212 class NackObserver : public test::EndToEndTest { | 2201 class NackObserver : public test::EndToEndTest { |
2213 public: | 2202 public: |
2214 NackObserver() | 2203 NackObserver() |
2215 : EndToEndTest(kLongTimeoutMs), | 2204 : EndToEndTest(kLongTimeoutMs), |
2216 sent_rtp_packets_(0), | 2205 sent_rtp_packets_(0), |
2217 dropped_rtp_packet_(0), | 2206 dropped_rtp_packet_(0), |
2218 dropped_rtp_packet_requested_(false), | 2207 dropped_rtp_packet_requested_(false), |
2219 send_stream_(nullptr), | 2208 send_stream_(nullptr), |
2220 start_runtime_ms_(-1) {} | 2209 start_runtime_ms_(-1) {} |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2529 | 2518 |
2530 int num_red_samples = use_red ? 1 : 0; | 2519 int num_red_samples = use_red ? 1 : 0; |
2531 EXPECT_EQ(num_red_samples, | 2520 EXPECT_EQ(num_red_samples, |
2532 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); | 2521 metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps")); |
2533 EXPECT_EQ(num_red_samples, | 2522 EXPECT_EQ(num_red_samples, |
2534 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps")); | 2523 metrics::NumSamples("WebRTC.Video.FecBitrateReceivedInKbps")); |
2535 EXPECT_EQ(num_red_samples, | 2524 EXPECT_EQ(num_red_samples, |
2536 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent")); | 2525 metrics::NumSamples("WebRTC.Video.ReceivedFecPacketsInPercent")); |
2537 } | 2526 } |
2538 | 2527 |
2539 TEST_P(EndToEndTest, VerifyHistogramStatsWithRtx) { | 2528 TEST_F(EndToEndTest, VerifyHistogramStatsWithRtx) { |
2540 const bool kEnabledRtx = true; | 2529 const bool kEnabledRtx = true; |
2541 const bool kEnabledRed = false; | 2530 const bool kEnabledRed = false; |
2542 const bool kScreenshare = false; | 2531 const bool kScreenshare = false; |
2543 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2532 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2544 } | 2533 } |
2545 | 2534 |
2546 TEST_P(EndToEndTest, VerifyHistogramStatsWithRed) { | 2535 TEST_F(EndToEndTest, VerifyHistogramStatsWithRed) { |
2547 const bool kEnabledRtx = false; | 2536 const bool kEnabledRtx = false; |
2548 const bool kEnabledRed = true; | 2537 const bool kEnabledRed = true; |
2549 const bool kScreenshare = false; | 2538 const bool kScreenshare = false; |
2550 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2539 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2551 } | 2540 } |
2552 | 2541 |
2553 TEST_P(EndToEndTest, VerifyHistogramStatsWithScreenshare) { | 2542 TEST_F(EndToEndTest, VerifyHistogramStatsWithScreenshare) { |
2554 const bool kEnabledRtx = false; | 2543 const bool kEnabledRtx = false; |
2555 const bool kEnabledRed = false; | 2544 const bool kEnabledRed = false; |
2556 const bool kScreenshare = true; | 2545 const bool kScreenshare = true; |
2557 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); | 2546 VerifyHistogramStats(kEnabledRtx, kEnabledRed, kScreenshare); |
2558 } | 2547 } |
2559 | 2548 |
2560 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, | 2549 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, |
2561 bool send_single_ssrc_first) { | 2550 bool send_single_ssrc_first) { |
2562 class SendsSetSsrcs : public test::EndToEndTest { | 2551 class SendsSetSsrcs : public test::EndToEndTest { |
2563 public: | 2552 public: |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2668 size_t ssrcs_to_observe_; | 2657 size_t ssrcs_to_observe_; |
2669 bool expect_single_ssrc_; | 2658 bool expect_single_ssrc_; |
2670 | 2659 |
2671 VideoSendStream* send_stream_; | 2660 VideoSendStream* send_stream_; |
2672 VideoEncoderConfig video_encoder_config_all_streams_; | 2661 VideoEncoderConfig video_encoder_config_all_streams_; |
2673 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first); | 2662 } test(kVideoSendSsrcs, num_ssrcs, send_single_ssrc_first); |
2674 | 2663 |
2675 RunBaseTest(&test); | 2664 RunBaseTest(&test); |
2676 } | 2665 } |
2677 | 2666 |
2678 TEST_P(EndToEndTest, ReportsSetEncoderRates) { | 2667 TEST_F(EndToEndTest, ReportsSetEncoderRates) { |
2679 class EncoderRateStatsTest : public test::EndToEndTest, | 2668 class EncoderRateStatsTest : public test::EndToEndTest, |
2680 public test::FakeEncoder { | 2669 public test::FakeEncoder { |
2681 public: | 2670 public: |
2682 EncoderRateStatsTest() | 2671 EncoderRateStatsTest() |
2683 : EndToEndTest(kDefaultTimeoutMs), | 2672 : EndToEndTest(kDefaultTimeoutMs), |
2684 FakeEncoder(Clock::GetRealTimeClock()), | 2673 FakeEncoder(Clock::GetRealTimeClock()), |
2685 send_stream_(nullptr), | 2674 send_stream_(nullptr), |
2686 bitrate_kbps_(0) {} | 2675 bitrate_kbps_(0) {} |
2687 | 2676 |
2688 void OnVideoStreamsCreated( | 2677 void OnVideoStreamsCreated( |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2748 | 2737 |
2749 private: | 2738 private: |
2750 rtc::CriticalSection crit_; | 2739 rtc::CriticalSection crit_; |
2751 VideoSendStream* send_stream_; | 2740 VideoSendStream* send_stream_; |
2752 uint32_t bitrate_kbps_ GUARDED_BY(crit_); | 2741 uint32_t bitrate_kbps_ GUARDED_BY(crit_); |
2753 } test; | 2742 } test; |
2754 | 2743 |
2755 RunBaseTest(&test); | 2744 RunBaseTest(&test); |
2756 } | 2745 } |
2757 | 2746 |
2758 TEST_P(EndToEndTest, GetStats) { | 2747 TEST_F(EndToEndTest, GetStats) { |
2759 static const int kStartBitrateBps = 3000000; | 2748 static const int kStartBitrateBps = 3000000; |
2760 static const int kExpectedRenderDelayMs = 20; | 2749 static const int kExpectedRenderDelayMs = 20; |
2761 | 2750 |
2762 class ReceiveStreamRenderer : public rtc::VideoSinkInterface<VideoFrame> { | 2751 class ReceiveStreamRenderer : public rtc::VideoSinkInterface<VideoFrame> { |
2763 public: | 2752 public: |
2764 ReceiveStreamRenderer() {} | 2753 ReceiveStreamRenderer() {} |
2765 | 2754 |
2766 private: | 2755 private: |
2767 void OnFrame(const VideoFrame& video_frame) override {} | 2756 void OnFrame(const VideoFrame& video_frame) override {} |
2768 }; | 2757 }; |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3184 rtc::CriticalSection crit_; | 3173 rtc::CriticalSection crit_; |
3185 const bool enable_rrtr_; | 3174 const bool enable_rrtr_; |
3186 const bool enable_target_bitrate_; | 3175 const bool enable_target_bitrate_; |
3187 int sent_rtcp_sr_; | 3176 int sent_rtcp_sr_; |
3188 int sent_rtcp_rr_ GUARDED_BY(&crit_); | 3177 int sent_rtcp_rr_ GUARDED_BY(&crit_); |
3189 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); | 3178 int sent_rtcp_rrtr_ GUARDED_BY(&crit_); |
3190 bool sent_rtcp_target_bitrate_ GUARDED_BY(&crit_); | 3179 bool sent_rtcp_target_bitrate_ GUARDED_BY(&crit_); |
3191 int sent_rtcp_dlrr_; | 3180 int sent_rtcp_dlrr_; |
3192 }; | 3181 }; |
3193 | 3182 |
3194 TEST_P(EndToEndTest, TestExtendedReportsWithRrtrWithoutTargetBitrate) { | 3183 TEST_F(EndToEndTest, TestExtendedReportsWithRrtrWithoutTargetBitrate) { |
3195 RtcpXrObserver test(true, false); | 3184 RtcpXrObserver test(true, false); |
3196 RunBaseTest(&test); | 3185 RunBaseTest(&test); |
3197 } | 3186 } |
3198 | 3187 |
3199 TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtrWithoutTargetBitrate) { | 3188 TEST_F(EndToEndTest, TestExtendedReportsWithoutRrtrWithoutTargetBitrate) { |
3200 RtcpXrObserver test(false, false); | 3189 RtcpXrObserver test(false, false); |
3201 RunBaseTest(&test); | 3190 RunBaseTest(&test); |
3202 } | 3191 } |
3203 | 3192 |
3204 TEST_P(EndToEndTest, TestExtendedReportsWithRrtrWithTargetBitrate) { | 3193 TEST_F(EndToEndTest, TestExtendedReportsWithRrtrWithTargetBitrate) { |
3205 RtcpXrObserver test(true, true); | 3194 RtcpXrObserver test(true, true); |
3206 RunBaseTest(&test); | 3195 RunBaseTest(&test); |
3207 } | 3196 } |
3208 | 3197 |
3209 TEST_P(EndToEndTest, TestExtendedReportsWithoutRrtrWithTargetBitrate) { | 3198 TEST_F(EndToEndTest, TestExtendedReportsWithoutRrtrWithTargetBitrate) { |
3210 RtcpXrObserver test(false, true); | 3199 RtcpXrObserver test(false, true); |
3211 RunBaseTest(&test); | 3200 RunBaseTest(&test); |
3212 } | 3201 } |
3213 | 3202 |
3214 TEST_P(EndToEndTest, TestReceivedRtpPacketStats) { | 3203 TEST_F(EndToEndTest, TestReceivedRtpPacketStats) { |
3215 static const size_t kNumRtpPacketsToSend = 5; | 3204 static const size_t kNumRtpPacketsToSend = 5; |
3216 class ReceivedRtpStatsObserver : public test::EndToEndTest { | 3205 class ReceivedRtpStatsObserver : public test::EndToEndTest { |
3217 public: | 3206 public: |
3218 ReceivedRtpStatsObserver() | 3207 ReceivedRtpStatsObserver() |
3219 : EndToEndTest(kDefaultTimeoutMs), | 3208 : EndToEndTest(kDefaultTimeoutMs), |
3220 receive_stream_(nullptr), | 3209 receive_stream_(nullptr), |
3221 sent_rtp_(0) {} | 3210 sent_rtp_(0) {} |
3222 | 3211 |
3223 private: | 3212 private: |
3224 void OnVideoStreamsCreated( | 3213 void OnVideoStreamsCreated( |
(...skipping 19 matching lines...) Expand all Loading... |
3244 << "Timed out while verifying number of received RTP packets."; | 3233 << "Timed out while verifying number of received RTP packets."; |
3245 } | 3234 } |
3246 | 3235 |
3247 VideoReceiveStream* receive_stream_; | 3236 VideoReceiveStream* receive_stream_; |
3248 uint32_t sent_rtp_; | 3237 uint32_t sent_rtp_; |
3249 } test; | 3238 } test; |
3250 | 3239 |
3251 RunBaseTest(&test); | 3240 RunBaseTest(&test); |
3252 } | 3241 } |
3253 | 3242 |
3254 TEST_P(EndToEndTest, SendsSetSsrc) { | 3243 TEST_F(EndToEndTest, SendsSetSsrc) { |
3255 TestSendsSetSsrcs(1, false); | 3244 TestSendsSetSsrcs(1, false); |
3256 } | 3245 } |
3257 | 3246 |
3258 TEST_P(EndToEndTest, SendsSetSimulcastSsrcs) { | 3247 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) { |
3259 TestSendsSetSsrcs(kNumSsrcs, false); | 3248 TestSendsSetSsrcs(kNumSsrcs, false); |
3260 } | 3249 } |
3261 | 3250 |
3262 TEST_P(EndToEndTest, CanSwitchToUseAllSsrcs) { | 3251 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) { |
3263 TestSendsSetSsrcs(kNumSsrcs, true); | 3252 TestSendsSetSsrcs(kNumSsrcs, true); |
3264 } | 3253 } |
3265 | 3254 |
3266 TEST_P(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { | 3255 TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { |
3267 class ObserveRedundantPayloads: public test::EndToEndTest { | 3256 class ObserveRedundantPayloads: public test::EndToEndTest { |
3268 public: | 3257 public: |
3269 ObserveRedundantPayloads() | 3258 ObserveRedundantPayloads() |
3270 : EndToEndTest(kDefaultTimeoutMs), ssrcs_to_observe_(kNumSsrcs) { | 3259 : EndToEndTest(kDefaultTimeoutMs), ssrcs_to_observe_(kNumSsrcs) { |
3271 for (size_t i = 0; i < kNumSsrcs; ++i) { | 3260 for (size_t i = 0; i < kNumSsrcs; ++i) { |
3272 registered_rtx_ssrc_[kSendRtxSsrcs[i]] = true; | 3261 registered_rtx_ssrc_[kSendRtxSsrcs[i]] = true; |
3273 } | 3262 } |
3274 } | 3263 } |
3275 | 3264 |
3276 private: | 3265 private: |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3590 << "Timed out waiting for all SSRCs to send packets."; | 3579 << "Timed out waiting for all SSRCs to send packets."; |
3591 } | 3580 } |
3592 | 3581 |
3593 send_transport.StopSending(); | 3582 send_transport.StopSending(); |
3594 receive_transport.StopSending(); | 3583 receive_transport.StopSending(); |
3595 | 3584 |
3596 Stop(); | 3585 Stop(); |
3597 DestroyStreams(); | 3586 DestroyStreams(); |
3598 } | 3587 } |
3599 | 3588 |
3600 TEST_P(EndToEndTest, RestartingSendStreamPreservesRtpState) { | 3589 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpState) { |
3601 TestRtpStatePreservation(false, false); | 3590 TestRtpStatePreservation(false, false); |
3602 } | 3591 } |
3603 | 3592 |
3604 TEST_P(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) { | 3593 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) { |
3605 TestRtpStatePreservation(true, false); | 3594 TestRtpStatePreservation(true, false); |
3606 } | 3595 } |
3607 | 3596 |
3608 TEST_P(EndToEndTest, RestartingSendStreamKeepsRtpAndRtcpTimestampsSynced) { | 3597 TEST_F(EndToEndTest, RestartingSendStreamKeepsRtpAndRtcpTimestampsSynced) { |
3609 TestRtpStatePreservation(true, true); | 3598 TestRtpStatePreservation(true, true); |
3610 } | 3599 } |
3611 | 3600 |
3612 TEST_P(EndToEndTest, RespectsNetworkState) { | 3601 TEST_F(EndToEndTest, RespectsNetworkState) { |
3613 // TODO(pbos): Remove accepted downtime packets etc. when signaling network | 3602 // TODO(pbos): Remove accepted downtime packets etc. when signaling network |
3614 // down blocks until no more packets will be sent. | 3603 // down blocks until no more packets will be sent. |
3615 | 3604 |
3616 // Pacer will send from its packet list and then send required padding before | 3605 // Pacer will send from its packet list and then send required padding before |
3617 // checking paused_ again. This should be enough for one round of pacing, | 3606 // checking paused_ again. This should be enough for one round of pacing, |
3618 // otherwise increase. | 3607 // otherwise increase. |
3619 static const int kNumAcceptedDowntimeRtp = 5; | 3608 static const int kNumAcceptedDowntimeRtp = 5; |
3620 // A single RTCP may be in the pipeline. | 3609 // A single RTCP may be in the pipeline. |
3621 static const int kNumAcceptedDowntimeRtcp = 1; | 3610 static const int kNumAcceptedDowntimeRtcp = 1; |
3622 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { | 3611 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3796 NetworkState sender_state_ GUARDED_BY(test_crit_); | 3785 NetworkState sender_state_ GUARDED_BY(test_crit_); |
3797 int sender_rtp_ GUARDED_BY(test_crit_); | 3786 int sender_rtp_ GUARDED_BY(test_crit_); |
3798 int sender_rtcp_ GUARDED_BY(test_crit_); | 3787 int sender_rtcp_ GUARDED_BY(test_crit_); |
3799 int receiver_rtcp_ GUARDED_BY(test_crit_); | 3788 int receiver_rtcp_ GUARDED_BY(test_crit_); |
3800 int down_frames_ GUARDED_BY(test_crit_); | 3789 int down_frames_ GUARDED_BY(test_crit_); |
3801 } test; | 3790 } test; |
3802 | 3791 |
3803 RunBaseTest(&test); | 3792 RunBaseTest(&test); |
3804 } | 3793 } |
3805 | 3794 |
3806 TEST_P(EndToEndTest, CallReportsRttForSender) { | 3795 TEST_F(EndToEndTest, CallReportsRttForSender) { |
3807 static const int kSendDelayMs = 30; | 3796 static const int kSendDelayMs = 30; |
3808 static const int kReceiveDelayMs = 70; | 3797 static const int kReceiveDelayMs = 70; |
3809 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); | 3798 CreateCalls(Call::Config(&event_log_), Call::Config(&event_log_)); |
3810 | 3799 |
3811 FakeNetworkPipe::Config config; | 3800 FakeNetworkPipe::Config config; |
3812 config.queue_delay_ms = kSendDelayMs; | 3801 config.queue_delay_ms = kSendDelayMs; |
3813 test::DirectTransport sender_transport(config, sender_call_.get()); | 3802 test::DirectTransport sender_transport(config, sender_call_.get()); |
3814 config.queue_delay_ms = kReceiveDelayMs; | 3803 config.queue_delay_ms = kReceiveDelayMs; |
3815 test::DirectTransport receiver_transport(config, receiver_call_.get()); | 3804 test::DirectTransport receiver_transport(config, receiver_call_.get()); |
3816 sender_transport.SetReceiver(receiver_call_->Receiver()); | 3805 sender_transport.SetReceiver(receiver_call_->Receiver()); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3884 | 3873 |
3885 Start(); | 3874 Start(); |
3886 SleepMs(kSilenceTimeoutMs); | 3875 SleepMs(kSilenceTimeoutMs); |
3887 Stop(); | 3876 Stop(); |
3888 | 3877 |
3889 sender_transport.StopSending(); | 3878 sender_transport.StopSending(); |
3890 | 3879 |
3891 DestroyStreams(); | 3880 DestroyStreams(); |
3892 } | 3881 } |
3893 | 3882 |
3894 TEST_P(EndToEndTest, NewVideoSendStreamsRespectVideoNetworkDown) { | 3883 TEST_F(EndToEndTest, NewVideoSendStreamsRespectVideoNetworkDown) { |
3895 class UnusedEncoder : public test::FakeEncoder { | 3884 class UnusedEncoder : public test::FakeEncoder { |
3896 public: | 3885 public: |
3897 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {} | 3886 UnusedEncoder() : FakeEncoder(Clock::GetRealTimeClock()) {} |
3898 | 3887 |
3899 int32_t InitEncode(const VideoCodec* config, | 3888 int32_t InitEncode(const VideoCodec* config, |
3900 int32_t number_of_cores, | 3889 int32_t number_of_cores, |
3901 size_t max_payload_size) override { | 3890 size_t max_payload_size) override { |
3902 EXPECT_GT(config->startBitrate, 0u); | 3891 EXPECT_GT(config->startBitrate, 0u); |
3903 return 0; | 3892 return 0; |
3904 } | 3893 } |
3905 int32_t Encode(const VideoFrame& input_image, | 3894 int32_t Encode(const VideoFrame& input_image, |
3906 const CodecSpecificInfo* codec_specific_info, | 3895 const CodecSpecificInfo* codec_specific_info, |
3907 const std::vector<FrameType>* frame_types) override { | 3896 const std::vector<FrameType>* frame_types) override { |
3908 ADD_FAILURE() << "Unexpected frame encode."; | 3897 ADD_FAILURE() << "Unexpected frame encode."; |
3909 return test::FakeEncoder::Encode(input_image, codec_specific_info, | 3898 return test::FakeEncoder::Encode(input_image, codec_specific_info, |
3910 frame_types); | 3899 frame_types); |
3911 } | 3900 } |
3912 }; | 3901 }; |
3913 | 3902 |
3914 UnusedEncoder unused_encoder; | 3903 UnusedEncoder unused_encoder; |
3915 UnusedTransport unused_transport; | 3904 UnusedTransport unused_transport; |
3916 VerifyNewVideoSendStreamsRespectNetworkState( | 3905 VerifyNewVideoSendStreamsRespectNetworkState( |
3917 MediaType::AUDIO, &unused_encoder, &unused_transport); | 3906 MediaType::AUDIO, &unused_encoder, &unused_transport); |
3918 } | 3907 } |
3919 | 3908 |
3920 TEST_P(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) { | 3909 TEST_F(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) { |
3921 class RequiredEncoder : public test::FakeEncoder { | 3910 class RequiredEncoder : public test::FakeEncoder { |
3922 public: | 3911 public: |
3923 RequiredEncoder() | 3912 RequiredEncoder() |
3924 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {} | 3913 : FakeEncoder(Clock::GetRealTimeClock()), encoded_frame_(false) {} |
3925 ~RequiredEncoder() { | 3914 ~RequiredEncoder() { |
3926 if (!encoded_frame_) { | 3915 if (!encoded_frame_) { |
3927 ADD_FAILURE() << "Didn't encode an expected frame"; | 3916 ADD_FAILURE() << "Didn't encode an expected frame"; |
3928 } | 3917 } |
3929 } | 3918 } |
3930 int32_t Encode(const VideoFrame& input_image, | 3919 int32_t Encode(const VideoFrame& input_image, |
3931 const CodecSpecificInfo* codec_specific_info, | 3920 const CodecSpecificInfo* codec_specific_info, |
3932 const std::vector<FrameType>* frame_types) override { | 3921 const std::vector<FrameType>* frame_types) override { |
3933 encoded_frame_ = true; | 3922 encoded_frame_ = true; |
3934 return test::FakeEncoder::Encode(input_image, codec_specific_info, | 3923 return test::FakeEncoder::Encode(input_image, codec_specific_info, |
3935 frame_types); | 3924 frame_types); |
3936 } | 3925 } |
3937 | 3926 |
3938 private: | 3927 private: |
3939 bool encoded_frame_; | 3928 bool encoded_frame_; |
3940 }; | 3929 }; |
3941 | 3930 |
3942 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/); | 3931 RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/); |
3943 RequiredEncoder required_encoder; | 3932 RequiredEncoder required_encoder; |
3944 VerifyNewVideoSendStreamsRespectNetworkState( | 3933 VerifyNewVideoSendStreamsRespectNetworkState( |
3945 MediaType::VIDEO, &required_encoder, &required_transport); | 3934 MediaType::VIDEO, &required_encoder, &required_transport); |
3946 } | 3935 } |
3947 | 3936 |
3948 TEST_P(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) { | 3937 TEST_F(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) { |
3949 UnusedTransport transport; | 3938 UnusedTransport transport; |
3950 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport); | 3939 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport); |
3951 } | 3940 } |
3952 | 3941 |
3953 TEST_P(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) { | 3942 TEST_F(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) { |
3954 RequiredTransport transport(false /*rtp*/, true /*rtcp*/); | 3943 RequiredTransport transport(false /*rtp*/, true /*rtcp*/); |
3955 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport); | 3944 VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport); |
3956 } | 3945 } |
3957 | 3946 |
3958 void VerifyEmptyNackConfig(const NackConfig& config) { | 3947 void VerifyEmptyNackConfig(const NackConfig& config) { |
3959 EXPECT_EQ(0, config.rtp_history_ms) | 3948 EXPECT_EQ(0, config.rtp_history_ms) |
3960 << "Enabling NACK requires rtcp-fb: nack negotiation."; | 3949 << "Enabling NACK requires rtcp-fb: nack negotiation."; |
3961 } | 3950 } |
3962 | 3951 |
3963 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) { | 3952 void VerifyEmptyUlpfecConfig(const UlpfecConfig& config) { |
3964 EXPECT_EQ(-1, config.ulpfec_payload_type) | 3953 EXPECT_EQ(-1, config.ulpfec_payload_type) |
3965 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; | 3954 << "Enabling ULPFEC requires rtpmap: ulpfec negotiation."; |
3966 EXPECT_EQ(-1, config.red_payload_type) | 3955 EXPECT_EQ(-1, config.red_payload_type) |
3967 << "Enabling ULPFEC requires rtpmap: red negotiation."; | 3956 << "Enabling ULPFEC requires rtpmap: red negotiation."; |
3968 EXPECT_EQ(-1, config.red_rtx_payload_type) | 3957 EXPECT_EQ(-1, config.red_rtx_payload_type) |
3969 << "Enabling RTX in ULPFEC requires rtpmap: rtx negotiation."; | 3958 << "Enabling RTX in ULPFEC requires rtpmap: rtx negotiation."; |
3970 } | 3959 } |
3971 | 3960 |
3972 void VerifyEmptyFlexfecConfig( | 3961 void VerifyEmptyFlexfecConfig( |
3973 const VideoSendStream::Config::Rtp::Flexfec& config) { | 3962 const VideoSendStream::Config::Rtp::Flexfec& config) { |
3974 EXPECT_EQ(-1, config.payload_type) | 3963 EXPECT_EQ(-1, config.payload_type) |
3975 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; | 3964 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; |
3976 EXPECT_EQ(0U, config.ssrc) | 3965 EXPECT_EQ(0U, config.ssrc) |
3977 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 3966 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
3978 EXPECT_TRUE(config.protected_media_ssrcs.empty()) | 3967 EXPECT_TRUE(config.protected_media_ssrcs.empty()) |
3979 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 3968 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
3980 } | 3969 } |
3981 | 3970 |
3982 TEST_P(EndToEndTest, VerifyDefaultSendConfigParameters) { | 3971 TEST_F(EndToEndTest, VerifyDefaultSendConfigParameters) { |
3983 VideoSendStream::Config default_send_config(nullptr); | 3972 VideoSendStream::Config default_send_config(nullptr); |
3984 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms) | 3973 EXPECT_EQ(0, default_send_config.rtp.nack.rtp_history_ms) |
3985 << "Enabling NACK require rtcp-fb: nack negotiation."; | 3974 << "Enabling NACK require rtcp-fb: nack negotiation."; |
3986 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty()) | 3975 EXPECT_TRUE(default_send_config.rtp.rtx.ssrcs.empty()) |
3987 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3976 << "Enabling RTX requires rtpmap: rtx negotiation."; |
3988 EXPECT_TRUE(default_send_config.rtp.extensions.empty()) | 3977 EXPECT_TRUE(default_send_config.rtp.extensions.empty()) |
3989 << "Enabling RTP extensions require negotiation."; | 3978 << "Enabling RTP extensions require negotiation."; |
3990 | 3979 |
3991 VerifyEmptyNackConfig(default_send_config.rtp.nack); | 3980 VerifyEmptyNackConfig(default_send_config.rtp.nack); |
3992 VerifyEmptyUlpfecConfig(default_send_config.rtp.ulpfec); | 3981 VerifyEmptyUlpfecConfig(default_send_config.rtp.ulpfec); |
3993 VerifyEmptyFlexfecConfig(default_send_config.rtp.flexfec); | 3982 VerifyEmptyFlexfecConfig(default_send_config.rtp.flexfec); |
3994 } | 3983 } |
3995 | 3984 |
3996 TEST_P(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) { | 3985 TEST_F(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) { |
3997 VideoReceiveStream::Config default_receive_config(nullptr); | 3986 VideoReceiveStream::Config default_receive_config(nullptr); |
3998 EXPECT_EQ(RtcpMode::kCompound, default_receive_config.rtp.rtcp_mode) | 3987 EXPECT_EQ(RtcpMode::kCompound, default_receive_config.rtp.rtcp_mode) |
3999 << "Reduced-size RTCP require rtcp-rsize to be negotiated."; | 3988 << "Reduced-size RTCP require rtcp-rsize to be negotiated."; |
4000 EXPECT_FALSE(default_receive_config.rtp.remb) | 3989 EXPECT_FALSE(default_receive_config.rtp.remb) |
4001 << "REMB require rtcp-fb: goog-remb to be negotiated."; | 3990 << "REMB require rtcp-fb: goog-remb to be negotiated."; |
4002 EXPECT_FALSE( | 3991 EXPECT_FALSE( |
4003 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) | 3992 default_receive_config.rtp.rtcp_xr.receiver_reference_time_report) |
4004 << "RTCP XR settings require rtcp-xr to be negotiated."; | 3993 << "RTCP XR settings require rtcp-xr to be negotiated."; |
4005 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) | 3994 EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc) |
4006 << "Enabling RTX requires ssrc-group: FID negotiation"; | 3995 << "Enabling RTX requires ssrc-group: FID negotiation"; |
4007 EXPECT_TRUE(default_receive_config.rtp.rtx_payload_types.empty()) | 3996 EXPECT_TRUE(default_receive_config.rtp.rtx_payload_types.empty()) |
4008 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3997 << "Enabling RTX requires rtpmap: rtx negotiation."; |
4009 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 3998 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
4010 << "Enabling RTP extensions require negotiation."; | 3999 << "Enabling RTP extensions require negotiation."; |
4011 | 4000 |
4012 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 4001 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
4013 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); | 4002 VerifyEmptyUlpfecConfig(default_receive_config.rtp.ulpfec); |
4014 } | 4003 } |
4015 | 4004 |
4016 TEST_P(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { | 4005 TEST_F(EndToEndTest, VerifyDefaultFlexfecReceiveConfigParameters) { |
4017 test::NullTransport rtcp_send_transport; | 4006 test::NullTransport rtcp_send_transport; |
4018 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); | 4007 FlexfecReceiveStream::Config default_receive_config(&rtcp_send_transport); |
4019 EXPECT_EQ(-1, default_receive_config.payload_type) | 4008 EXPECT_EQ(-1, default_receive_config.payload_type) |
4020 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; | 4009 << "Enabling FlexFEC requires rtpmap: flexfec negotiation."; |
4021 EXPECT_EQ(0U, default_receive_config.remote_ssrc) | 4010 EXPECT_EQ(0U, default_receive_config.remote_ssrc) |
4022 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 4011 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
4023 EXPECT_TRUE(default_receive_config.protected_media_ssrcs.empty()) | 4012 EXPECT_TRUE(default_receive_config.protected_media_ssrcs.empty()) |
4024 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; | 4013 << "Enabling FlexFEC requires ssrc-group: FEC-FR negotiation."; |
4025 } | 4014 } |
4026 | 4015 |
4027 TEST_P(EndToEndTest, TransportSeqNumOnAudioAndVideo) { | 4016 TEST_F(EndToEndTest, TransportSeqNumOnAudioAndVideo) { |
4028 static constexpr int kExtensionId = 8; | 4017 static constexpr int kExtensionId = 8; |
4029 static constexpr size_t kMinPacketsToWaitFor = 50; | 4018 static constexpr size_t kMinPacketsToWaitFor = 50; |
4030 class TransportSequenceNumberTest : public test::EndToEndTest { | 4019 class TransportSequenceNumberTest : public test::EndToEndTest { |
4031 public: | 4020 public: |
4032 TransportSequenceNumberTest() | 4021 TransportSequenceNumberTest() |
4033 : EndToEndTest(kDefaultTimeoutMs), | 4022 : EndToEndTest(kDefaultTimeoutMs), |
4034 video_observed_(false), | 4023 video_observed_(false), |
4035 audio_observed_(false) { | 4024 audio_observed_(false) { |
4036 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, | 4025 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, |
4037 kExtensionId); | 4026 kExtensionId); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4128 video_receive_streams_[0]->EnableEncodedFrameRecording( | 4117 video_receive_streams_[0]->EnableEncodedFrameRecording( |
4129 OpenFile(AddFile()), 0); | 4118 OpenFile(AddFile()), 0); |
4130 } else { | 4119 } else { |
4131 video_receive_streams_[0]->DisableEncodedFrameRecording(); | 4120 video_receive_streams_[0]->DisableEncodedFrameRecording(); |
4132 } | 4121 } |
4133 } | 4122 } |
4134 | 4123 |
4135 std::vector<std::string> paths_; | 4124 std::vector<std::string> paths_; |
4136 }; | 4125 }; |
4137 | 4126 |
4138 TEST_P(EndToEndLogTest, LogsEncodedFramesWhenRequested) { | 4127 TEST_F(EndToEndLogTest, LogsEncodedFramesWhenRequested) { |
4139 static const int kNumFramesToRecord = 10; | 4128 static const int kNumFramesToRecord = 10; |
4140 class LogEncodingObserver : public test::EndToEndTest, | 4129 class LogEncodingObserver : public test::EndToEndTest, |
4141 public EncodedFrameObserver { | 4130 public EncodedFrameObserver { |
4142 public: | 4131 public: |
4143 explicit LogEncodingObserver(EndToEndLogTest* fixture) | 4132 explicit LogEncodingObserver(EndToEndLogTest* fixture) |
4144 : EndToEndTest(kDefaultTimeoutMs), | 4133 : EndToEndTest(kDefaultTimeoutMs), |
4145 fixture_(fixture), | 4134 fixture_(fixture), |
4146 recorded_frames_(0) {} | 4135 recorded_frames_(0) {} |
4147 | 4136 |
4148 void PerformTest() override { | 4137 void PerformTest() override { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4191 std::unique_ptr<VideoEncoder> encoder_; | 4180 std::unique_ptr<VideoEncoder> encoder_; |
4192 std::unique_ptr<VideoDecoder> decoder_; | 4181 std::unique_ptr<VideoDecoder> decoder_; |
4193 rtc::CriticalSection crit_; | 4182 rtc::CriticalSection crit_; |
4194 int recorded_frames_ GUARDED_BY(crit_); | 4183 int recorded_frames_ GUARDED_BY(crit_); |
4195 } test(this); | 4184 } test(this); |
4196 | 4185 |
4197 RunBaseTest(&test); | 4186 RunBaseTest(&test); |
4198 } | 4187 } |
4199 | 4188 |
4200 } // namespace webrtc | 4189 } // namespace webrtc |
OLD | NEW |