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 |
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
859 if (stats.suspended == false) { | 859 if (stats.suspended == false) { |
860 // Stats flipped to false. Test is complete. | 860 // Stats flipped to false. Test is complete. |
861 observation_complete_.Set(); | 861 observation_complete_.Set(); |
862 } | 862 } |
863 SendRtcpFeedback(0); // REMB is only sent if value is > 0. | 863 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
864 } | 864 } |
865 | 865 |
866 return SEND_PACKET; | 866 return SEND_PACKET; |
867 } | 867 } |
868 | 868 |
869 // This method implements the rtc::VideoSinkInterface | 869 // This method implements the rtc::VideoSinkInterface. This is called when |
| 870 // a frame is provided to the VideoSendStream. |
870 void OnFrame(const VideoFrame& video_frame) override { | 871 void OnFrame(const VideoFrame& video_frame) override { |
871 rtc::CritScope lock(&crit_); | 872 rtc::CritScope lock(&crit_); |
872 if (test_state_ == kDuringSuspend && | 873 if (test_state_ == kDuringSuspend && |
873 ++suspended_frame_count_ > kSuspendTimeFrames) { | 874 ++suspended_frame_count_ > kSuspendTimeFrames) { |
874 VideoSendStream::Stats stats = stream_->GetStats(); | 875 VideoSendStream::Stats stats = stream_->GetStats(); |
875 EXPECT_TRUE(stats.suspended); | 876 EXPECT_TRUE(stats.suspended); |
876 SendRtcpFeedback(high_remb_bps_); | 877 SendRtcpFeedback(high_remb_bps_); |
877 test_state_ = kWaitingForPacket; | 878 test_state_ = kWaitingForPacket; |
878 } | 879 } |
879 } | 880 } |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1198 VideoEncoderConfig* encoder_config) override { | 1199 VideoEncoderConfig* encoder_config) override { |
1199 RTC_DCHECK_EQ(1u, encoder_config->streams.size()); | 1200 RTC_DCHECK_EQ(1u, encoder_config->streams.size()); |
1200 if (running_without_padding_) { | 1201 if (running_without_padding_) { |
1201 encoder_config->min_transmit_bitrate_bps = 0; | 1202 encoder_config->min_transmit_bitrate_bps = 0; |
1202 encoder_config->content_type = | 1203 encoder_config->content_type = |
1203 VideoEncoderConfig::ContentType::kRealtimeVideo; | 1204 VideoEncoderConfig::ContentType::kRealtimeVideo; |
1204 } else { | 1205 } else { |
1205 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1206 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1206 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 1207 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
1207 } | 1208 } |
1208 encoder_config_ = *encoder_config; | 1209 encoder_config_ = encoder_config->Copy(); |
1209 } | 1210 } |
1210 | 1211 |
1211 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1212 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1212 call_ = sender_call; | 1213 call_ = sender_call; |
1213 } | 1214 } |
1214 | 1215 |
1215 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1216 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1216 rtc::CritScope lock(&crit_); | 1217 rtc::CritScope lock(&crit_); |
1217 | 1218 |
1218 if (running_without_padding_) | 1219 if (running_without_padding_) |
1219 EXPECT_EQ(0, call_->GetStats().max_padding_bitrate_bps); | 1220 EXPECT_EQ(0, call_->GetStats().max_padding_bitrate_bps); |
1220 | 1221 |
1221 // Wait until at least kMinPacketsToSend frames have been encoded, so that | 1222 // Wait until at least kMinPacketsToSend frames have been encoded, so that |
1222 // we have reliable data. | 1223 // we have reliable data. |
1223 if (++packets_sent_ < kMinPacketsToSend) | 1224 if (++packets_sent_ < kMinPacketsToSend) |
1224 return SEND_PACKET; | 1225 return SEND_PACKET; |
1225 | 1226 |
1226 if (running_without_padding_) { | 1227 if (running_without_padding_) { |
1227 // We've sent kMinPacketsToSend packets with default configuration, switch | 1228 // We've sent kMinPacketsToSend packets with default configuration, switch |
1228 // to enabling screen content and setting min transmit bitrate. | 1229 // to enabling screen content and setting min transmit bitrate. |
1229 packets_sent_ = 0; | 1230 packets_sent_ = 0; |
1230 encoder_config_.min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1231 encoder_config_.min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1231 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1232 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1232 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1233 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
1233 running_without_padding_ = false; | 1234 running_without_padding_ = false; |
1234 return SEND_PACKET; | 1235 return SEND_PACKET; |
1235 } | 1236 } |
1236 | 1237 |
1237 // Make sure the pacer has been configured with a min transmit bitrate. | 1238 // Make sure the pacer has been configured with a min transmit bitrate. |
1238 if (call_->GetStats().max_padding_bitrate_bps > 0) | 1239 if (call_->GetStats().max_padding_bitrate_bps > 0) |
1239 observation_complete_.Set(); | 1240 observation_complete_.Set(); |
1240 | 1241 |
1241 return SEND_PACKET; | 1242 return SEND_PACKET; |
1242 } | 1243 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1317 video_send_config_.encoder_settings.encoder = &encoder; | 1318 video_send_config_.encoder_settings.encoder = &encoder; |
1318 | 1319 |
1319 CreateVideoStreams(); | 1320 CreateVideoStreams(); |
1320 | 1321 |
1321 EXPECT_TRUE(encoder.WaitForStartBitrate()); | 1322 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1322 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 1323 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
1323 encoder.GetStartBitrateKbps()); | 1324 encoder.GetStartBitrateKbps()); |
1324 | 1325 |
1325 video_encoder_config_.streams[0].max_bitrate_bps = | 1326 video_encoder_config_.streams[0].max_bitrate_bps = |
1326 2 * bitrate_config.start_bitrate_bps; | 1327 2 * bitrate_config.start_bitrate_bps; |
1327 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 1328 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); |
1328 | 1329 |
1329 // New bitrate should be reconfigured above the previous max. As there's no | 1330 // New bitrate should be reconfigured above the previous max. As there's no |
1330 // network connection this shouldn't be flaky, as no bitrate should've been | 1331 // network connection this shouldn't be flaky, as no bitrate should've been |
1331 // reported in between. | 1332 // reported in between. |
1332 EXPECT_TRUE(encoder.WaitForStartBitrate()); | 1333 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1333 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1334 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1334 encoder.GetStartBitrateKbps()); | 1335 encoder.GetStartBitrateKbps()); |
1335 | 1336 |
1336 DestroyStreams(); | 1337 DestroyStreams(); |
1337 } | 1338 } |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1582 VideoSendStream* send_stream, | 1583 VideoSendStream* send_stream, |
1583 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1584 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1584 stream_ = send_stream; | 1585 stream_ = send_stream; |
1585 } | 1586 } |
1586 | 1587 |
1587 void ModifyVideoConfigs( | 1588 void ModifyVideoConfigs( |
1588 VideoSendStream::Config* send_config, | 1589 VideoSendStream::Config* send_config, |
1589 std::vector<VideoReceiveStream::Config>* receive_configs, | 1590 std::vector<VideoReceiveStream::Config>* receive_configs, |
1590 VideoEncoderConfig* encoder_config) override { | 1591 VideoEncoderConfig* encoder_config) override { |
1591 send_config->encoder_settings.encoder = this; | 1592 send_config->encoder_settings.encoder = this; |
1592 encoder_config_ = *encoder_config; | 1593 encoder_config_ = encoder_config->Copy(); |
1593 } | 1594 } |
1594 | 1595 |
1595 void PerformTest() override { | 1596 void PerformTest() override { |
1596 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 1597 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1597 EXPECT_EQ(0u, num_releases()); | 1598 EXPECT_EQ(0u, num_releases()); |
1598 stream_->ReconfigureVideoEncoder(encoder_config_); | 1599 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1599 EXPECT_EQ(0u, num_releases()); | 1600 EXPECT_EQ(0u, num_releases()); |
1600 stream_->Stop(); | 1601 stream_->Stop(); |
1601 // Encoder should not be released before destroying the VideoSendStream. | 1602 // Encoder should not be released before destroying the VideoSendStream. |
1602 EXPECT_FALSE(IsReleased()); | 1603 EXPECT_FALSE(IsReleased()); |
1603 EXPECT_TRUE(IsReadyForEncode()); | 1604 EXPECT_TRUE(IsReadyForEncode()); |
1604 stream_->Start(); | 1605 stream_->Start(); |
1605 // Sanity check, make sure we still encode frames with this encoder. | 1606 // Sanity check, make sure we still encode frames with this encoder. |
1606 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 1607 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1607 } | 1608 } |
1608 | 1609 |
(...skipping 22 matching lines...) Expand all Loading... |
1631 init_encode_event_(false, false), | 1632 init_encode_event_(false, false), |
1632 num_initializations_(0), | 1633 num_initializations_(0), |
1633 stream_(nullptr) {} | 1634 stream_(nullptr) {} |
1634 | 1635 |
1635 private: | 1636 private: |
1636 void ModifyVideoConfigs( | 1637 void ModifyVideoConfigs( |
1637 VideoSendStream::Config* send_config, | 1638 VideoSendStream::Config* send_config, |
1638 std::vector<VideoReceiveStream::Config>* receive_configs, | 1639 std::vector<VideoReceiveStream::Config>* receive_configs, |
1639 VideoEncoderConfig* encoder_config) override { | 1640 VideoEncoderConfig* encoder_config) override { |
1640 send_config->encoder_settings.encoder = this; | 1641 send_config->encoder_settings.encoder = this; |
1641 encoder_config_ = *encoder_config; | 1642 encoder_config_ = encoder_config->Copy(); |
1642 } | 1643 } |
1643 | 1644 |
1644 void OnVideoStreamsCreated( | 1645 void OnVideoStreamsCreated( |
1645 VideoSendStream* send_stream, | 1646 VideoSendStream* send_stream, |
1646 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1647 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1647 stream_ = send_stream; | 1648 stream_ = send_stream; |
1648 } | 1649 } |
1649 | 1650 |
1650 int32_t InitEncode(const VideoCodec* config, | 1651 int32_t InitEncode(const VideoCodec* config, |
1651 int32_t number_of_cores, | 1652 int32_t number_of_cores, |
1652 size_t max_payload_size) override { | 1653 size_t max_payload_size) override { |
1653 if (num_initializations_ == 0) { | 1654 if (num_initializations_ == 0) { |
1654 // Verify default values. | 1655 // Verify default values. |
1655 EXPECT_EQ(kRealtimeVideo, config->mode); | 1656 EXPECT_EQ(kRealtimeVideo, config->mode); |
1656 } else { | 1657 } else { |
1657 // Verify that changed values are propagated. | 1658 // Verify that changed values are propagated. |
1658 EXPECT_EQ(kScreensharing, config->mode); | 1659 EXPECT_EQ(kScreensharing, config->mode); |
1659 } | 1660 } |
1660 ++num_initializations_; | 1661 ++num_initializations_; |
1661 init_encode_event_.Set(); | 1662 init_encode_event_.Set(); |
1662 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1663 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1663 } | 1664 } |
1664 | 1665 |
1665 void PerformTest() override { | 1666 void PerformTest() override { |
1666 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); | 1667 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1667 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1668 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1668 | 1669 |
1669 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1670 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1670 stream_->ReconfigureVideoEncoder(encoder_config_); | 1671 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1671 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); | 1672 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1672 EXPECT_EQ(2u, num_initializations_) | 1673 EXPECT_EQ(2u, num_initializations_) |
1673 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1674 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1674 "new encoder settings."; | 1675 "new encoder settings."; |
1675 } | 1676 } |
1676 | 1677 |
1677 rtc::Event init_encode_event_; | 1678 rtc::Event init_encode_event_; |
1678 size_t num_initializations_; | 1679 size_t num_initializations_; |
1679 VideoSendStream* stream_; | 1680 VideoSendStream* stream_; |
1680 VideoEncoderConfig encoder_config_; | 1681 VideoEncoderConfig encoder_config_; |
(...skipping 26 matching lines...) Expand all Loading... |
1707 VideoEncoderConfig* encoder_config) override { | 1708 VideoEncoderConfig* encoder_config) override { |
1708 send_config->encoder_settings.encoder = this; | 1709 send_config->encoder_settings.encoder = this; |
1709 send_config->encoder_settings.payload_name = codec_name_; | 1710 send_config->encoder_settings.payload_name = codec_name_; |
1710 | 1711 |
1711 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 1712 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
1712 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( | 1713 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( |
1713 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); | 1714 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); |
1714 } | 1715 } |
1715 | 1716 |
1716 encoder_config->encoder_specific_settings = &encoder_settings_; | 1717 encoder_config->encoder_specific_settings = &encoder_settings_; |
1717 encoder_config_ = *encoder_config; | 1718 encoder_config_ = encoder_config->Copy(); |
1718 } | 1719 } |
1719 | 1720 |
1720 void OnVideoStreamsCreated( | 1721 void OnVideoStreamsCreated( |
1721 VideoSendStream* send_stream, | 1722 VideoSendStream* send_stream, |
1722 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1723 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1723 stream_ = send_stream; | 1724 stream_ = send_stream; |
1724 } | 1725 } |
1725 | 1726 |
1726 int32_t InitEncode(const VideoCodec* config, | 1727 int32_t InitEncode(const VideoCodec* config, |
1727 int32_t number_of_cores, | 1728 int32_t number_of_cores, |
1728 size_t max_payload_size) override { | 1729 size_t max_payload_size) override { |
1729 EXPECT_EQ(video_codec_type_, config->codecType); | 1730 EXPECT_EQ(video_codec_type_, config->codecType); |
1730 VerifyCodecSpecifics(*config); | 1731 VerifyCodecSpecifics(*config); |
1731 ++num_initializations_; | 1732 ++num_initializations_; |
1732 init_encode_event_.Set(); | 1733 init_encode_event_.Set(); |
1733 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1734 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1734 } | 1735 } |
1735 | 1736 |
1736 void VerifyCodecSpecifics(const VideoCodec& config) const; | 1737 void VerifyCodecSpecifics(const VideoCodec& config) const; |
1737 | 1738 |
1738 void PerformTest() override { | 1739 void PerformTest() override { |
1739 EXPECT_TRUE( | 1740 EXPECT_TRUE( |
1740 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1741 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1741 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1742 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1742 | 1743 |
1743 encoder_settings_.frameDroppingOn = true; | 1744 encoder_settings_.frameDroppingOn = true; |
1744 stream_->ReconfigureVideoEncoder(encoder_config_); | 1745 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1745 ASSERT_TRUE( | 1746 ASSERT_TRUE( |
1746 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1747 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1747 EXPECT_EQ(2u, num_initializations_) | 1748 EXPECT_EQ(2u, num_initializations_) |
1748 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1749 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1749 "new encoder settings."; | 1750 "new encoder settings."; |
1750 } | 1751 } |
1751 | 1752 |
1752 int32_t Encode(const VideoFrame& input_image, | 1753 int32_t Encode(const VideoFrame& input_image, |
1753 const CodecSpecificInfo* codec_specific_info, | 1754 const CodecSpecificInfo* codec_specific_info, |
1754 const std::vector<FrameType>* frame_types) override { | 1755 const std::vector<FrameType>* frame_types) override { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1931 static const int kMaxBitrateKbps = 413; | 1932 static const int kMaxBitrateKbps = 413; |
1932 static const int kIncreasedStartBitrateKbps = 451; | 1933 static const int kIncreasedStartBitrateKbps = 451; |
1933 static const int kIncreasedMaxBitrateKbps = 597; | 1934 static const int kIncreasedMaxBitrateKbps = 597; |
1934 class EncoderBitrateThresholdObserver : public test::SendTest, | 1935 class EncoderBitrateThresholdObserver : public test::SendTest, |
1935 public test::FakeEncoder { | 1936 public test::FakeEncoder { |
1936 public: | 1937 public: |
1937 EncoderBitrateThresholdObserver() | 1938 EncoderBitrateThresholdObserver() |
1938 : SendTest(kDefaultTimeoutMs), | 1939 : SendTest(kDefaultTimeoutMs), |
1939 FakeEncoder(Clock::GetRealTimeClock()), | 1940 FakeEncoder(Clock::GetRealTimeClock()), |
1940 init_encode_event_(false, false), | 1941 init_encode_event_(false, false), |
| 1942 bitrate_changed_event_(false, false), |
| 1943 target_bitrate_(0), |
1941 num_initializations_(0), | 1944 num_initializations_(0), |
1942 call_(nullptr), | 1945 call_(nullptr), |
1943 send_stream_(nullptr) {} | 1946 send_stream_(nullptr) {} |
1944 | 1947 |
1945 private: | 1948 private: |
1946 int32_t InitEncode(const VideoCodec* codecSettings, | 1949 int32_t InitEncode(const VideoCodec* codecSettings, |
1947 int32_t numberOfCores, | 1950 int32_t numberOfCores, |
1948 size_t maxPayloadSize) override { | 1951 size_t maxPayloadSize) override { |
| 1952 EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate); |
| 1953 EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate); |
1949 if (num_initializations_ == 0) { | 1954 if (num_initializations_ == 0) { |
1950 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1955 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1951 codecSettings->minBitrate); | 1956 codecSettings->minBitrate); |
1952 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1957 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1953 codecSettings->startBitrate); | 1958 codecSettings->startBitrate); |
1954 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1959 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1955 codecSettings->maxBitrate); | 1960 codecSettings->maxBitrate); |
1956 observation_complete_.Set(); | 1961 observation_complete_.Set(); |
1957 } else if (num_initializations_ == 1) { | 1962 } else if (num_initializations_ == 1) { |
1958 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1963 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1959 codecSettings->maxBitrate); | 1964 codecSettings->maxBitrate); |
1960 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1965 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1961 // Since this is not an end-to-end call no receiver should have been | 1966 // Since this is not an end-to-end call no receiver should have been |
1962 // returning a REMB that could lower this estimate. | 1967 // returning a REMB that could lower this estimate. |
1963 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1968 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1964 } else if (num_initializations_ == 2) { | 1969 } else if (num_initializations_ == 2) { |
1965 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1970 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1966 codecSettings->maxBitrate); | 1971 codecSettings->maxBitrate); |
1967 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), | 1972 // The start bitrate will be whatever the rate BitRateController |
1968 codecSettings->startBitrate); | 1973 // has currently configured but in the span of the set max and min |
| 1974 // bitrate. |
1969 } | 1975 } |
1970 ++num_initializations_; | 1976 ++num_initializations_; |
1971 init_encode_event_.Set(); | 1977 init_encode_event_.Set(); |
1972 return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 1978 return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
1973 maxPayloadSize); | 1979 maxPayloadSize); |
1974 } | 1980 } |
1975 | 1981 |
| 1982 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
| 1983 { |
| 1984 rtc::CritScope lock(&crit_); |
| 1985 target_bitrate_ = newBitRate; |
| 1986 } |
| 1987 bitrate_changed_event_.Set(); |
| 1988 return FakeEncoder::SetRates(newBitRate, frameRate); |
| 1989 } |
| 1990 |
| 1991 void WaitForSetRates(uint32_t expected_bitrate) { |
| 1992 EXPECT_TRUE( |
| 1993 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1994 << "Timed out while waiting encoder rate to be set."; |
| 1995 rtc::CritScope lock(&crit_); |
| 1996 EXPECT_EQ(expected_bitrate, target_bitrate_); |
| 1997 } |
| 1998 |
1976 Call::Config GetSenderCallConfig() override { | 1999 Call::Config GetSenderCallConfig() override { |
1977 Call::Config config; | 2000 Call::Config config; |
1978 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 2001 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
1979 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 2002 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
1980 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 2003 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
1981 return config; | 2004 return config; |
1982 } | 2005 } |
1983 | 2006 |
1984 void ModifyVideoConfigs( | 2007 void ModifyVideoConfigs( |
1985 VideoSendStream::Config* send_config, | 2008 VideoSendStream::Config* send_config, |
1986 std::vector<VideoReceiveStream::Config>* receive_configs, | 2009 std::vector<VideoReceiveStream::Config>* receive_configs, |
1987 VideoEncoderConfig* encoder_config) override { | 2010 VideoEncoderConfig* encoder_config) override { |
1988 send_config->encoder_settings.encoder = this; | 2011 send_config->encoder_settings.encoder = this; |
1989 // Set bitrates lower/higher than min/max to make sure they are properly | 2012 // Set bitrates lower/higher than min/max to make sure they are properly |
1990 // capped. | 2013 // capped. |
1991 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; | 2014 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; |
1992 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; | 2015 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; |
1993 encoder_config_ = *encoder_config; | 2016 encoder_config_ = encoder_config->Copy(); |
1994 } | 2017 } |
1995 | 2018 |
1996 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 2019 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1997 call_ = sender_call; | 2020 call_ = sender_call; |
1998 } | 2021 } |
1999 | 2022 |
2000 void OnVideoStreamsCreated( | 2023 void OnVideoStreamsCreated( |
2001 VideoSendStream* send_stream, | 2024 VideoSendStream* send_stream, |
2002 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2025 const std::vector<VideoReceiveStream*>& receive_streams) override { |
2003 send_stream_ = send_stream; | 2026 send_stream_ = send_stream; |
2004 } | 2027 } |
2005 | 2028 |
2006 void PerformTest() override { | 2029 void PerformTest() override { |
2007 ASSERT_TRUE( | 2030 ASSERT_TRUE( |
2008 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) | 2031 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
2009 << "Timed out while waiting encoder to be configured."; | 2032 << "Timed out while waiting for encoder to be configured."; |
| 2033 WaitForSetRates(kStartBitrateKbps); |
2010 Call::Config::BitrateConfig bitrate_config; | 2034 Call::Config::BitrateConfig bitrate_config; |
2011 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 2035 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
2012 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 2036 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
2013 call_->SetBitrateConfig(bitrate_config); | 2037 call_->SetBitrateConfig(bitrate_config); |
2014 EXPECT_TRUE(Wait()) | 2038 // Encoder rate is capped by EncoderConfig max_bitrate_bps. |
2015 << "Timed out while waiting encoder to be configured."; | 2039 WaitForSetRates(kMaxBitrateKbps); |
| 2040 |
2016 encoder_config_.streams[0].min_bitrate_bps = 0; | 2041 encoder_config_.streams[0].min_bitrate_bps = 0; |
2017 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 2042 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
2018 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 2043 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2019 ASSERT_TRUE( | 2044 ASSERT_TRUE( |
2020 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2045 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2021 EXPECT_EQ(2, num_initializations_) | 2046 EXPECT_EQ(2, num_initializations_) |
2022 << "Encoder should have been reconfigured with the new value."; | 2047 << "Encoder should have been reconfigured with the new value."; |
| 2048 WaitForSetRates(kLowerMaxBitrateKbps); |
| 2049 |
2023 encoder_config_.streams[0].target_bitrate_bps = | 2050 encoder_config_.streams[0].target_bitrate_bps = |
2024 encoder_config_.streams[0].min_bitrate_bps; | 2051 encoder_config_.streams[0].min_bitrate_bps; |
2025 encoder_config_.streams[0].max_bitrate_bps = | 2052 encoder_config_.streams[0].max_bitrate_bps = |
2026 kIncreasedMaxBitrateKbps * 1000; | 2053 kIncreasedMaxBitrateKbps * 1000; |
2027 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 2054 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
2028 ASSERT_TRUE( | 2055 ASSERT_TRUE( |
2029 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 2056 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
2030 EXPECT_EQ(3, num_initializations_) | 2057 EXPECT_EQ(3, num_initializations_) |
2031 << "Encoder should have been reconfigured with the new value."; | 2058 << "Encoder should have been reconfigured with the new value."; |
| 2059 // Expected target bitrate is the start bitrate set in the call to |
| 2060 // call_->SetBitrateConfig. |
| 2061 WaitForSetRates(kIncreasedStartBitrateKbps); |
2032 } | 2062 } |
2033 | 2063 |
2034 rtc::Event init_encode_event_; | 2064 rtc::Event init_encode_event_; |
| 2065 rtc::Event bitrate_changed_event_; |
| 2066 rtc::CriticalSection crit_; |
| 2067 uint32_t target_bitrate_ GUARDED_BY(&crit_); |
2035 int num_initializations_; | 2068 int num_initializations_; |
2036 webrtc::Call* call_; | 2069 webrtc::Call* call_; |
2037 webrtc::VideoSendStream* send_stream_; | 2070 webrtc::VideoSendStream* send_stream_; |
2038 webrtc::VideoEncoderConfig encoder_config_; | 2071 webrtc::VideoEncoderConfig encoder_config_; |
2039 } test; | 2072 } test; |
2040 | 2073 |
2041 RunBaseTest(&test); | 2074 RunBaseTest(&test); |
2042 } | 2075 } |
2043 | 2076 |
2044 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 2077 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2146 std::vector<VideoReceiveStream::Config>* receive_configs, | 2179 std::vector<VideoReceiveStream::Config>* receive_configs, |
2147 VideoEncoderConfig* encoder_config) override { | 2180 VideoEncoderConfig* encoder_config) override { |
2148 encoder_config->encoder_specific_settings = &vp9_settings_; | 2181 encoder_config->encoder_specific_settings = &vp9_settings_; |
2149 send_config->encoder_settings.encoder = vp9_encoder_.get(); | 2182 send_config->encoder_settings.encoder = vp9_encoder_.get(); |
2150 send_config->encoder_settings.payload_name = "VP9"; | 2183 send_config->encoder_settings.payload_name = "VP9"; |
2151 send_config->encoder_settings.payload_type = kVp9PayloadType; | 2184 send_config->encoder_settings.payload_type = kVp9PayloadType; |
2152 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); | 2185 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); |
2153 EXPECT_EQ(1u, encoder_config->streams.size()); | 2186 EXPECT_EQ(1u, encoder_config->streams.size()); |
2154 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( | 2187 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( |
2155 vp9_settings_.numberOfTemporalLayers - 1); | 2188 vp9_settings_.numberOfTemporalLayers - 1); |
2156 encoder_config_ = *encoder_config; | 2189 encoder_config_ = encoder_config->Copy(); |
2157 } | 2190 } |
2158 | 2191 |
2159 void PerformTest() override { | 2192 void PerformTest() override { |
2160 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " | 2193 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " |
2161 << frames_sent_; | 2194 << frames_sent_; |
2162 } | 2195 } |
2163 | 2196 |
2164 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 2197 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
2165 RTPHeader header; | 2198 RTPHeader header; |
2166 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 2199 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2525 observation_complete_.Set(); | 2558 observation_complete_.Set(); |
2526 } | 2559 } |
2527 } | 2560 } |
2528 } test; | 2561 } test; |
2529 | 2562 |
2530 RunBaseTest(&test); | 2563 RunBaseTest(&test); |
2531 } | 2564 } |
2532 #endif // !defined(RTC_DISABLE_VP9) | 2565 #endif // !defined(RTC_DISABLE_VP9) |
2533 | 2566 |
2534 } // namespace webrtc | 2567 } // namespace webrtc |
OLD | NEW |