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 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 if (stats.suspended == false) { | 858 if (stats.suspended == false) { |
859 // Stats flipped to false. Test is complete. | 859 // Stats flipped to false. Test is complete. |
860 observation_complete_.Set(); | 860 observation_complete_.Set(); |
861 } | 861 } |
862 SendRtcpFeedback(0); // REMB is only sent if value is > 0. | 862 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
863 } | 863 } |
864 | 864 |
865 return SEND_PACKET; | 865 return SEND_PACKET; |
866 } | 866 } |
867 | 867 |
868 // This method implements the rtc::VideoSinkInterface | 868 // This method implements the rtc::VideoSinkInterface. This is called when |
| 869 // a frame is provided to the VideoSendStream. |
869 void OnFrame(const VideoFrame& video_frame) override { | 870 void OnFrame(const VideoFrame& video_frame) override { |
870 rtc::CritScope lock(&crit_); | 871 rtc::CritScope lock(&crit_); |
871 if (test_state_ == kDuringSuspend && | 872 if (test_state_ == kDuringSuspend && |
872 ++suspended_frame_count_ > kSuspendTimeFrames) { | 873 ++suspended_frame_count_ > kSuspendTimeFrames) { |
873 VideoSendStream::Stats stats = stream_->GetStats(); | 874 VideoSendStream::Stats stats = stream_->GetStats(); |
874 EXPECT_TRUE(stats.suspended); | 875 EXPECT_TRUE(stats.suspended); |
875 SendRtcpFeedback(high_remb_bps_); | 876 SendRtcpFeedback(high_remb_bps_); |
876 test_state_ = kWaitingForPacket; | 877 test_state_ = kWaitingForPacket; |
877 } | 878 } |
878 } | 879 } |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1146 VideoEncoderConfig* encoder_config) override { | 1147 VideoEncoderConfig* encoder_config) override { |
1147 RTC_DCHECK_EQ(1u, encoder_config->streams.size()); | 1148 RTC_DCHECK_EQ(1u, encoder_config->streams.size()); |
1148 if (running_without_padding_) { | 1149 if (running_without_padding_) { |
1149 encoder_config->min_transmit_bitrate_bps = 0; | 1150 encoder_config->min_transmit_bitrate_bps = 0; |
1150 encoder_config->content_type = | 1151 encoder_config->content_type = |
1151 VideoEncoderConfig::ContentType::kRealtimeVideo; | 1152 VideoEncoderConfig::ContentType::kRealtimeVideo; |
1152 } else { | 1153 } else { |
1153 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1154 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1154 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 1155 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
1155 } | 1156 } |
1156 encoder_config_ = *encoder_config; | 1157 encoder_config_ = encoder_config->Copy(); |
1157 } | 1158 } |
1158 | 1159 |
1159 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1160 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1160 call_ = sender_call; | 1161 call_ = sender_call; |
1161 } | 1162 } |
1162 | 1163 |
1163 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1164 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1164 rtc::CritScope lock(&crit_); | 1165 rtc::CritScope lock(&crit_); |
1165 | 1166 |
1166 if (running_without_padding_) | 1167 if (running_without_padding_) |
1167 EXPECT_EQ(0, call_->GetStats().max_padding_bitrate_bps); | 1168 EXPECT_EQ(0, call_->GetStats().max_padding_bitrate_bps); |
1168 | 1169 |
1169 // Wait until at least kMinPacketsToSend frames have been encoded, so that | 1170 // Wait until at least kMinPacketsToSend frames have been encoded, so that |
1170 // we have reliable data. | 1171 // we have reliable data. |
1171 if (++packets_sent_ < kMinPacketsToSend) | 1172 if (++packets_sent_ < kMinPacketsToSend) |
1172 return SEND_PACKET; | 1173 return SEND_PACKET; |
1173 | 1174 |
1174 if (running_without_padding_) { | 1175 if (running_without_padding_) { |
1175 // We've sent kMinPacketsToSend packets with default configuration, switch | 1176 // We've sent kMinPacketsToSend packets with default configuration, switch |
1176 // to enabling screen content and setting min transmit bitrate. | 1177 // to enabling screen content and setting min transmit bitrate. |
1177 packets_sent_ = 0; | 1178 packets_sent_ = 0; |
1178 encoder_config_.min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1179 encoder_config_.min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1179 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1180 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1180 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1181 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
1181 running_without_padding_ = false; | 1182 running_without_padding_ = false; |
1182 return SEND_PACKET; | 1183 return SEND_PACKET; |
1183 } | 1184 } |
1184 | 1185 |
1185 // Make sure the pacer has been configured with a min transmit bitrate. | 1186 // Make sure the pacer has been configured with a min transmit bitrate. |
1186 if (call_->GetStats().max_padding_bitrate_bps > 0) | 1187 if (call_->GetStats().max_padding_bitrate_bps > 0) |
1187 observation_complete_.Set(); | 1188 observation_complete_.Set(); |
1188 | 1189 |
1189 return SEND_PACKET; | 1190 return SEND_PACKET; |
1190 } | 1191 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 video_send_config_.encoder_settings.encoder = &encoder; | 1266 video_send_config_.encoder_settings.encoder = &encoder; |
1266 | 1267 |
1267 CreateVideoStreams(); | 1268 CreateVideoStreams(); |
1268 | 1269 |
1269 EXPECT_TRUE(encoder.WaitForStartBitrate()); | 1270 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1270 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 1271 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
1271 encoder.GetStartBitrateKbps()); | 1272 encoder.GetStartBitrateKbps()); |
1272 | 1273 |
1273 video_encoder_config_.streams[0].max_bitrate_bps = | 1274 video_encoder_config_.streams[0].max_bitrate_bps = |
1274 2 * bitrate_config.start_bitrate_bps; | 1275 2 * bitrate_config.start_bitrate_bps; |
1275 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 1276 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); |
1276 | 1277 |
1277 // New bitrate should be reconfigured above the previous max. As there's no | 1278 // New bitrate should be reconfigured above the previous max. As there's no |
1278 // network connection this shouldn't be flaky, as no bitrate should've been | 1279 // network connection this shouldn't be flaky, as no bitrate should've been |
1279 // reported in between. | 1280 // reported in between. |
1280 EXPECT_TRUE(encoder.WaitForStartBitrate()); | 1281 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1281 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1282 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1282 encoder.GetStartBitrateKbps()); | 1283 encoder.GetStartBitrateKbps()); |
1283 | 1284 |
1284 DestroyStreams(); | 1285 DestroyStreams(); |
1285 } | 1286 } |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1529 VideoSendStream* send_stream, | 1530 VideoSendStream* send_stream, |
1530 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1531 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1531 stream_ = send_stream; | 1532 stream_ = send_stream; |
1532 } | 1533 } |
1533 | 1534 |
1534 void ModifyVideoConfigs( | 1535 void ModifyVideoConfigs( |
1535 VideoSendStream::Config* send_config, | 1536 VideoSendStream::Config* send_config, |
1536 std::vector<VideoReceiveStream::Config>* receive_configs, | 1537 std::vector<VideoReceiveStream::Config>* receive_configs, |
1537 VideoEncoderConfig* encoder_config) override { | 1538 VideoEncoderConfig* encoder_config) override { |
1538 send_config->encoder_settings.encoder = this; | 1539 send_config->encoder_settings.encoder = this; |
1539 encoder_config_ = *encoder_config; | 1540 encoder_config_ = encoder_config->Copy(); |
1540 } | 1541 } |
1541 | 1542 |
1542 void PerformTest() override { | 1543 void PerformTest() override { |
1543 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 1544 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1544 EXPECT_EQ(0u, num_releases()); | 1545 EXPECT_EQ(0u, num_releases()); |
1545 stream_->ReconfigureVideoEncoder(encoder_config_); | 1546 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1546 EXPECT_EQ(0u, num_releases()); | 1547 EXPECT_EQ(0u, num_releases()); |
1547 stream_->Stop(); | 1548 stream_->Stop(); |
1548 // Encoder should not be released before destroying the VideoSendStream. | 1549 // Encoder should not be released before destroying the VideoSendStream. |
1549 EXPECT_FALSE(IsReleased()); | 1550 EXPECT_FALSE(IsReleased()); |
1550 EXPECT_TRUE(IsReadyForEncode()); | 1551 EXPECT_TRUE(IsReadyForEncode()); |
1551 stream_->Start(); | 1552 stream_->Start(); |
1552 // Sanity check, make sure we still encode frames with this encoder. | 1553 // Sanity check, make sure we still encode frames with this encoder. |
1553 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 1554 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1554 } | 1555 } |
1555 | 1556 |
(...skipping 21 matching lines...) Expand all Loading... |
1577 FakeEncoder(Clock::GetRealTimeClock()), | 1578 FakeEncoder(Clock::GetRealTimeClock()), |
1578 init_encode_event_(false, false), | 1579 init_encode_event_(false, false), |
1579 num_initializations_(0) {} | 1580 num_initializations_(0) {} |
1580 | 1581 |
1581 private: | 1582 private: |
1582 void ModifyVideoConfigs( | 1583 void ModifyVideoConfigs( |
1583 VideoSendStream::Config* send_config, | 1584 VideoSendStream::Config* send_config, |
1584 std::vector<VideoReceiveStream::Config>* receive_configs, | 1585 std::vector<VideoReceiveStream::Config>* receive_configs, |
1585 VideoEncoderConfig* encoder_config) override { | 1586 VideoEncoderConfig* encoder_config) override { |
1586 send_config->encoder_settings.encoder = this; | 1587 send_config->encoder_settings.encoder = this; |
1587 encoder_config_ = *encoder_config; | 1588 encoder_config_ = encoder_config->Copy(); |
1588 } | 1589 } |
1589 | 1590 |
1590 void OnVideoStreamsCreated( | 1591 void OnVideoStreamsCreated( |
1591 VideoSendStream* send_stream, | 1592 VideoSendStream* send_stream, |
1592 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1593 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1593 stream_ = send_stream; | 1594 stream_ = send_stream; |
1594 } | 1595 } |
1595 | 1596 |
1596 int32_t InitEncode(const VideoCodec* config, | 1597 int32_t InitEncode(const VideoCodec* config, |
1597 int32_t number_of_cores, | 1598 int32_t number_of_cores, |
1598 size_t max_payload_size) override { | 1599 size_t max_payload_size) override { |
1599 if (num_initializations_ == 0) { | 1600 if (num_initializations_ == 0) { |
1600 // Verify default values. | 1601 // Verify default values. |
1601 EXPECT_EQ(kRealtimeVideo, config->mode); | 1602 EXPECT_EQ(kRealtimeVideo, config->mode); |
1602 } else { | 1603 } else { |
1603 // Verify that changed values are propagated. | 1604 // Verify that changed values are propagated. |
1604 EXPECT_EQ(kScreensharing, config->mode); | 1605 EXPECT_EQ(kScreensharing, config->mode); |
1605 } | 1606 } |
1606 ++num_initializations_; | 1607 ++num_initializations_; |
1607 init_encode_event_.Set(); | 1608 init_encode_event_.Set(); |
1608 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1609 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1609 } | 1610 } |
1610 | 1611 |
1611 void PerformTest() override { | 1612 void PerformTest() override { |
1612 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); | 1613 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1613 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1614 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1614 | 1615 |
1615 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1616 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1616 stream_->ReconfigureVideoEncoder(encoder_config_); | 1617 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1617 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); | 1618 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1618 EXPECT_EQ(2u, num_initializations_) | 1619 EXPECT_EQ(2u, num_initializations_) |
1619 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1620 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1620 "new encoder settings."; | 1621 "new encoder settings."; |
1621 } | 1622 } |
1622 | 1623 |
1623 rtc::Event init_encode_event_; | 1624 rtc::Event init_encode_event_; |
1624 size_t num_initializations_; | 1625 size_t num_initializations_; |
1625 VideoSendStream* stream_; | 1626 VideoSendStream* stream_; |
1626 VideoEncoderConfig encoder_config_; | 1627 VideoEncoderConfig encoder_config_; |
(...skipping 25 matching lines...) Expand all Loading... |
1652 VideoEncoderConfig* encoder_config) override { | 1653 VideoEncoderConfig* encoder_config) override { |
1653 send_config->encoder_settings.encoder = this; | 1654 send_config->encoder_settings.encoder = this; |
1654 send_config->encoder_settings.payload_name = codec_name_; | 1655 send_config->encoder_settings.payload_name = codec_name_; |
1655 | 1656 |
1656 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 1657 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
1657 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( | 1658 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( |
1658 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); | 1659 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); |
1659 } | 1660 } |
1660 | 1661 |
1661 encoder_config->encoder_specific_settings = &encoder_settings_; | 1662 encoder_config->encoder_specific_settings = &encoder_settings_; |
1662 encoder_config_ = *encoder_config; | 1663 encoder_config_ = encoder_config->Copy(); |
1663 } | 1664 } |
1664 | 1665 |
1665 void OnVideoStreamsCreated( | 1666 void OnVideoStreamsCreated( |
1666 VideoSendStream* send_stream, | 1667 VideoSendStream* send_stream, |
1667 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1668 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1668 stream_ = send_stream; | 1669 stream_ = send_stream; |
1669 } | 1670 } |
1670 | 1671 |
1671 int32_t InitEncode(const VideoCodec* config, | 1672 int32_t InitEncode(const VideoCodec* config, |
1672 int32_t number_of_cores, | 1673 int32_t number_of_cores, |
1673 size_t max_payload_size) override { | 1674 size_t max_payload_size) override { |
1674 EXPECT_EQ(video_codec_type_, config->codecType); | 1675 EXPECT_EQ(video_codec_type_, config->codecType); |
1675 VerifyCodecSpecifics(*config); | 1676 VerifyCodecSpecifics(*config); |
1676 ++num_initializations_; | 1677 ++num_initializations_; |
1677 init_encode_event_.Set(); | 1678 init_encode_event_.Set(); |
1678 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1679 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1679 } | 1680 } |
1680 | 1681 |
1681 void VerifyCodecSpecifics(const VideoCodec& config) const; | 1682 void VerifyCodecSpecifics(const VideoCodec& config) const; |
1682 | 1683 |
1683 void PerformTest() override { | 1684 void PerformTest() override { |
1684 EXPECT_TRUE( | 1685 EXPECT_TRUE( |
1685 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1686 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1686 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1687 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1687 | 1688 |
1688 encoder_settings_.frameDroppingOn = true; | 1689 encoder_settings_.frameDroppingOn = true; |
1689 stream_->ReconfigureVideoEncoder(encoder_config_); | 1690 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
1690 ASSERT_TRUE( | 1691 ASSERT_TRUE( |
1691 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1692 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1692 EXPECT_EQ(2u, num_initializations_) | 1693 EXPECT_EQ(2u, num_initializations_) |
1693 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1694 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1694 "new encoder settings."; | 1695 "new encoder settings."; |
1695 } | 1696 } |
1696 | 1697 |
1697 int32_t Encode(const VideoFrame& input_image, | 1698 int32_t Encode(const VideoFrame& input_image, |
1698 const CodecSpecificInfo* codec_specific_info, | 1699 const CodecSpecificInfo* codec_specific_info, |
1699 const std::vector<FrameType>* frame_types) override { | 1700 const std::vector<FrameType>* frame_types) override { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1876 static const int kMaxBitrateKbps = 413; | 1877 static const int kMaxBitrateKbps = 413; |
1877 static const int kIncreasedStartBitrateKbps = 451; | 1878 static const int kIncreasedStartBitrateKbps = 451; |
1878 static const int kIncreasedMaxBitrateKbps = 597; | 1879 static const int kIncreasedMaxBitrateKbps = 597; |
1879 class EncoderBitrateThresholdObserver : public test::SendTest, | 1880 class EncoderBitrateThresholdObserver : public test::SendTest, |
1880 public test::FakeEncoder { | 1881 public test::FakeEncoder { |
1881 public: | 1882 public: |
1882 EncoderBitrateThresholdObserver() | 1883 EncoderBitrateThresholdObserver() |
1883 : SendTest(kDefaultTimeoutMs), | 1884 : SendTest(kDefaultTimeoutMs), |
1884 FakeEncoder(Clock::GetRealTimeClock()), | 1885 FakeEncoder(Clock::GetRealTimeClock()), |
1885 init_encode_event_(false, false), | 1886 init_encode_event_(false, false), |
| 1887 bitrate_changed_event_(false, false), |
1886 num_initializations_(0) {} | 1888 num_initializations_(0) {} |
1887 | 1889 |
1888 private: | 1890 private: |
1889 int32_t InitEncode(const VideoCodec* codecSettings, | 1891 int32_t InitEncode(const VideoCodec* codecSettings, |
1890 int32_t numberOfCores, | 1892 int32_t numberOfCores, |
1891 size_t maxPayloadSize) override { | 1893 size_t maxPayloadSize) override { |
1892 if (num_initializations_ == 0) { | 1894 if (num_initializations_ == 0) { |
1893 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1895 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1894 codecSettings->minBitrate); | 1896 codecSettings->minBitrate); |
1895 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1897 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1896 codecSettings->startBitrate); | 1898 codecSettings->startBitrate); |
1897 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1899 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1898 codecSettings->maxBitrate); | 1900 codecSettings->maxBitrate); |
1899 observation_complete_.Set(); | 1901 observation_complete_.Set(); |
1900 } else if (num_initializations_ == 1) { | 1902 } else if (num_initializations_ == 1) { |
1901 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1903 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1902 codecSettings->maxBitrate); | 1904 codecSettings->maxBitrate); |
1903 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1905 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1904 // Since this is not an end-to-end call no receiver should have been | 1906 // Since this is not an end-to-end call no receiver should have been |
1905 // returning a REMB that could lower this estimate. | 1907 // returning a REMB that could lower this estimate. |
1906 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1908 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1907 } else if (num_initializations_ == 2) { | 1909 } else if (num_initializations_ == 2) { |
1908 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1910 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1909 codecSettings->maxBitrate); | 1911 codecSettings->maxBitrate); |
1910 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), | |
1911 codecSettings->startBitrate); | |
1912 } | 1912 } |
1913 ++num_initializations_; | 1913 ++num_initializations_; |
1914 init_encode_event_.Set(); | 1914 init_encode_event_.Set(); |
1915 return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 1915 return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
1916 maxPayloadSize); | 1916 maxPayloadSize); |
1917 } | 1917 } |
1918 | 1918 |
| 1919 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
| 1920 bitrate_changed_event_.Set(); |
| 1921 return FakeEncoder::SetRates(newBitRate, frameRate); |
| 1922 } |
| 1923 |
1919 Call::Config GetSenderCallConfig() override { | 1924 Call::Config GetSenderCallConfig() override { |
1920 Call::Config config; | 1925 Call::Config config; |
1921 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 1926 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
1922 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 1927 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
1923 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 1928 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
1924 return config; | 1929 return config; |
1925 } | 1930 } |
1926 | 1931 |
1927 void ModifyVideoConfigs( | 1932 void ModifyVideoConfigs( |
1928 VideoSendStream::Config* send_config, | 1933 VideoSendStream::Config* send_config, |
1929 std::vector<VideoReceiveStream::Config>* receive_configs, | 1934 std::vector<VideoReceiveStream::Config>* receive_configs, |
1930 VideoEncoderConfig* encoder_config) override { | 1935 VideoEncoderConfig* encoder_config) override { |
1931 send_config->encoder_settings.encoder = this; | 1936 send_config->encoder_settings.encoder = this; |
1932 // Set bitrates lower/higher than min/max to make sure they are properly | 1937 // Set bitrates lower/higher than min/max to make sure they are properly |
1933 // capped. | 1938 // capped. |
1934 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; | 1939 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; |
1935 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; | 1940 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; |
1936 encoder_config_ = *encoder_config; | 1941 encoder_config_ = encoder_config->Copy(); |
1937 } | 1942 } |
1938 | 1943 |
1939 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1944 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
1940 call_ = sender_call; | 1945 call_ = sender_call; |
1941 } | 1946 } |
1942 | 1947 |
1943 void OnVideoStreamsCreated( | 1948 void OnVideoStreamsCreated( |
1944 VideoSendStream* send_stream, | 1949 VideoSendStream* send_stream, |
1945 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1950 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1946 send_stream_ = send_stream; | 1951 send_stream_ = send_stream; |
1947 } | 1952 } |
1948 | 1953 |
1949 void PerformTest() override { | 1954 void PerformTest() override { |
1950 ASSERT_TRUE( | 1955 ASSERT_TRUE( |
1951 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) | 1956 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
1952 << "Timed out while waiting encoder to be configured."; | 1957 << "Timed out while waiting for encoder to be configured."; |
| 1958 ASSERT_TRUE( |
| 1959 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1960 << "Timed out while waiting encoder rate to be set."; |
1953 Call::Config::BitrateConfig bitrate_config; | 1961 Call::Config::BitrateConfig bitrate_config; |
1954 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1962 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
1955 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1963 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
1956 call_->SetBitrateConfig(bitrate_config); | 1964 call_->SetBitrateConfig(bitrate_config); |
1957 EXPECT_TRUE(Wait()) | 1965 ASSERT_TRUE( |
1958 << "Timed out while waiting encoder to be configured."; | 1966 bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1967 << "Timed out while waiting for encoder rate to be set."; |
| 1968 |
1959 encoder_config_.streams[0].min_bitrate_bps = 0; | 1969 encoder_config_.streams[0].min_bitrate_bps = 0; |
1960 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 1970 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
1961 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1971 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
1962 ASSERT_TRUE( | 1972 ASSERT_TRUE( |
1963 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1973 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1964 EXPECT_EQ(2, num_initializations_) | 1974 EXPECT_EQ(2, num_initializations_) |
1965 << "Encoder should have been reconfigured with the new value."; | 1975 << "Encoder should have been reconfigured with the new value."; |
1966 encoder_config_.streams[0].target_bitrate_bps = | 1976 encoder_config_.streams[0].target_bitrate_bps = |
1967 encoder_config_.streams[0].min_bitrate_bps; | 1977 encoder_config_.streams[0].min_bitrate_bps; |
1968 encoder_config_.streams[0].max_bitrate_bps = | 1978 encoder_config_.streams[0].max_bitrate_bps = |
1969 kIncreasedMaxBitrateKbps * 1000; | 1979 kIncreasedMaxBitrateKbps * 1000; |
1970 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1980 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); |
1971 ASSERT_TRUE( | 1981 ASSERT_TRUE( |
1972 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 1982 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1973 EXPECT_EQ(3, num_initializations_) | 1983 EXPECT_EQ(3, num_initializations_) |
1974 << "Encoder should have been reconfigured with the new value."; | 1984 << "Encoder should have been reconfigured with the new value."; |
1975 } | 1985 } |
1976 | 1986 |
1977 rtc::Event init_encode_event_; | 1987 rtc::Event init_encode_event_; |
| 1988 rtc::Event bitrate_changed_event_; |
1978 int num_initializations_; | 1989 int num_initializations_; |
1979 webrtc::Call* call_; | 1990 webrtc::Call* call_; |
1980 webrtc::VideoSendStream* send_stream_; | 1991 webrtc::VideoSendStream* send_stream_; |
1981 webrtc::VideoEncoderConfig encoder_config_; | 1992 webrtc::VideoEncoderConfig encoder_config_; |
1982 } test; | 1993 } test; |
1983 | 1994 |
1984 RunBaseTest(&test); | 1995 RunBaseTest(&test); |
1985 } | 1996 } |
1986 | 1997 |
1987 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 1998 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2088 std::vector<VideoReceiveStream::Config>* receive_configs, | 2099 std::vector<VideoReceiveStream::Config>* receive_configs, |
2089 VideoEncoderConfig* encoder_config) override { | 2100 VideoEncoderConfig* encoder_config) override { |
2090 encoder_config->encoder_specific_settings = &vp9_settings_; | 2101 encoder_config->encoder_specific_settings = &vp9_settings_; |
2091 send_config->encoder_settings.encoder = vp9_encoder_.get(); | 2102 send_config->encoder_settings.encoder = vp9_encoder_.get(); |
2092 send_config->encoder_settings.payload_name = "VP9"; | 2103 send_config->encoder_settings.payload_name = "VP9"; |
2093 send_config->encoder_settings.payload_type = kVp9PayloadType; | 2104 send_config->encoder_settings.payload_type = kVp9PayloadType; |
2094 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); | 2105 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); |
2095 EXPECT_EQ(1u, encoder_config->streams.size()); | 2106 EXPECT_EQ(1u, encoder_config->streams.size()); |
2096 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( | 2107 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( |
2097 vp9_settings_.numberOfTemporalLayers - 1); | 2108 vp9_settings_.numberOfTemporalLayers - 1); |
2098 encoder_config_ = *encoder_config; | 2109 encoder_config_ = encoder_config->Copy(); |
2099 } | 2110 } |
2100 | 2111 |
2101 void PerformTest() override { | 2112 void PerformTest() override { |
2102 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " | 2113 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " |
2103 << frames_sent_; | 2114 << frames_sent_; |
2104 } | 2115 } |
2105 | 2116 |
2106 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 2117 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
2107 RTPHeader header; | 2118 RTPHeader header; |
2108 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 2119 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2467 observation_complete_.Set(); | 2478 observation_complete_.Set(); |
2468 } | 2479 } |
2469 } | 2480 } |
2470 } test; | 2481 } test; |
2471 | 2482 |
2472 RunBaseTest(&test); | 2483 RunBaseTest(&test); |
2473 } | 2484 } |
2474 #endif // !defined(RTC_DISABLE_VP9) | 2485 #endif // !defined(RTC_DISABLE_VP9) |
2475 | 2486 |
2476 } // namespace webrtc | 2487 } // namespace webrtc |
OLD | NEW |