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> // max | 10 #include <algorithm> // max |
11 #include <memory> | 11 #include <memory> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 | 15 |
16 #include "webrtc/base/bind.h" | 16 #include "webrtc/base/bind.h" |
17 #include "webrtc/base/checks.h" | 17 #include "webrtc/base/checks.h" |
18 #include "webrtc/base/criticalsection.h" | 18 #include "webrtc/base/criticalsection.h" |
19 #include "webrtc/base/event.h" | 19 #include "webrtc/base/event.h" |
20 #include "webrtc/base/logging.h" | 20 #include "webrtc/base/logging.h" |
21 #include "webrtc/base/platform_thread.h" | 21 #include "webrtc/base/platform_thread.h" |
| 22 #include "webrtc/base/rate_limiter.h" |
22 #include "webrtc/call.h" | 23 #include "webrtc/call.h" |
23 #include "webrtc/call/transport_adapter.h" | 24 #include "webrtc/call/transport_adapter.h" |
24 #include "webrtc/common_video/include/frame_callback.h" | 25 #include "webrtc/common_video/include/frame_callback.h" |
25 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" | 26 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
26 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" | 27 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
27 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
28 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
29 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" | 30 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" |
30 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" | 31 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
31 #include "webrtc/system_wrappers/include/sleep.h" | 32 #include "webrtc/system_wrappers/include/sleep.h" |
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 // is no longer suspended, the test ends. | 813 // is no longer suspended, the test ends. |
813 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { | 814 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
814 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps. | 815 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps. |
815 | 816 |
816 class RembObserver : public test::SendTest, | 817 class RembObserver : public test::SendTest, |
817 public rtc::VideoSinkInterface<VideoFrame> { | 818 public rtc::VideoSinkInterface<VideoFrame> { |
818 public: | 819 public: |
819 RembObserver() | 820 RembObserver() |
820 : SendTest(kDefaultTimeoutMs), | 821 : SendTest(kDefaultTimeoutMs), |
821 clock_(Clock::GetRealTimeClock()), | 822 clock_(Clock::GetRealTimeClock()), |
| 823 stream_(nullptr), |
822 test_state_(kBeforeSuspend), | 824 test_state_(kBeforeSuspend), |
823 rtp_count_(0), | 825 rtp_count_(0), |
824 last_sequence_number_(0), | 826 last_sequence_number_(0), |
825 suspended_frame_count_(0), | 827 suspended_frame_count_(0), |
826 low_remb_bps_(0), | 828 low_remb_bps_(0), |
827 high_remb_bps_(0) { | 829 high_remb_bps_(0) {} |
828 } | |
829 | 830 |
830 private: | 831 private: |
831 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 832 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
832 rtc::CritScope lock(&crit_); | 833 rtc::CritScope lock(&crit_); |
833 ++rtp_count_; | 834 ++rtp_count_; |
834 RTPHeader header; | 835 RTPHeader header; |
835 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 836 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
836 last_sequence_number_ = header.sequenceNumber; | 837 last_sequence_number_ = header.sequenceNumber; |
837 | 838 |
838 if (test_state_ == kBeforeSuspend) { | 839 if (test_state_ == kBeforeSuspend) { |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 // bitrate since no receiver block or remb is sent in the initial phase. | 1043 // bitrate since no receiver block or remb is sent in the initial phase. |
1043 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { | 1044 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { |
1044 static const int kMinTransmitBitrateBps = 400000; | 1045 static const int kMinTransmitBitrateBps = 400000; |
1045 static const int kHighBitrateBps = 150000; | 1046 static const int kHighBitrateBps = 150000; |
1046 static const int kRembBitrateBps = 80000; | 1047 static const int kRembBitrateBps = 80000; |
1047 static const int kRembRespectedBitrateBps = 100000; | 1048 static const int kRembRespectedBitrateBps = 100000; |
1048 class BitrateObserver : public test::SendTest { | 1049 class BitrateObserver : public test::SendTest { |
1049 public: | 1050 public: |
1050 BitrateObserver() | 1051 BitrateObserver() |
1051 : SendTest(kDefaultTimeoutMs), | 1052 : SendTest(kDefaultTimeoutMs), |
1052 bitrate_capped_(false) { | 1053 retranmission_rate_limiter_(Clock::GetRealTimeClock(), 1000), |
1053 } | 1054 stream_(nullptr), |
| 1055 bitrate_capped_(false) {} |
1054 | 1056 |
1055 private: | 1057 private: |
1056 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1058 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1057 if (RtpHeaderParser::IsRtcp(packet, length)) | 1059 if (RtpHeaderParser::IsRtcp(packet, length)) |
1058 return DROP_PACKET; | 1060 return DROP_PACKET; |
1059 | 1061 |
1060 RTPHeader header; | 1062 RTPHeader header; |
1061 if (!parser_->Parse(packet, length, &header)) | 1063 if (!parser_->Parse(packet, length, &header)) |
1062 return DROP_PACKET; | 1064 return DROP_PACKET; |
1063 RTC_DCHECK(stream_); | 1065 RTC_DCHECK(stream_); |
(...skipping 21 matching lines...) Expand all Loading... |
1085 // Packets don't have to be delivered since the test is the receiver. | 1087 // Packets don't have to be delivered since the test is the receiver. |
1086 return DROP_PACKET; | 1088 return DROP_PACKET; |
1087 } | 1089 } |
1088 | 1090 |
1089 void OnVideoStreamsCreated( | 1091 void OnVideoStreamsCreated( |
1090 VideoSendStream* send_stream, | 1092 VideoSendStream* send_stream, |
1091 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1093 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1092 stream_ = send_stream; | 1094 stream_ = send_stream; |
1093 RtpRtcp::Configuration config; | 1095 RtpRtcp::Configuration config; |
1094 config.outgoing_transport = feedback_transport_.get(); | 1096 config.outgoing_transport = feedback_transport_.get(); |
| 1097 config.retransmission_rate_limiter = &retranmission_rate_limiter_; |
1095 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); | 1098 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
1096 rtp_rtcp_->SetREMBStatus(true); | 1099 rtp_rtcp_->SetREMBStatus(true); |
1097 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); | 1100 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
1098 } | 1101 } |
1099 | 1102 |
1100 void ModifyVideoConfigs( | 1103 void ModifyVideoConfigs( |
1101 VideoSendStream::Config* send_config, | 1104 VideoSendStream::Config* send_config, |
1102 std::vector<VideoReceiveStream::Config>* receive_configs, | 1105 std::vector<VideoReceiveStream::Config>* receive_configs, |
1103 VideoEncoderConfig* encoder_config) override { | 1106 VideoEncoderConfig* encoder_config) override { |
1104 feedback_transport_.reset( | 1107 feedback_transport_.reset( |
1105 new internal::TransportAdapter(send_config->send_transport)); | 1108 new internal::TransportAdapter(send_config->send_transport)); |
1106 feedback_transport_->Enable(); | 1109 feedback_transport_->Enable(); |
1107 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1110 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1108 } | 1111 } |
1109 | 1112 |
1110 void PerformTest() override { | 1113 void PerformTest() override { |
1111 EXPECT_TRUE(Wait()) | 1114 EXPECT_TRUE(Wait()) |
1112 << "Timeout while waiting for low bitrate stats after REMB."; | 1115 << "Timeout while waiting for low bitrate stats after REMB."; |
1113 } | 1116 } |
1114 | 1117 |
1115 std::unique_ptr<RtpRtcp> rtp_rtcp_; | 1118 std::unique_ptr<RtpRtcp> rtp_rtcp_; |
1116 std::unique_ptr<internal::TransportAdapter> feedback_transport_; | 1119 std::unique_ptr<internal::TransportAdapter> feedback_transport_; |
| 1120 RateLimiter retranmission_rate_limiter_; |
1117 VideoSendStream* stream_; | 1121 VideoSendStream* stream_; |
1118 bool bitrate_capped_; | 1122 bool bitrate_capped_; |
1119 } test; | 1123 } test; |
1120 | 1124 |
1121 RunBaseTest(&test); | 1125 RunBaseTest(&test); |
1122 } | 1126 } |
1123 | 1127 |
1124 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { | 1128 TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
1125 class ChangingNetworkRouteTest : public test::EndToEndTest { | 1129 class ChangingNetworkRouteTest : public test::EndToEndTest { |
1126 public: | 1130 public: |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 frame.set_timestamp(data); | 1501 frame.set_timestamp(data); |
1498 frame.set_render_time_ms(data); | 1502 frame.set_render_time_ms(data); |
1499 return frame; | 1503 return frame; |
1500 } | 1504 } |
1501 | 1505 |
1502 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { | 1506 TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
1503 class EncoderStateObserver : public test::SendTest, public VideoEncoder { | 1507 class EncoderStateObserver : public test::SendTest, public VideoEncoder { |
1504 public: | 1508 public: |
1505 EncoderStateObserver() | 1509 EncoderStateObserver() |
1506 : SendTest(kDefaultTimeoutMs), | 1510 : SendTest(kDefaultTimeoutMs), |
| 1511 stream_(nullptr), |
1507 initialized_(false), | 1512 initialized_(false), |
1508 callback_registered_(false), | 1513 callback_registered_(false), |
1509 num_releases_(0), | 1514 num_releases_(0), |
1510 released_(false) {} | 1515 released_(false) {} |
1511 | 1516 |
1512 bool IsReleased() { | 1517 bool IsReleased() { |
1513 rtc::CritScope lock(&crit_); | 1518 rtc::CritScope lock(&crit_); |
1514 return released_; | 1519 return released_; |
1515 } | 1520 } |
1516 | 1521 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 } | 1622 } |
1618 | 1623 |
1619 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1624 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
1620 class VideoCodecConfigObserver : public test::SendTest, | 1625 class VideoCodecConfigObserver : public test::SendTest, |
1621 public test::FakeEncoder { | 1626 public test::FakeEncoder { |
1622 public: | 1627 public: |
1623 VideoCodecConfigObserver() | 1628 VideoCodecConfigObserver() |
1624 : SendTest(kDefaultTimeoutMs), | 1629 : SendTest(kDefaultTimeoutMs), |
1625 FakeEncoder(Clock::GetRealTimeClock()), | 1630 FakeEncoder(Clock::GetRealTimeClock()), |
1626 init_encode_event_(false, false), | 1631 init_encode_event_(false, false), |
1627 num_initializations_(0) {} | 1632 num_initializations_(0), |
| 1633 stream_(nullptr) {} |
1628 | 1634 |
1629 private: | 1635 private: |
1630 void ModifyVideoConfigs( | 1636 void ModifyVideoConfigs( |
1631 VideoSendStream::Config* send_config, | 1637 VideoSendStream::Config* send_config, |
1632 std::vector<VideoReceiveStream::Config>* receive_configs, | 1638 std::vector<VideoReceiveStream::Config>* receive_configs, |
1633 VideoEncoderConfig* encoder_config) override { | 1639 VideoEncoderConfig* encoder_config) override { |
1634 send_config->encoder_settings.encoder = this; | 1640 send_config->encoder_settings.encoder = this; |
1635 encoder_config_ = *encoder_config; | 1641 encoder_config_ = *encoder_config; |
1636 } | 1642 } |
1637 | 1643 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1682 class VideoCodecConfigObserver : public test::SendTest, | 1688 class VideoCodecConfigObserver : public test::SendTest, |
1683 public test::FakeEncoder { | 1689 public test::FakeEncoder { |
1684 public: | 1690 public: |
1685 VideoCodecConfigObserver(VideoCodecType video_codec_type, | 1691 VideoCodecConfigObserver(VideoCodecType video_codec_type, |
1686 const char* codec_name) | 1692 const char* codec_name) |
1687 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1693 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
1688 FakeEncoder(Clock::GetRealTimeClock()), | 1694 FakeEncoder(Clock::GetRealTimeClock()), |
1689 video_codec_type_(video_codec_type), | 1695 video_codec_type_(video_codec_type), |
1690 codec_name_(codec_name), | 1696 codec_name_(codec_name), |
1691 init_encode_event_(false, false), | 1697 init_encode_event_(false, false), |
1692 num_initializations_(0) { | 1698 num_initializations_(0), |
| 1699 stream_(nullptr) { |
1693 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); | 1700 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
1694 } | 1701 } |
1695 | 1702 |
1696 private: | 1703 private: |
1697 void ModifyVideoConfigs( | 1704 void ModifyVideoConfigs( |
1698 VideoSendStream::Config* send_config, | 1705 VideoSendStream::Config* send_config, |
1699 std::vector<VideoReceiveStream::Config>* receive_configs, | 1706 std::vector<VideoReceiveStream::Config>* receive_configs, |
1700 VideoEncoderConfig* encoder_config) override { | 1707 VideoEncoderConfig* encoder_config) override { |
1701 send_config->encoder_settings.encoder = this; | 1708 send_config->encoder_settings.encoder = this; |
1702 send_config->encoder_settings.payload_name = codec_name_; | 1709 send_config->encoder_settings.payload_name = codec_name_; |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1924 static const int kMaxBitrateKbps = 413; | 1931 static const int kMaxBitrateKbps = 413; |
1925 static const int kIncreasedStartBitrateKbps = 451; | 1932 static const int kIncreasedStartBitrateKbps = 451; |
1926 static const int kIncreasedMaxBitrateKbps = 597; | 1933 static const int kIncreasedMaxBitrateKbps = 597; |
1927 class EncoderBitrateThresholdObserver : public test::SendTest, | 1934 class EncoderBitrateThresholdObserver : public test::SendTest, |
1928 public test::FakeEncoder { | 1935 public test::FakeEncoder { |
1929 public: | 1936 public: |
1930 EncoderBitrateThresholdObserver() | 1937 EncoderBitrateThresholdObserver() |
1931 : SendTest(kDefaultTimeoutMs), | 1938 : SendTest(kDefaultTimeoutMs), |
1932 FakeEncoder(Clock::GetRealTimeClock()), | 1939 FakeEncoder(Clock::GetRealTimeClock()), |
1933 init_encode_event_(false, false), | 1940 init_encode_event_(false, false), |
1934 num_initializations_(0) {} | 1941 num_initializations_(0), |
| 1942 call_(nullptr), |
| 1943 send_stream_(nullptr) {} |
1935 | 1944 |
1936 private: | 1945 private: |
1937 int32_t InitEncode(const VideoCodec* codecSettings, | 1946 int32_t InitEncode(const VideoCodec* codecSettings, |
1938 int32_t numberOfCores, | 1947 int32_t numberOfCores, |
1939 size_t maxPayloadSize) override { | 1948 size_t maxPayloadSize) override { |
1940 if (num_initializations_ == 0) { | 1949 if (num_initializations_ == 0) { |
1941 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1950 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1942 codecSettings->minBitrate); | 1951 codecSettings->minBitrate); |
1943 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1952 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1944 codecSettings->startBitrate); | 1953 codecSettings->startBitrate); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2038 static const struct { | 2047 static const struct { |
2039 int width; | 2048 int width; |
2040 int height; | 2049 int height; |
2041 } kEncodedResolution[kNumStreams] = { | 2050 } kEncodedResolution[kNumStreams] = { |
2042 {241, 181}, {300, 121}, {121, 221}}; | 2051 {241, 181}, {300, 121}, {121, 221}}; |
2043 class ScreencastTargetBitrateTest : public test::SendTest, | 2052 class ScreencastTargetBitrateTest : public test::SendTest, |
2044 public test::FakeEncoder { | 2053 public test::FakeEncoder { |
2045 public: | 2054 public: |
2046 ScreencastTargetBitrateTest() | 2055 ScreencastTargetBitrateTest() |
2047 : SendTest(kDefaultTimeoutMs), | 2056 : SendTest(kDefaultTimeoutMs), |
2048 test::FakeEncoder(Clock::GetRealTimeClock()) {} | 2057 test::FakeEncoder(Clock::GetRealTimeClock()), |
| 2058 send_stream_(nullptr) {} |
2049 | 2059 |
2050 private: | 2060 private: |
2051 int32_t Encode(const VideoFrame& input_image, | 2061 int32_t Encode(const VideoFrame& input_image, |
2052 const CodecSpecificInfo* codecSpecificInfo, | 2062 const CodecSpecificInfo* codecSpecificInfo, |
2053 const std::vector<FrameType>* frame_types) override { | 2063 const std::vector<FrameType>* frame_types) override { |
2054 CodecSpecificInfo specifics; | 2064 CodecSpecificInfo specifics; |
2055 specifics.codecType = kVideoCodecGeneric; | 2065 specifics.codecType = kVideoCodecGeneric; |
2056 | 2066 |
2057 uint8_t buffer[16] = {0}; | 2067 uint8_t buffer[16] = {0}; |
2058 EncodedImage encoded(buffer, sizeof(buffer), sizeof(buffer)); | 2068 EncodedImage encoded(buffer, sizeof(buffer), sizeof(buffer)); |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2515 observation_complete_.Set(); | 2525 observation_complete_.Set(); |
2516 } | 2526 } |
2517 } | 2527 } |
2518 } test; | 2528 } test; |
2519 | 2529 |
2520 RunBaseTest(&test); | 2530 RunBaseTest(&test); |
2521 } | 2531 } |
2522 #endif // !defined(RTC_DISABLE_VP9) | 2532 #endif // !defined(RTC_DISABLE_VP9) |
2523 | 2533 |
2524 } // namespace webrtc | 2534 } // namespace webrtc |
OLD | NEW |