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 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 bool bitrate_capped_; | 1105 bool bitrate_capped_; |
1106 } test; | 1106 } test; |
1107 | 1107 |
1108 RunBaseTest(&test); | 1108 RunBaseTest(&test); |
1109 } | 1109 } |
1110 | 1110 |
1111 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 1111 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
1112 class StartBitrateObserver : public test::FakeEncoder { | 1112 class StartBitrateObserver : public test::FakeEncoder { |
1113 public: | 1113 public: |
1114 StartBitrateObserver() | 1114 StartBitrateObserver() |
1115 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} | 1115 : FakeEncoder(Clock::GetRealTimeClock()), |
| 1116 start_bitrate_changed_(false, false), |
| 1117 start_bitrate_kbps_(0) {} |
1116 int32_t InitEncode(const VideoCodec* config, | 1118 int32_t InitEncode(const VideoCodec* config, |
1117 int32_t number_of_cores, | 1119 int32_t number_of_cores, |
1118 size_t max_payload_size) override { | 1120 size_t max_payload_size) override { |
1119 rtc::CritScope lock(&crit_); | 1121 rtc::CritScope lock(&crit_); |
1120 start_bitrate_kbps_ = config->startBitrate; | 1122 start_bitrate_kbps_ = config->startBitrate; |
| 1123 start_bitrate_changed_.Set(); |
1121 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1124 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1122 } | 1125 } |
1123 | 1126 |
1124 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { | 1127 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
1125 rtc::CritScope lock(&crit_); | 1128 rtc::CritScope lock(&crit_); |
1126 start_bitrate_kbps_ = new_target_bitrate; | 1129 start_bitrate_kbps_ = new_target_bitrate; |
| 1130 start_bitrate_changed_.Set(); |
1127 return FakeEncoder::SetRates(new_target_bitrate, framerate); | 1131 return FakeEncoder::SetRates(new_target_bitrate, framerate); |
1128 } | 1132 } |
1129 | 1133 |
1130 int GetStartBitrateKbps() const { | 1134 int GetStartBitrateKbps() const { |
1131 rtc::CritScope lock(&crit_); | 1135 rtc::CritScope lock(&crit_); |
1132 return start_bitrate_kbps_; | 1136 return start_bitrate_kbps_; |
1133 } | 1137 } |
1134 | 1138 |
| 1139 bool WaitForStartBitrate() { |
| 1140 return start_bitrate_changed_.Wait( |
| 1141 VideoSendStreamTest::kDefaultTimeoutMs); |
| 1142 } |
| 1143 |
1135 private: | 1144 private: |
1136 rtc::CriticalSection crit_; | 1145 rtc::CriticalSection crit_; |
| 1146 rtc::Event start_bitrate_changed_; |
1137 int start_bitrate_kbps_ GUARDED_BY(crit_); | 1147 int start_bitrate_kbps_ GUARDED_BY(crit_); |
1138 }; | 1148 }; |
1139 | 1149 |
1140 CreateSenderCall(Call::Config()); | 1150 CreateSenderCall(Call::Config()); |
1141 | 1151 |
1142 test::NullTransport transport; | 1152 test::NullTransport transport; |
1143 CreateSendConfig(1, 0, &transport); | 1153 CreateSendConfig(1, 0, &transport); |
1144 | 1154 |
1145 Call::Config::BitrateConfig bitrate_config; | 1155 Call::Config::BitrateConfig bitrate_config; |
1146 bitrate_config.start_bitrate_bps = | 1156 bitrate_config.start_bitrate_bps = |
1147 2 * video_encoder_config_.streams[0].max_bitrate_bps; | 1157 2 * video_encoder_config_.streams[0].max_bitrate_bps; |
1148 sender_call_->SetBitrateConfig(bitrate_config); | 1158 sender_call_->SetBitrateConfig(bitrate_config); |
1149 | 1159 |
1150 StartBitrateObserver encoder; | 1160 StartBitrateObserver encoder; |
1151 video_send_config_.encoder_settings.encoder = &encoder; | 1161 video_send_config_.encoder_settings.encoder = &encoder; |
1152 | 1162 |
1153 CreateVideoStreams(); | 1163 CreateVideoStreams(); |
1154 | 1164 |
| 1165 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1155 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 1166 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
1156 encoder.GetStartBitrateKbps()); | 1167 encoder.GetStartBitrateKbps()); |
1157 | 1168 |
1158 video_encoder_config_.streams[0].max_bitrate_bps = | 1169 video_encoder_config_.streams[0].max_bitrate_bps = |
1159 2 * bitrate_config.start_bitrate_bps; | 1170 2 * bitrate_config.start_bitrate_bps; |
1160 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 1171 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
1161 | 1172 |
1162 // New bitrate should be reconfigured above the previous max. As there's no | 1173 // New bitrate should be reconfigured above the previous max. As there's no |
1163 // network connection this shouldn't be flaky, as no bitrate should've been | 1174 // network connection this shouldn't be flaky, as no bitrate should've been |
1164 // reported in between. | 1175 // reported in between. |
| 1176 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1165 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1177 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1166 encoder.GetStartBitrateKbps()); | 1178 encoder.GetStartBitrateKbps()); |
1167 | 1179 |
1168 DestroyStreams(); | 1180 DestroyStreams(); |
1169 } | 1181 } |
1170 | 1182 |
1171 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { | 1183 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { |
1172 class FrameObserver : public rtc::VideoSinkInterface<VideoFrame> { | 1184 class FrameObserver : public rtc::VideoSinkInterface<VideoFrame> { |
1173 public: | 1185 public: |
1174 FrameObserver() : output_frame_event_(false, false) {} | 1186 FrameObserver() : output_frame_event_(false, false) {} |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1332 } | 1344 } |
1333 | 1345 |
1334 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { | 1346 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
1335 EXPECT_TRUE(IsReadyForEncode()); | 1347 EXPECT_TRUE(IsReadyForEncode()); |
1336 return 0; | 1348 return 0; |
1337 } | 1349 } |
1338 | 1350 |
1339 void OnVideoStreamsCreated( | 1351 void OnVideoStreamsCreated( |
1340 VideoSendStream* send_stream, | 1352 VideoSendStream* send_stream, |
1341 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1353 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1342 // Encoder initialization should be done in stream construction before | |
1343 // starting. | |
1344 EXPECT_TRUE(IsReadyForEncode()); | |
1345 stream_ = send_stream; | 1354 stream_ = send_stream; |
1346 } | 1355 } |
1347 | 1356 |
1348 void ModifyVideoConfigs( | 1357 void ModifyVideoConfigs( |
1349 VideoSendStream::Config* send_config, | 1358 VideoSendStream::Config* send_config, |
1350 std::vector<VideoReceiveStream::Config>* receive_configs, | 1359 std::vector<VideoReceiveStream::Config>* receive_configs, |
1351 VideoEncoderConfig* encoder_config) override { | 1360 VideoEncoderConfig* encoder_config) override { |
1352 send_config->encoder_settings.encoder = this; | 1361 send_config->encoder_settings.encoder = this; |
1353 encoder_config_ = *encoder_config; | 1362 encoder_config_ = *encoder_config; |
1354 } | 1363 } |
(...skipping 27 matching lines...) Expand all Loading... |
1382 EXPECT_EQ(1u, test_encoder.num_releases()); | 1391 EXPECT_EQ(1u, test_encoder.num_releases()); |
1383 } | 1392 } |
1384 | 1393 |
1385 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1394 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
1386 class VideoCodecConfigObserver : public test::SendTest, | 1395 class VideoCodecConfigObserver : public test::SendTest, |
1387 public test::FakeEncoder { | 1396 public test::FakeEncoder { |
1388 public: | 1397 public: |
1389 VideoCodecConfigObserver() | 1398 VideoCodecConfigObserver() |
1390 : SendTest(kDefaultTimeoutMs), | 1399 : SendTest(kDefaultTimeoutMs), |
1391 FakeEncoder(Clock::GetRealTimeClock()), | 1400 FakeEncoder(Clock::GetRealTimeClock()), |
| 1401 init_encode_event_(false, false), |
1392 num_initializations_(0) {} | 1402 num_initializations_(0) {} |
1393 | 1403 |
1394 private: | 1404 private: |
1395 void ModifyVideoConfigs( | 1405 void ModifyVideoConfigs( |
1396 VideoSendStream::Config* send_config, | 1406 VideoSendStream::Config* send_config, |
1397 std::vector<VideoReceiveStream::Config>* receive_configs, | 1407 std::vector<VideoReceiveStream::Config>* receive_configs, |
1398 VideoEncoderConfig* encoder_config) override { | 1408 VideoEncoderConfig* encoder_config) override { |
1399 send_config->encoder_settings.encoder = this; | 1409 send_config->encoder_settings.encoder = this; |
1400 encoder_config_ = *encoder_config; | 1410 encoder_config_ = *encoder_config; |
1401 } | 1411 } |
1402 | 1412 |
1403 void OnVideoStreamsCreated( | 1413 void OnVideoStreamsCreated( |
1404 VideoSendStream* send_stream, | 1414 VideoSendStream* send_stream, |
1405 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1415 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1406 stream_ = send_stream; | 1416 stream_ = send_stream; |
1407 } | 1417 } |
1408 | 1418 |
1409 int32_t InitEncode(const VideoCodec* config, | 1419 int32_t InitEncode(const VideoCodec* config, |
1410 int32_t number_of_cores, | 1420 int32_t number_of_cores, |
1411 size_t max_payload_size) override { | 1421 size_t max_payload_size) override { |
1412 if (num_initializations_ == 0) { | 1422 if (num_initializations_ == 0) { |
1413 // Verify default values. | 1423 // Verify default values. |
1414 EXPECT_EQ(kRealtimeVideo, config->mode); | 1424 EXPECT_EQ(kRealtimeVideo, config->mode); |
1415 } else { | 1425 } else { |
1416 // Verify that changed values are propagated. | 1426 // Verify that changed values are propagated. |
1417 EXPECT_EQ(kScreensharing, config->mode); | 1427 EXPECT_EQ(kScreensharing, config->mode); |
1418 } | 1428 } |
1419 ++num_initializations_; | 1429 ++num_initializations_; |
| 1430 init_encode_event_.Set(); |
1420 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1431 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1421 } | 1432 } |
1422 | 1433 |
1423 void PerformTest() override { | 1434 void PerformTest() override { |
| 1435 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1424 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1436 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1425 | 1437 |
1426 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1438 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1427 stream_->ReconfigureVideoEncoder(encoder_config_); | 1439 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1440 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1428 EXPECT_EQ(2u, num_initializations_) | 1441 EXPECT_EQ(2u, num_initializations_) |
1429 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1442 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1430 "new encoder settings."; | 1443 "new encoder settings."; |
1431 } | 1444 } |
1432 | 1445 |
| 1446 rtc::Event init_encode_event_; |
1433 size_t num_initializations_; | 1447 size_t num_initializations_; |
1434 VideoSendStream* stream_; | 1448 VideoSendStream* stream_; |
1435 VideoEncoderConfig encoder_config_; | 1449 VideoEncoderConfig encoder_config_; |
1436 } test; | 1450 } test; |
1437 | 1451 |
1438 RunBaseTest(&test); | 1452 RunBaseTest(&test); |
1439 } | 1453 } |
1440 | 1454 |
1441 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; | 1455 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; |
1442 template <typename T> | 1456 template <typename T> |
1443 class VideoCodecConfigObserver : public test::SendTest, | 1457 class VideoCodecConfigObserver : public test::SendTest, |
1444 public test::FakeEncoder { | 1458 public test::FakeEncoder { |
1445 public: | 1459 public: |
1446 VideoCodecConfigObserver(VideoCodecType video_codec_type, | 1460 VideoCodecConfigObserver(VideoCodecType video_codec_type, |
1447 const char* codec_name) | 1461 const char* codec_name) |
1448 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1462 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
1449 FakeEncoder(Clock::GetRealTimeClock()), | 1463 FakeEncoder(Clock::GetRealTimeClock()), |
1450 video_codec_type_(video_codec_type), | 1464 video_codec_type_(video_codec_type), |
1451 codec_name_(codec_name), | 1465 codec_name_(codec_name), |
| 1466 init_encode_event_(false, false), |
1452 num_initializations_(0) { | 1467 num_initializations_(0) { |
1453 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); | 1468 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
1454 } | 1469 } |
1455 | 1470 |
1456 private: | 1471 private: |
1457 void ModifyVideoConfigs( | 1472 void ModifyVideoConfigs( |
1458 VideoSendStream::Config* send_config, | 1473 VideoSendStream::Config* send_config, |
1459 std::vector<VideoReceiveStream::Config>* receive_configs, | 1474 std::vector<VideoReceiveStream::Config>* receive_configs, |
1460 VideoEncoderConfig* encoder_config) override { | 1475 VideoEncoderConfig* encoder_config) override { |
1461 send_config->encoder_settings.encoder = this; | 1476 send_config->encoder_settings.encoder = this; |
(...skipping 13 matching lines...) Expand all Loading... |
1475 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1490 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1476 stream_ = send_stream; | 1491 stream_ = send_stream; |
1477 } | 1492 } |
1478 | 1493 |
1479 int32_t InitEncode(const VideoCodec* config, | 1494 int32_t InitEncode(const VideoCodec* config, |
1480 int32_t number_of_cores, | 1495 int32_t number_of_cores, |
1481 size_t max_payload_size) override { | 1496 size_t max_payload_size) override { |
1482 EXPECT_EQ(video_codec_type_, config->codecType); | 1497 EXPECT_EQ(video_codec_type_, config->codecType); |
1483 VerifyCodecSpecifics(*config); | 1498 VerifyCodecSpecifics(*config); |
1484 ++num_initializations_; | 1499 ++num_initializations_; |
| 1500 init_encode_event_.Set(); |
1485 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1501 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1486 } | 1502 } |
1487 | 1503 |
1488 void VerifyCodecSpecifics(const VideoCodec& config) const; | 1504 void VerifyCodecSpecifics(const VideoCodec& config) const; |
1489 | 1505 |
1490 void PerformTest() override { | 1506 void PerformTest() override { |
1491 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1507 EXPECT_TRUE( |
| 1508 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
| 1509 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1492 | 1510 |
1493 encoder_settings_.frameDroppingOn = true; | 1511 encoder_settings_.frameDroppingOn = true; |
1494 stream_->ReconfigureVideoEncoder(encoder_config_); | 1512 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1513 ASSERT_TRUE( |
| 1514 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1495 EXPECT_EQ(2u, num_initializations_) | 1515 EXPECT_EQ(2u, num_initializations_) |
1496 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1516 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1497 "new encoder settings."; | 1517 "new encoder settings."; |
1498 } | 1518 } |
1499 | 1519 |
1500 int32_t Encode(const VideoFrame& input_image, | 1520 int32_t Encode(const VideoFrame& input_image, |
1501 const CodecSpecificInfo* codec_specific_info, | 1521 const CodecSpecificInfo* codec_specific_info, |
1502 const std::vector<FrameType>* frame_types) override { | 1522 const std::vector<FrameType>* frame_types) override { |
1503 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. | 1523 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. |
1504 return 0; | 1524 return 0; |
1505 } | 1525 } |
1506 | 1526 |
1507 T encoder_settings_; | 1527 T encoder_settings_; |
1508 const VideoCodecType video_codec_type_; | 1528 const VideoCodecType video_codec_type_; |
1509 const char* const codec_name_; | 1529 const char* const codec_name_; |
| 1530 rtc::Event init_encode_event_; |
1510 size_t num_initializations_; | 1531 size_t num_initializations_; |
1511 VideoSendStream* stream_; | 1532 VideoSendStream* stream_; |
1512 VideoEncoderConfig encoder_config_; | 1533 VideoEncoderConfig encoder_config_; |
1513 }; | 1534 }; |
1514 | 1535 |
1515 template <> | 1536 template <> |
1516 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( | 1537 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( |
1517 const VideoCodec& config) const { | 1538 const VideoCodec& config) const { |
1518 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, | 1539 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, |
1519 sizeof(encoder_settings_))); | 1540 sizeof(encoder_settings_))); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1688 static const int kLowerMaxBitrateKbps = 312; | 1709 static const int kLowerMaxBitrateKbps = 312; |
1689 static const int kMaxBitrateKbps = 413; | 1710 static const int kMaxBitrateKbps = 413; |
1690 static const int kIncreasedStartBitrateKbps = 451; | 1711 static const int kIncreasedStartBitrateKbps = 451; |
1691 static const int kIncreasedMaxBitrateKbps = 597; | 1712 static const int kIncreasedMaxBitrateKbps = 597; |
1692 class EncoderBitrateThresholdObserver : public test::SendTest, | 1713 class EncoderBitrateThresholdObserver : public test::SendTest, |
1693 public test::FakeEncoder { | 1714 public test::FakeEncoder { |
1694 public: | 1715 public: |
1695 EncoderBitrateThresholdObserver() | 1716 EncoderBitrateThresholdObserver() |
1696 : SendTest(kDefaultTimeoutMs), | 1717 : SendTest(kDefaultTimeoutMs), |
1697 FakeEncoder(Clock::GetRealTimeClock()), | 1718 FakeEncoder(Clock::GetRealTimeClock()), |
| 1719 init_encode_event_(false, false), |
1698 num_initializations_(0) {} | 1720 num_initializations_(0) {} |
1699 | 1721 |
1700 private: | 1722 private: |
1701 int32_t InitEncode(const VideoCodec* codecSettings, | 1723 int32_t InitEncode(const VideoCodec* codecSettings, |
1702 int32_t numberOfCores, | 1724 int32_t numberOfCores, |
1703 size_t maxPayloadSize) override { | 1725 size_t maxPayloadSize) override { |
1704 if (num_initializations_ == 0) { | 1726 if (num_initializations_ == 0) { |
1705 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1727 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1706 codecSettings->minBitrate); | 1728 codecSettings->minBitrate); |
1707 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1729 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1708 codecSettings->startBitrate); | 1730 codecSettings->startBitrate); |
1709 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1731 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1710 codecSettings->maxBitrate); | 1732 codecSettings->maxBitrate); |
1711 observation_complete_.Set(); | 1733 observation_complete_.Set(); |
1712 } else if (num_initializations_ == 1) { | 1734 } else if (num_initializations_ == 1) { |
1713 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1735 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1714 codecSettings->maxBitrate); | 1736 codecSettings->maxBitrate); |
1715 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1737 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1716 // Since this is not an end-to-end call no receiver should have been | 1738 // Since this is not an end-to-end call no receiver should have been |
1717 // returning a REMB that could lower this estimate. | 1739 // returning a REMB that could lower this estimate. |
1718 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1740 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1719 } else if (num_initializations_ == 2) { | 1741 } else if (num_initializations_ == 2) { |
1720 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1742 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1721 codecSettings->maxBitrate); | 1743 codecSettings->maxBitrate); |
1722 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), | 1744 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), |
1723 codecSettings->startBitrate); | 1745 codecSettings->startBitrate); |
1724 } | 1746 } |
1725 ++num_initializations_; | 1747 ++num_initializations_; |
| 1748 init_encode_event_.Set(); |
1726 return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 1749 return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
1727 maxPayloadSize); | 1750 maxPayloadSize); |
1728 } | 1751 } |
1729 | 1752 |
1730 Call::Config GetSenderCallConfig() override { | 1753 Call::Config GetSenderCallConfig() override { |
1731 Call::Config config; | 1754 Call::Config config; |
1732 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 1755 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
1733 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 1756 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
1734 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 1757 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
1735 return config; | 1758 return config; |
(...skipping 15 matching lines...) Expand all Loading... |
1751 call_ = sender_call; | 1774 call_ = sender_call; |
1752 } | 1775 } |
1753 | 1776 |
1754 void OnVideoStreamsCreated( | 1777 void OnVideoStreamsCreated( |
1755 VideoSendStream* send_stream, | 1778 VideoSendStream* send_stream, |
1756 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1779 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1757 send_stream_ = send_stream; | 1780 send_stream_ = send_stream; |
1758 } | 1781 } |
1759 | 1782 |
1760 void PerformTest() override { | 1783 void PerformTest() override { |
| 1784 ASSERT_TRUE( |
| 1785 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1786 << "Timed out while waiting encoder to be configured."; |
1761 Call::Config::BitrateConfig bitrate_config; | 1787 Call::Config::BitrateConfig bitrate_config; |
1762 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1788 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
1763 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1789 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
1764 call_->SetBitrateConfig(bitrate_config); | 1790 call_->SetBitrateConfig(bitrate_config); |
1765 EXPECT_TRUE(Wait()) | 1791 EXPECT_TRUE(Wait()) |
1766 << "Timed out while waiting encoder to be configured."; | 1792 << "Timed out while waiting encoder to be configured."; |
1767 encoder_config_.streams[0].min_bitrate_bps = 0; | 1793 encoder_config_.streams[0].min_bitrate_bps = 0; |
1768 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 1794 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
1769 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1795 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1796 ASSERT_TRUE( |
| 1797 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1770 EXPECT_EQ(2, num_initializations_) | 1798 EXPECT_EQ(2, num_initializations_) |
1771 << "Encoder should have been reconfigured with the new value."; | 1799 << "Encoder should have been reconfigured with the new value."; |
1772 encoder_config_.streams[0].target_bitrate_bps = | 1800 encoder_config_.streams[0].target_bitrate_bps = |
1773 encoder_config_.streams[0].min_bitrate_bps; | 1801 encoder_config_.streams[0].min_bitrate_bps; |
1774 encoder_config_.streams[0].max_bitrate_bps = | 1802 encoder_config_.streams[0].max_bitrate_bps = |
1775 kIncreasedMaxBitrateKbps * 1000; | 1803 kIncreasedMaxBitrateKbps * 1000; |
1776 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1804 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1805 ASSERT_TRUE( |
| 1806 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1777 EXPECT_EQ(3, num_initializations_) | 1807 EXPECT_EQ(3, num_initializations_) |
1778 << "Encoder should have been reconfigured with the new value."; | 1808 << "Encoder should have been reconfigured with the new value."; |
1779 } | 1809 } |
1780 | 1810 |
| 1811 rtc::Event init_encode_event_; |
1781 int num_initializations_; | 1812 int num_initializations_; |
1782 webrtc::Call* call_; | 1813 webrtc::Call* call_; |
1783 webrtc::VideoSendStream* send_stream_; | 1814 webrtc::VideoSendStream* send_stream_; |
1784 webrtc::VideoEncoderConfig encoder_config_; | 1815 webrtc::VideoEncoderConfig encoder_config_; |
1785 } test; | 1816 } test; |
1786 | 1817 |
1787 RunBaseTest(&test); | 1818 RunBaseTest(&test); |
1788 } | 1819 } |
1789 | 1820 |
1790 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 1821 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2272 observation_complete_.Set(); | 2303 observation_complete_.Set(); |
2273 } | 2304 } |
2274 } | 2305 } |
2275 } test; | 2306 } test; |
2276 | 2307 |
2277 RunBaseTest(&test); | 2308 RunBaseTest(&test); |
2278 } | 2309 } |
2279 #endif | 2310 #endif |
2280 | 2311 |
2281 } // namespace webrtc | 2312 } // namespace webrtc |
OLD | NEW |