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 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1109 bool bitrate_capped_; | 1109 bool bitrate_capped_; |
1110 } test; | 1110 } test; |
1111 | 1111 |
1112 RunBaseTest(&test); | 1112 RunBaseTest(&test); |
1113 } | 1113 } |
1114 | 1114 |
1115 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 1115 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
1116 class StartBitrateObserver : public test::FakeEncoder { | 1116 class StartBitrateObserver : public test::FakeEncoder { |
1117 public: | 1117 public: |
1118 StartBitrateObserver() | 1118 StartBitrateObserver() |
1119 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} | 1119 : FakeEncoder(Clock::GetRealTimeClock()), |
| 1120 start_bitrate_changed_(false, false), |
| 1121 start_bitrate_kbps_(0) {} |
1120 int32_t InitEncode(const VideoCodec* config, | 1122 int32_t InitEncode(const VideoCodec* config, |
1121 int32_t number_of_cores, | 1123 int32_t number_of_cores, |
1122 size_t max_payload_size) override { | 1124 size_t max_payload_size) override { |
1123 rtc::CritScope lock(&crit_); | 1125 rtc::CritScope lock(&crit_); |
1124 start_bitrate_kbps_ = config->startBitrate; | 1126 start_bitrate_kbps_ = config->startBitrate; |
| 1127 start_bitrate_changed_.Set(); |
1125 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1128 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1126 } | 1129 } |
1127 | 1130 |
1128 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { | 1131 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
1129 rtc::CritScope lock(&crit_); | 1132 rtc::CritScope lock(&crit_); |
1130 start_bitrate_kbps_ = new_target_bitrate; | 1133 start_bitrate_kbps_ = new_target_bitrate; |
| 1134 start_bitrate_changed_.Set(); |
1131 return FakeEncoder::SetRates(new_target_bitrate, framerate); | 1135 return FakeEncoder::SetRates(new_target_bitrate, framerate); |
1132 } | 1136 } |
1133 | 1137 |
1134 int GetStartBitrateKbps() const { | 1138 int GetStartBitrateKbps() const { |
1135 rtc::CritScope lock(&crit_); | 1139 rtc::CritScope lock(&crit_); |
1136 return start_bitrate_kbps_; | 1140 return start_bitrate_kbps_; |
1137 } | 1141 } |
1138 | 1142 |
| 1143 bool WaitForStartBitrate() { |
| 1144 return start_bitrate_changed_.Wait( |
| 1145 VideoSendStreamTest::kDefaultTimeoutMs); |
| 1146 } |
| 1147 |
1139 private: | 1148 private: |
1140 rtc::CriticalSection crit_; | 1149 rtc::CriticalSection crit_; |
| 1150 rtc::Event start_bitrate_changed_; |
1141 int start_bitrate_kbps_ GUARDED_BY(crit_); | 1151 int start_bitrate_kbps_ GUARDED_BY(crit_); |
1142 }; | 1152 }; |
1143 | 1153 |
1144 CreateSenderCall(Call::Config()); | 1154 CreateSenderCall(Call::Config()); |
1145 | 1155 |
1146 test::NullTransport transport; | 1156 test::NullTransport transport; |
1147 CreateSendConfig(1, 0, &transport); | 1157 CreateSendConfig(1, 0, &transport); |
1148 | 1158 |
1149 Call::Config::BitrateConfig bitrate_config; | 1159 Call::Config::BitrateConfig bitrate_config; |
1150 bitrate_config.start_bitrate_bps = | 1160 bitrate_config.start_bitrate_bps = |
1151 2 * video_encoder_config_.streams[0].max_bitrate_bps; | 1161 2 * video_encoder_config_.streams[0].max_bitrate_bps; |
1152 sender_call_->SetBitrateConfig(bitrate_config); | 1162 sender_call_->SetBitrateConfig(bitrate_config); |
1153 | 1163 |
1154 StartBitrateObserver encoder; | 1164 StartBitrateObserver encoder; |
1155 video_send_config_.encoder_settings.encoder = &encoder; | 1165 video_send_config_.encoder_settings.encoder = &encoder; |
1156 | 1166 |
1157 CreateVideoStreams(); | 1167 CreateVideoStreams(); |
1158 | 1168 |
| 1169 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1159 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 1170 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
1160 encoder.GetStartBitrateKbps()); | 1171 encoder.GetStartBitrateKbps()); |
1161 | 1172 |
1162 video_encoder_config_.streams[0].max_bitrate_bps = | 1173 video_encoder_config_.streams[0].max_bitrate_bps = |
1163 2 * bitrate_config.start_bitrate_bps; | 1174 2 * bitrate_config.start_bitrate_bps; |
1164 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 1175 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
1165 | 1176 |
1166 // New bitrate should be reconfigured above the previous max. As there's no | 1177 // New bitrate should be reconfigured above the previous max. As there's no |
1167 // network connection this shouldn't be flaky, as no bitrate should've been | 1178 // network connection this shouldn't be flaky, as no bitrate should've been |
1168 // reported in between. | 1179 // reported in between. |
| 1180 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1169 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1181 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1170 encoder.GetStartBitrateKbps()); | 1182 encoder.GetStartBitrateKbps()); |
1171 | 1183 |
1172 DestroyStreams(); | 1184 DestroyStreams(); |
1173 } | 1185 } |
1174 | 1186 |
1175 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { | 1187 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { |
1176 class FrameObserver : public I420FrameCallback { | 1188 class FrameObserver : public I420FrameCallback { |
1177 public: | 1189 public: |
1178 FrameObserver() : output_frame_event_(false, false) {} | 1190 FrameObserver() : output_frame_event_(false, false) {} |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 } | 1384 } |
1373 | 1385 |
1374 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { | 1386 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
1375 EXPECT_TRUE(IsReadyForEncode()); | 1387 EXPECT_TRUE(IsReadyForEncode()); |
1376 return 0; | 1388 return 0; |
1377 } | 1389 } |
1378 | 1390 |
1379 void OnVideoStreamsCreated( | 1391 void OnVideoStreamsCreated( |
1380 VideoSendStream* send_stream, | 1392 VideoSendStream* send_stream, |
1381 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1393 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1382 // Encoder initialization should be done in stream construction before | |
1383 // starting. | |
1384 EXPECT_TRUE(IsReadyForEncode()); | |
1385 stream_ = send_stream; | 1394 stream_ = send_stream; |
1386 } | 1395 } |
1387 | 1396 |
1388 void ModifyVideoConfigs( | 1397 void ModifyVideoConfigs( |
1389 VideoSendStream::Config* send_config, | 1398 VideoSendStream::Config* send_config, |
1390 std::vector<VideoReceiveStream::Config>* receive_configs, | 1399 std::vector<VideoReceiveStream::Config>* receive_configs, |
1391 VideoEncoderConfig* encoder_config) override { | 1400 VideoEncoderConfig* encoder_config) override { |
1392 send_config->encoder_settings.encoder = this; | 1401 send_config->encoder_settings.encoder = this; |
1393 encoder_config_ = *encoder_config; | 1402 encoder_config_ = *encoder_config; |
1394 } | 1403 } |
(...skipping 27 matching lines...) Expand all Loading... |
1422 EXPECT_EQ(1u, test_encoder.num_releases()); | 1431 EXPECT_EQ(1u, test_encoder.num_releases()); |
1423 } | 1432 } |
1424 | 1433 |
1425 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1434 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
1426 class VideoCodecConfigObserver : public test::SendTest, | 1435 class VideoCodecConfigObserver : public test::SendTest, |
1427 public test::FakeEncoder { | 1436 public test::FakeEncoder { |
1428 public: | 1437 public: |
1429 VideoCodecConfigObserver() | 1438 VideoCodecConfigObserver() |
1430 : SendTest(kDefaultTimeoutMs), | 1439 : SendTest(kDefaultTimeoutMs), |
1431 FakeEncoder(Clock::GetRealTimeClock()), | 1440 FakeEncoder(Clock::GetRealTimeClock()), |
| 1441 init_encode_event_(false, false), |
1432 num_initializations_(0) {} | 1442 num_initializations_(0) {} |
1433 | 1443 |
1434 private: | 1444 private: |
1435 void ModifyVideoConfigs( | 1445 void ModifyVideoConfigs( |
1436 VideoSendStream::Config* send_config, | 1446 VideoSendStream::Config* send_config, |
1437 std::vector<VideoReceiveStream::Config>* receive_configs, | 1447 std::vector<VideoReceiveStream::Config>* receive_configs, |
1438 VideoEncoderConfig* encoder_config) override { | 1448 VideoEncoderConfig* encoder_config) override { |
1439 send_config->encoder_settings.encoder = this; | 1449 send_config->encoder_settings.encoder = this; |
1440 encoder_config_ = *encoder_config; | 1450 encoder_config_ = *encoder_config; |
1441 } | 1451 } |
1442 | 1452 |
1443 void OnVideoStreamsCreated( | 1453 void OnVideoStreamsCreated( |
1444 VideoSendStream* send_stream, | 1454 VideoSendStream* send_stream, |
1445 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1455 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1446 stream_ = send_stream; | 1456 stream_ = send_stream; |
1447 } | 1457 } |
1448 | 1458 |
1449 int32_t InitEncode(const VideoCodec* config, | 1459 int32_t InitEncode(const VideoCodec* config, |
1450 int32_t number_of_cores, | 1460 int32_t number_of_cores, |
1451 size_t max_payload_size) override { | 1461 size_t max_payload_size) override { |
1452 if (num_initializations_ == 0) { | 1462 if (num_initializations_ == 0) { |
1453 // Verify default values. | 1463 // Verify default values. |
1454 EXPECT_EQ(kRealtimeVideo, config->mode); | 1464 EXPECT_EQ(kRealtimeVideo, config->mode); |
1455 } else { | 1465 } else { |
1456 // Verify that changed values are propagated. | 1466 // Verify that changed values are propagated. |
1457 EXPECT_EQ(kScreensharing, config->mode); | 1467 EXPECT_EQ(kScreensharing, config->mode); |
1458 } | 1468 } |
1459 ++num_initializations_; | 1469 ++num_initializations_; |
| 1470 init_encode_event_.Set(); |
1460 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1471 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1461 } | 1472 } |
1462 | 1473 |
1463 void PerformTest() override { | 1474 void PerformTest() override { |
| 1475 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1464 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1476 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1465 | 1477 |
1466 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1478 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1467 stream_->ReconfigureVideoEncoder(encoder_config_); | 1479 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1480 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1468 EXPECT_EQ(2u, num_initializations_) | 1481 EXPECT_EQ(2u, num_initializations_) |
1469 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1482 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1470 "new encoder settings."; | 1483 "new encoder settings."; |
1471 } | 1484 } |
1472 | 1485 |
| 1486 rtc::Event init_encode_event_; |
1473 size_t num_initializations_; | 1487 size_t num_initializations_; |
1474 VideoSendStream* stream_; | 1488 VideoSendStream* stream_; |
1475 VideoEncoderConfig encoder_config_; | 1489 VideoEncoderConfig encoder_config_; |
1476 } test; | 1490 } test; |
1477 | 1491 |
1478 RunBaseTest(&test); | 1492 RunBaseTest(&test); |
1479 } | 1493 } |
1480 | 1494 |
1481 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; | 1495 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; |
1482 template <typename T> | 1496 template <typename T> |
1483 class VideoCodecConfigObserver : public test::SendTest, | 1497 class VideoCodecConfigObserver : public test::SendTest, |
1484 public test::FakeEncoder { | 1498 public test::FakeEncoder { |
1485 public: | 1499 public: |
1486 VideoCodecConfigObserver(VideoCodecType video_codec_type, | 1500 VideoCodecConfigObserver(VideoCodecType video_codec_type, |
1487 const char* codec_name) | 1501 const char* codec_name) |
1488 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1502 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
1489 FakeEncoder(Clock::GetRealTimeClock()), | 1503 FakeEncoder(Clock::GetRealTimeClock()), |
1490 video_codec_type_(video_codec_type), | 1504 video_codec_type_(video_codec_type), |
1491 codec_name_(codec_name), | 1505 codec_name_(codec_name), |
| 1506 init_encode_event_(false, false), |
1492 num_initializations_(0) { | 1507 num_initializations_(0) { |
1493 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); | 1508 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
1494 } | 1509 } |
1495 | 1510 |
1496 private: | 1511 private: |
1497 void ModifyVideoConfigs( | 1512 void ModifyVideoConfigs( |
1498 VideoSendStream::Config* send_config, | 1513 VideoSendStream::Config* send_config, |
1499 std::vector<VideoReceiveStream::Config>* receive_configs, | 1514 std::vector<VideoReceiveStream::Config>* receive_configs, |
1500 VideoEncoderConfig* encoder_config) override { | 1515 VideoEncoderConfig* encoder_config) override { |
1501 send_config->encoder_settings.encoder = this; | 1516 send_config->encoder_settings.encoder = this; |
(...skipping 13 matching lines...) Expand all Loading... |
1515 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1530 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1516 stream_ = send_stream; | 1531 stream_ = send_stream; |
1517 } | 1532 } |
1518 | 1533 |
1519 int32_t InitEncode(const VideoCodec* config, | 1534 int32_t InitEncode(const VideoCodec* config, |
1520 int32_t number_of_cores, | 1535 int32_t number_of_cores, |
1521 size_t max_payload_size) override { | 1536 size_t max_payload_size) override { |
1522 EXPECT_EQ(video_codec_type_, config->codecType); | 1537 EXPECT_EQ(video_codec_type_, config->codecType); |
1523 VerifyCodecSpecifics(*config); | 1538 VerifyCodecSpecifics(*config); |
1524 ++num_initializations_; | 1539 ++num_initializations_; |
| 1540 init_encode_event_.Set(); |
1525 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1541 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1526 } | 1542 } |
1527 | 1543 |
1528 void VerifyCodecSpecifics(const VideoCodec& config) const; | 1544 void VerifyCodecSpecifics(const VideoCodec& config) const; |
1529 | 1545 |
1530 void PerformTest() override { | 1546 void PerformTest() override { |
1531 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1547 EXPECT_TRUE( |
| 1548 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
| 1549 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1532 | 1550 |
1533 encoder_settings_.frameDroppingOn = true; | 1551 encoder_settings_.frameDroppingOn = true; |
1534 stream_->ReconfigureVideoEncoder(encoder_config_); | 1552 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1553 ASSERT_TRUE( |
| 1554 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1535 EXPECT_EQ(2u, num_initializations_) | 1555 EXPECT_EQ(2u, num_initializations_) |
1536 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1556 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1537 "new encoder settings."; | 1557 "new encoder settings."; |
1538 } | 1558 } |
1539 | 1559 |
1540 int32_t Encode(const VideoFrame& input_image, | 1560 int32_t Encode(const VideoFrame& input_image, |
1541 const CodecSpecificInfo* codec_specific_info, | 1561 const CodecSpecificInfo* codec_specific_info, |
1542 const std::vector<FrameType>* frame_types) override { | 1562 const std::vector<FrameType>* frame_types) override { |
1543 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. | 1563 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. |
1544 return 0; | 1564 return 0; |
1545 } | 1565 } |
1546 | 1566 |
1547 T encoder_settings_; | 1567 T encoder_settings_; |
1548 const VideoCodecType video_codec_type_; | 1568 const VideoCodecType video_codec_type_; |
1549 const char* const codec_name_; | 1569 const char* const codec_name_; |
| 1570 rtc::Event init_encode_event_; |
1550 size_t num_initializations_; | 1571 size_t num_initializations_; |
1551 VideoSendStream* stream_; | 1572 VideoSendStream* stream_; |
1552 VideoEncoderConfig encoder_config_; | 1573 VideoEncoderConfig encoder_config_; |
1553 }; | 1574 }; |
1554 | 1575 |
1555 template <> | 1576 template <> |
1556 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( | 1577 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( |
1557 const VideoCodec& config) const { | 1578 const VideoCodec& config) const { |
1558 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, | 1579 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, |
1559 sizeof(encoder_settings_))); | 1580 sizeof(encoder_settings_))); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1728 static const int kLowerMaxBitrateKbps = 312; | 1749 static const int kLowerMaxBitrateKbps = 312; |
1729 static const int kMaxBitrateKbps = 413; | 1750 static const int kMaxBitrateKbps = 413; |
1730 static const int kIncreasedStartBitrateKbps = 451; | 1751 static const int kIncreasedStartBitrateKbps = 451; |
1731 static const int kIncreasedMaxBitrateKbps = 597; | 1752 static const int kIncreasedMaxBitrateKbps = 597; |
1732 class EncoderBitrateThresholdObserver : public test::SendTest, | 1753 class EncoderBitrateThresholdObserver : public test::SendTest, |
1733 public test::FakeEncoder { | 1754 public test::FakeEncoder { |
1734 public: | 1755 public: |
1735 EncoderBitrateThresholdObserver() | 1756 EncoderBitrateThresholdObserver() |
1736 : SendTest(kDefaultTimeoutMs), | 1757 : SendTest(kDefaultTimeoutMs), |
1737 FakeEncoder(Clock::GetRealTimeClock()), | 1758 FakeEncoder(Clock::GetRealTimeClock()), |
| 1759 init_encode_event_(false, false), |
1738 num_initializations_(0) {} | 1760 num_initializations_(0) {} |
1739 | 1761 |
1740 private: | 1762 private: |
1741 int32_t InitEncode(const VideoCodec* codecSettings, | 1763 int32_t InitEncode(const VideoCodec* codecSettings, |
1742 int32_t numberOfCores, | 1764 int32_t numberOfCores, |
1743 size_t maxPayloadSize) override { | 1765 size_t maxPayloadSize) override { |
1744 if (num_initializations_ == 0) { | 1766 if (num_initializations_ == 0) { |
1745 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1767 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1746 codecSettings->minBitrate); | 1768 codecSettings->minBitrate); |
1747 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1769 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1748 codecSettings->startBitrate); | 1770 codecSettings->startBitrate); |
1749 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1771 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1750 codecSettings->maxBitrate); | 1772 codecSettings->maxBitrate); |
1751 observation_complete_.Set(); | 1773 observation_complete_.Set(); |
1752 } else if (num_initializations_ == 1) { | 1774 } else if (num_initializations_ == 1) { |
1753 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1775 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1754 codecSettings->maxBitrate); | 1776 codecSettings->maxBitrate); |
1755 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1777 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1756 // Since this is not an end-to-end call no receiver should have been | 1778 // Since this is not an end-to-end call no receiver should have been |
1757 // returning a REMB that could lower this estimate. | 1779 // returning a REMB that could lower this estimate. |
1758 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1780 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1759 } else if (num_initializations_ == 2) { | 1781 } else if (num_initializations_ == 2) { |
1760 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1782 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1761 codecSettings->maxBitrate); | 1783 codecSettings->maxBitrate); |
1762 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), | 1784 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), |
1763 codecSettings->startBitrate); | 1785 codecSettings->startBitrate); |
1764 } | 1786 } |
1765 ++num_initializations_; | 1787 ++num_initializations_; |
| 1788 init_encode_event_.Set(); |
1766 return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 1789 return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
1767 maxPayloadSize); | 1790 maxPayloadSize); |
1768 } | 1791 } |
1769 | 1792 |
1770 Call::Config GetSenderCallConfig() override { | 1793 Call::Config GetSenderCallConfig() override { |
1771 Call::Config config; | 1794 Call::Config config; |
1772 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 1795 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
1773 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 1796 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
1774 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 1797 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
1775 return config; | 1798 return config; |
(...skipping 15 matching lines...) Expand all Loading... |
1791 call_ = sender_call; | 1814 call_ = sender_call; |
1792 } | 1815 } |
1793 | 1816 |
1794 void OnVideoStreamsCreated( | 1817 void OnVideoStreamsCreated( |
1795 VideoSendStream* send_stream, | 1818 VideoSendStream* send_stream, |
1796 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1819 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1797 send_stream_ = send_stream; | 1820 send_stream_ = send_stream; |
1798 } | 1821 } |
1799 | 1822 |
1800 void PerformTest() override { | 1823 void PerformTest() override { |
| 1824 ASSERT_TRUE( |
| 1825 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1826 << "Timed out while waiting encoder to be configured."; |
1801 Call::Config::BitrateConfig bitrate_config; | 1827 Call::Config::BitrateConfig bitrate_config; |
1802 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1828 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
1803 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1829 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
1804 call_->SetBitrateConfig(bitrate_config); | 1830 call_->SetBitrateConfig(bitrate_config); |
1805 EXPECT_TRUE(Wait()) | 1831 EXPECT_TRUE(Wait()) |
1806 << "Timed out while waiting encoder to be configured."; | 1832 << "Timed out while waiting encoder to be configured."; |
1807 encoder_config_.streams[0].min_bitrate_bps = 0; | 1833 encoder_config_.streams[0].min_bitrate_bps = 0; |
1808 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 1834 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
1809 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1835 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1836 ASSERT_TRUE( |
| 1837 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1810 EXPECT_EQ(2, num_initializations_) | 1838 EXPECT_EQ(2, num_initializations_) |
1811 << "Encoder should have been reconfigured with the new value."; | 1839 << "Encoder should have been reconfigured with the new value."; |
1812 encoder_config_.streams[0].target_bitrate_bps = | 1840 encoder_config_.streams[0].target_bitrate_bps = |
1813 encoder_config_.streams[0].min_bitrate_bps; | 1841 encoder_config_.streams[0].min_bitrate_bps; |
1814 encoder_config_.streams[0].max_bitrate_bps = | 1842 encoder_config_.streams[0].max_bitrate_bps = |
1815 kIncreasedMaxBitrateKbps * 1000; | 1843 kIncreasedMaxBitrateKbps * 1000; |
1816 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1844 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1845 ASSERT_TRUE( |
| 1846 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1817 EXPECT_EQ(3, num_initializations_) | 1847 EXPECT_EQ(3, num_initializations_) |
1818 << "Encoder should have been reconfigured with the new value."; | 1848 << "Encoder should have been reconfigured with the new value."; |
1819 } | 1849 } |
1820 | 1850 |
| 1851 rtc::Event init_encode_event_; |
1821 int num_initializations_; | 1852 int num_initializations_; |
1822 webrtc::Call* call_; | 1853 webrtc::Call* call_; |
1823 webrtc::VideoSendStream* send_stream_; | 1854 webrtc::VideoSendStream* send_stream_; |
1824 webrtc::VideoEncoderConfig encoder_config_; | 1855 webrtc::VideoEncoderConfig encoder_config_; |
1825 } test; | 1856 } test; |
1826 | 1857 |
1827 RunBaseTest(&test); | 1858 RunBaseTest(&test); |
1828 } | 1859 } |
1829 | 1860 |
1830 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 1861 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2313 observation_complete_.Set(); | 2344 observation_complete_.Set(); |
2314 } | 2345 } |
2315 } | 2346 } |
2316 } test; | 2347 } test; |
2317 | 2348 |
2318 RunBaseTest(&test); | 2349 RunBaseTest(&test); |
2319 } | 2350 } |
2320 #endif | 2351 #endif |
2321 | 2352 |
2322 } // namespace webrtc | 2353 } // namespace webrtc |
OLD | NEW |