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

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

Issue 1993113003: Refactor how padding is calculated. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Self review Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> // max 10 #include <algorithm> // max
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 int rtp_count_ GUARDED_BY(crit_); 944 int rtp_count_ GUARDED_BY(crit_);
945 int last_sequence_number_ GUARDED_BY(crit_); 945 int last_sequence_number_ GUARDED_BY(crit_);
946 int suspended_frame_count_ GUARDED_BY(crit_); 946 int suspended_frame_count_ GUARDED_BY(crit_);
947 int low_remb_bps_ GUARDED_BY(crit_); 947 int low_remb_bps_ GUARDED_BY(crit_);
948 int high_remb_bps_ GUARDED_BY(crit_); 948 int high_remb_bps_ GUARDED_BY(crit_);
949 } test; 949 } test;
950 950
951 RunBaseTest(&test); 951 RunBaseTest(&test);
952 } 952 }
953 953
954 // This test that padding stops being send after a while if the Camera stops
955 // producing video frames and that padding resumes if the camera restarts.
954 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { 956 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) {
955 class NoPaddingWhenVideoIsMuted : public test::SendTest { 957 class NoPaddingWhenVideoIsMuted : public test::SendTest {
956 public: 958 public:
957 NoPaddingWhenVideoIsMuted() 959 NoPaddingWhenVideoIsMuted()
958 : SendTest(kDefaultTimeoutMs), 960 : SendTest(kDefaultTimeoutMs),
959 clock_(Clock::GetRealTimeClock()), 961 clock_(Clock::GetRealTimeClock()),
960 last_packet_time_ms_(-1), 962 last_packet_time_ms_(-1),
961 capturer_(nullptr) { 963 capturer_(nullptr) {
962 } 964 }
963 965
964 private: 966 private:
965 Action OnSendRtp(const uint8_t* packet, size_t length) override { 967 Action OnSendRtp(const uint8_t* packet, size_t length) override {
966 rtc::CritScope lock(&crit_); 968 rtc::CritScope lock(&crit_);
967 last_packet_time_ms_ = clock_->TimeInMilliseconds(); 969 last_packet_time_ms_ = clock_->TimeInMilliseconds();
968 capturer_->Stop(); 970
971 RTPHeader header;
972 parser_->Parse(packet, length, &header);
973 const bool only_padding =
974 header.headerLength + header.paddingLength == length;
975
976 if (test_state_ == kBeforeStopCapture) {
977 capturer_->Stop();
978 test_state_ = kWaitingForPadding;
979 } else if (test_state_ == kWaitingForPadding && only_padding) {
980 test_state_ = kWaitingForNoPackets;
981 } else if (test_state_ == kWaitingForPaddingAfterCameraRestart &&
982 only_padding) {
983 observation_complete_.Set();
984 }
969 return SEND_PACKET; 985 return SEND_PACKET;
970 } 986 }
971 987
972 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 988 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
973 rtc::CritScope lock(&crit_); 989 rtc::CritScope lock(&crit_);
974 const int kVideoMutedThresholdMs = 10000; 990 const int kNoPacketsThresholdMs = 2000;
975 if (last_packet_time_ms_ > 0 && 991 if (test_state_ == kWaitingForNoPackets &&
976 clock_->TimeInMilliseconds() - last_packet_time_ms_ > 992 (last_packet_time_ms_ > 0 &&
977 kVideoMutedThresholdMs) 993 clock_->TimeInMilliseconds() - last_packet_time_ms_ >
978 observation_complete_.Set(); 994 kNoPacketsThresholdMs)) {
979 // Receive statistics reporting having lost 50% of the packets. 995 capturer_->Start();
980 FakeReceiveStatistics receive_stats(kVideoSendSsrcs[0], 1, 1, 0); 996 test_state_ = kWaitingForPaddingAfterCameraRestart;
981 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, 997 }
982 nullptr, nullptr, transport_adapter_.get());
983
984 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
985 rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);
986
987 RTCPSender::FeedbackState feedback_state;
988
989 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
990 return SEND_PACKET; 998 return SEND_PACKET;
991 } 999 }
992 1000
993 test::PacketTransport* CreateReceiveTransport() override {
994 test::PacketTransport* transport = new test::PacketTransport(
995 nullptr, this, test::PacketTransport::kReceiver,
996 FakeNetworkPipe::Config());
997 transport_adapter_.reset(new internal::TransportAdapter(transport));
998 transport_adapter_->Enable();
999 return transport;
1000 }
1001
1002 size_t GetNumVideoStreams() const override { return 3; } 1001 size_t GetNumVideoStreams() const override { return 3; }
1003 1002
1004 void OnFrameGeneratorCapturerCreated( 1003 void OnFrameGeneratorCapturerCreated(
1005 test::FrameGeneratorCapturer* frame_generator_capturer) override { 1004 test::FrameGeneratorCapturer* frame_generator_capturer) override {
1006 rtc::CritScope lock(&crit_); 1005 rtc::CritScope lock(&crit_);
1007 capturer_ = frame_generator_capturer; 1006 capturer_ = frame_generator_capturer;
1008 } 1007 }
1009 1008
1010 void PerformTest() override { 1009 void PerformTest() override {
1011 EXPECT_TRUE(Wait()) 1010 EXPECT_TRUE(Wait())
1012 << "Timed out while waiting for RTP packets to stop being sent."; 1011 << "Timed out while waiting for RTP packets to stop being sent.";
1013 } 1012 }
1014 1013
1014 enum TestState {
1015 kBeforeStopCapture,
1016 kWaitingForPadding,
1017 kWaitingForNoPackets,
1018 kWaitingForPaddingAfterCameraRestart
1019 };
1020
1021 TestState test_state_ = kBeforeStopCapture;
1015 Clock* const clock_; 1022 Clock* const clock_;
1016 std::unique_ptr<internal::TransportAdapter> transport_adapter_; 1023 std::unique_ptr<internal::TransportAdapter> transport_adapter_;
1017 rtc::CriticalSection crit_; 1024 rtc::CriticalSection crit_;
1018 int64_t last_packet_time_ms_ GUARDED_BY(crit_); 1025 int64_t last_packet_time_ms_ GUARDED_BY(crit_);
1019 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); 1026 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_);
1020 } test; 1027 } test;
1021 1028
1022 RunBaseTest(&test); 1029 RunBaseTest(&test);
1023 } 1030 }
1024 1031
(...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2292 observation_complete_.Set(); 2299 observation_complete_.Set();
2293 } 2300 }
2294 } 2301 }
2295 } test; 2302 } test;
2296 2303
2297 RunBaseTest(&test); 2304 RunBaseTest(&test);
2298 } 2305 }
2299 #endif // !defined(RTC_DISABLE_VP9) 2306 #endif // !defined(RTC_DISABLE_VP9)
2300 2307
2301 } // namespace webrtc 2308 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698