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

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

Issue 2060403002: Add task queue to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@move_getpadding
Patch Set: Fix audio thread check when adding audio to bitrateallocator. Created 4 years, 4 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 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698