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 2491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2502 static const int kNumAcceptedDowntimeRtp = 5; | 2502 static const int kNumAcceptedDowntimeRtp = 5; |
2503 // A single RTCP may be in the pipeline. | 2503 // A single RTCP may be in the pipeline. |
2504 static const int kNumAcceptedDowntimeRtcp = 1; | 2504 static const int kNumAcceptedDowntimeRtcp = 1; |
2505 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { | 2505 class NetworkStateTest : public test::EndToEndTest, public test::FakeEncoder { |
2506 public: | 2506 public: |
2507 NetworkStateTest() | 2507 NetworkStateTest() |
2508 : EndToEndTest(kDefaultTimeoutMs), | 2508 : EndToEndTest(kDefaultTimeoutMs), |
2509 FakeEncoder(Clock::GetRealTimeClock()), | 2509 FakeEncoder(Clock::GetRealTimeClock()), |
2510 encoded_frames_(EventWrapper::Create()), | 2510 encoded_frames_(EventWrapper::Create()), |
2511 packet_event_(EventWrapper::Create()), | 2511 packet_event_(EventWrapper::Create()), |
2512 sender_state_(Call::kNetworkUp), | 2512 sender_state_(kNetworkUp), |
2513 sender_rtp_(0), | 2513 sender_rtp_(0), |
2514 sender_rtcp_(0), | 2514 sender_rtcp_(0), |
2515 receiver_rtcp_(0), | 2515 receiver_rtcp_(0), |
2516 down_frames_(0) {} | 2516 down_frames_(0) {} |
2517 | 2517 |
2518 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 2518 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
2519 rtc::CritScope lock(&test_crit_); | 2519 rtc::CritScope lock(&test_crit_); |
2520 ++sender_rtp_; | 2520 ++sender_rtp_; |
2521 packet_event_->Set(); | 2521 packet_event_->Set(); |
2522 return SEND_PACKET; | 2522 return SEND_PACKET; |
(...skipping 29 matching lines...) Expand all Loading... |
2552 send_config->encoder_settings.encoder = this; | 2552 send_config->encoder_settings.encoder = this; |
2553 } | 2553 } |
2554 | 2554 |
2555 void PerformTest() override { | 2555 void PerformTest() override { |
2556 EXPECT_EQ(kEventSignaled, encoded_frames_->Wait(kDefaultTimeoutMs)) | 2556 EXPECT_EQ(kEventSignaled, encoded_frames_->Wait(kDefaultTimeoutMs)) |
2557 << "No frames received by the encoder."; | 2557 << "No frames received by the encoder."; |
2558 // Wait for packets from both sender/receiver. | 2558 // Wait for packets from both sender/receiver. |
2559 WaitForPacketsOrSilence(false, false); | 2559 WaitForPacketsOrSilence(false, false); |
2560 | 2560 |
2561 // Sender-side network down. | 2561 // Sender-side network down. |
2562 sender_call_->SignalNetworkState(Call::kNetworkDown); | 2562 sender_call_->SignalNetworkState(kNetworkDown); |
2563 { | 2563 { |
2564 rtc::CritScope lock(&test_crit_); | 2564 rtc::CritScope lock(&test_crit_); |
2565 // After network goes down we shouldn't be encoding more frames. | 2565 // After network goes down we shouldn't be encoding more frames. |
2566 sender_state_ = Call::kNetworkDown; | 2566 sender_state_ = kNetworkDown; |
2567 } | 2567 } |
2568 // Wait for receiver-packets and no sender packets. | 2568 // Wait for receiver-packets and no sender packets. |
2569 WaitForPacketsOrSilence(true, false); | 2569 WaitForPacketsOrSilence(true, false); |
2570 | 2570 |
2571 // Receiver-side network down. | 2571 // Receiver-side network down. |
2572 receiver_call_->SignalNetworkState(Call::kNetworkDown); | 2572 receiver_call_->SignalNetworkState(kNetworkDown); |
2573 WaitForPacketsOrSilence(true, true); | 2573 WaitForPacketsOrSilence(true, true); |
2574 | 2574 |
2575 // Network back up again for both. | 2575 // Network back up again for both. |
2576 { | 2576 { |
2577 rtc::CritScope lock(&test_crit_); | 2577 rtc::CritScope lock(&test_crit_); |
2578 // It's OK to encode frames again, as we're about to bring up the | 2578 // It's OK to encode frames again, as we're about to bring up the |
2579 // network. | 2579 // network. |
2580 sender_state_ = Call::kNetworkUp; | 2580 sender_state_ = kNetworkUp; |
2581 } | 2581 } |
2582 sender_call_->SignalNetworkState(Call::kNetworkUp); | 2582 sender_call_->SignalNetworkState(kNetworkUp); |
2583 receiver_call_->SignalNetworkState(Call::kNetworkUp); | 2583 receiver_call_->SignalNetworkState(kNetworkUp); |
2584 WaitForPacketsOrSilence(false, false); | 2584 WaitForPacketsOrSilence(false, false); |
2585 } | 2585 } |
2586 | 2586 |
2587 int32_t Encode(const VideoFrame& input_image, | 2587 int32_t Encode(const VideoFrame& input_image, |
2588 const CodecSpecificInfo* codec_specific_info, | 2588 const CodecSpecificInfo* codec_specific_info, |
2589 const std::vector<VideoFrameType>* frame_types) override { | 2589 const std::vector<VideoFrameType>* frame_types) override { |
2590 { | 2590 { |
2591 rtc::CritScope lock(&test_crit_); | 2591 rtc::CritScope lock(&test_crit_); |
2592 if (sender_state_ == Call::kNetworkDown) { | 2592 if (sender_state_ == kNetworkDown) { |
2593 ++down_frames_; | 2593 ++down_frames_; |
2594 EXPECT_LE(down_frames_, 1) | 2594 EXPECT_LE(down_frames_, 1) |
2595 << "Encoding more than one frame while network is down."; | 2595 << "Encoding more than one frame while network is down."; |
2596 if (down_frames_ > 1) | 2596 if (down_frames_ > 1) |
2597 encoded_frames_->Set(); | 2597 encoded_frames_->Set(); |
2598 } else { | 2598 } else { |
2599 encoded_frames_->Set(); | 2599 encoded_frames_->Set(); |
2600 } | 2600 } |
2601 } | 2601 } |
2602 return test::FakeEncoder::Encode( | 2602 return test::FakeEncoder::Encode( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2648 receiver_done = true; | 2648 receiver_done = true; |
2649 } | 2649 } |
2650 } | 2650 } |
2651 } | 2651 } |
2652 | 2652 |
2653 rtc::CriticalSection test_crit_; | 2653 rtc::CriticalSection test_crit_; |
2654 const rtc::scoped_ptr<EventWrapper> encoded_frames_; | 2654 const rtc::scoped_ptr<EventWrapper> encoded_frames_; |
2655 const rtc::scoped_ptr<EventWrapper> packet_event_; | 2655 const rtc::scoped_ptr<EventWrapper> packet_event_; |
2656 Call* sender_call_; | 2656 Call* sender_call_; |
2657 Call* receiver_call_; | 2657 Call* receiver_call_; |
2658 Call::NetworkState sender_state_ GUARDED_BY(test_crit_); | 2658 NetworkState sender_state_ GUARDED_BY(test_crit_); |
2659 int sender_rtp_ GUARDED_BY(test_crit_); | 2659 int sender_rtp_ GUARDED_BY(test_crit_); |
2660 int sender_rtcp_ GUARDED_BY(test_crit_); | 2660 int sender_rtcp_ GUARDED_BY(test_crit_); |
2661 int receiver_rtcp_ GUARDED_BY(test_crit_); | 2661 int receiver_rtcp_ GUARDED_BY(test_crit_); |
2662 int down_frames_ GUARDED_BY(test_crit_); | 2662 int down_frames_ GUARDED_BY(test_crit_); |
2663 } test; | 2663 } test; |
2664 | 2664 |
2665 RunBaseTest(&test); | 2665 RunBaseTest(&test); |
2666 } | 2666 } |
2667 | 2667 |
2668 TEST_F(EndToEndTest, CallReportsRttForSender) { | 2668 TEST_F(EndToEndTest, CallReportsRttForSender) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2713 const CodecSpecificInfo* codec_specific_info, | 2713 const CodecSpecificInfo* codec_specific_info, |
2714 const std::vector<VideoFrameType>* frame_types) override { | 2714 const std::vector<VideoFrameType>* frame_types) override { |
2715 ADD_FAILURE() << "Unexpected frame encode."; | 2715 ADD_FAILURE() << "Unexpected frame encode."; |
2716 return test::FakeEncoder::Encode( | 2716 return test::FakeEncoder::Encode( |
2717 input_image, codec_specific_info, frame_types); | 2717 input_image, codec_specific_info, frame_types); |
2718 } | 2718 } |
2719 }; | 2719 }; |
2720 | 2720 |
2721 UnusedTransport transport; | 2721 UnusedTransport transport; |
2722 CreateSenderCall(Call::Config(&transport)); | 2722 CreateSenderCall(Call::Config(&transport)); |
2723 sender_call_->SignalNetworkState(Call::kNetworkDown); | 2723 sender_call_->SignalNetworkState(kNetworkDown); |
2724 | 2724 |
2725 CreateSendConfig(1); | 2725 CreateSendConfig(1); |
2726 UnusedEncoder unused_encoder; | 2726 UnusedEncoder unused_encoder; |
2727 send_config_.encoder_settings.encoder = &unused_encoder; | 2727 send_config_.encoder_settings.encoder = &unused_encoder; |
2728 CreateStreams(); | 2728 CreateStreams(); |
2729 CreateFrameGeneratorCapturer(); | 2729 CreateFrameGeneratorCapturer(); |
2730 | 2730 |
2731 Start(); | 2731 Start(); |
2732 SleepMs(kSilenceTimeoutMs); | 2732 SleepMs(kSilenceTimeoutMs); |
2733 Stop(); | 2733 Stop(); |
2734 | 2734 |
2735 DestroyStreams(); | 2735 DestroyStreams(); |
2736 } | 2736 } |
2737 | 2737 |
2738 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { | 2738 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { |
2739 test::DirectTransport sender_transport; | 2739 test::DirectTransport sender_transport; |
2740 CreateSenderCall(Call::Config(&sender_transport)); | 2740 CreateSenderCall(Call::Config(&sender_transport)); |
2741 UnusedTransport transport; | 2741 UnusedTransport transport; |
2742 CreateReceiverCall(Call::Config(&transport)); | 2742 CreateReceiverCall(Call::Config(&transport)); |
2743 sender_transport.SetReceiver(receiver_call_->Receiver()); | 2743 sender_transport.SetReceiver(receiver_call_->Receiver()); |
2744 | 2744 |
2745 receiver_call_->SignalNetworkState(Call::kNetworkDown); | 2745 receiver_call_->SignalNetworkState(kNetworkDown); |
2746 | 2746 |
2747 CreateSendConfig(1); | 2747 CreateSendConfig(1); |
2748 CreateMatchingReceiveConfigs(); | 2748 CreateMatchingReceiveConfigs(); |
2749 CreateStreams(); | 2749 CreateStreams(); |
2750 CreateFrameGeneratorCapturer(); | 2750 CreateFrameGeneratorCapturer(); |
2751 | 2751 |
2752 Start(); | 2752 Start(); |
2753 SleepMs(kSilenceTimeoutMs); | 2753 SleepMs(kSilenceTimeoutMs); |
2754 Stop(); | 2754 Stop(); |
2755 | 2755 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2831 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) | 2831 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) |
2832 << "Enabling RTX requires rtpmap: rtx negotiation."; | 2832 << "Enabling RTX requires rtpmap: rtx negotiation."; |
2833 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 2833 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
2834 << "Enabling RTP extensions require negotiation."; | 2834 << "Enabling RTP extensions require negotiation."; |
2835 | 2835 |
2836 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 2836 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
2837 VerifyEmptyFecConfig(default_receive_config.rtp.fec); | 2837 VerifyEmptyFecConfig(default_receive_config.rtp.fec); |
2838 } | 2838 } |
2839 | 2839 |
2840 } // namespace webrtc | 2840 } // namespace webrtc |
OLD | NEW |