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 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1052 bool bitrate_capped_; | 1052 bool bitrate_capped_; |
1053 } test; | 1053 } test; |
1054 | 1054 |
1055 RunBaseTest(&test); | 1055 RunBaseTest(&test); |
1056 } | 1056 } |
1057 | 1057 |
1058 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 1058 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
1059 class StartBitrateObserver : public test::FakeEncoder { | 1059 class StartBitrateObserver : public test::FakeEncoder { |
1060 public: | 1060 public: |
1061 StartBitrateObserver() | 1061 StartBitrateObserver() |
1062 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} | 1062 : FakeEncoder(Clock::GetRealTimeClock()), |
| 1063 start_bitrate_changed_(false, false), |
| 1064 start_bitrate_kbps_(0) {} |
| 1065 |
1063 int32_t InitEncode(const VideoCodec* config, | 1066 int32_t InitEncode(const VideoCodec* config, |
1064 int32_t number_of_cores, | 1067 int32_t number_of_cores, |
1065 size_t max_payload_size) override { | 1068 size_t max_payload_size) override { |
1066 rtc::CritScope lock(&crit_); | 1069 rtc::CritScope lock(&crit_); |
1067 start_bitrate_kbps_ = config->startBitrate; | 1070 start_bitrate_kbps_ = config->startBitrate; |
| 1071 start_bitrate_changed_.Set(); |
1068 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1072 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1069 } | 1073 } |
1070 | 1074 |
1071 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { | 1075 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
1072 rtc::CritScope lock(&crit_); | 1076 rtc::CritScope lock(&crit_); |
1073 start_bitrate_kbps_ = new_target_bitrate; | 1077 start_bitrate_kbps_ = new_target_bitrate; |
| 1078 start_bitrate_changed_.Set(); |
1074 return FakeEncoder::SetRates(new_target_bitrate, framerate); | 1079 return FakeEncoder::SetRates(new_target_bitrate, framerate); |
1075 } | 1080 } |
1076 | 1081 |
1077 int GetStartBitrateKbps() const { | 1082 int GetStartBitrateKbps() const { |
1078 rtc::CritScope lock(&crit_); | 1083 rtc::CritScope lock(&crit_); |
1079 return start_bitrate_kbps_; | 1084 return start_bitrate_kbps_; |
1080 } | 1085 } |
1081 | 1086 |
| 1087 bool WaitForStartBitrate() { |
| 1088 return start_bitrate_changed_.Wait( |
| 1089 VideoSendStreamTest::kDefaultTimeoutMs); |
| 1090 } |
| 1091 |
1082 private: | 1092 private: |
1083 mutable rtc::CriticalSection crit_; | 1093 mutable rtc::CriticalSection crit_; |
| 1094 rtc::Event start_bitrate_changed_; |
1084 int start_bitrate_kbps_ GUARDED_BY(crit_); | 1095 int start_bitrate_kbps_ GUARDED_BY(crit_); |
1085 }; | 1096 }; |
1086 | 1097 |
1087 CreateSenderCall(Call::Config()); | 1098 CreateSenderCall(Call::Config()); |
1088 | 1099 |
1089 test::NullTransport transport; | 1100 test::NullTransport transport; |
1090 CreateSendConfig(1, 0, &transport); | 1101 CreateSendConfig(1, 0, &transport); |
1091 | 1102 |
1092 Call::Config::BitrateConfig bitrate_config; | 1103 Call::Config::BitrateConfig bitrate_config; |
1093 bitrate_config.start_bitrate_bps = | 1104 bitrate_config.start_bitrate_bps = |
1094 2 * video_encoder_config_.streams[0].max_bitrate_bps; | 1105 2 * video_encoder_config_.streams[0].max_bitrate_bps; |
1095 sender_call_->SetBitrateConfig(bitrate_config); | 1106 sender_call_->SetBitrateConfig(bitrate_config); |
1096 | 1107 |
1097 StartBitrateObserver encoder; | 1108 StartBitrateObserver encoder; |
1098 video_send_config_.encoder_settings.encoder = &encoder; | 1109 video_send_config_.encoder_settings.encoder = &encoder; |
1099 | 1110 |
1100 CreateVideoStreams(); | 1111 CreateVideoStreams(); |
1101 | 1112 |
| 1113 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1102 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 1114 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
1103 encoder.GetStartBitrateKbps()); | 1115 encoder.GetStartBitrateKbps()); |
1104 | 1116 |
1105 video_encoder_config_.streams[0].max_bitrate_bps = | 1117 video_encoder_config_.streams[0].max_bitrate_bps = |
1106 2 * bitrate_config.start_bitrate_bps; | 1118 2 * bitrate_config.start_bitrate_bps; |
1107 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 1119 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
1108 | 1120 |
1109 // New bitrate should be reconfigured above the previous max. As there's no | 1121 // New bitrate should be reconfigured above the previous max. As there's no |
1110 // network connection this shouldn't be flaky, as no bitrate should've been | 1122 // network connection this shouldn't be flaky, as no bitrate should've been |
1111 // reported in between. | 1123 // reported in between. |
| 1124 EXPECT_TRUE(encoder.WaitForStartBitrate()); |
1112 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1125 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1113 encoder.GetStartBitrateKbps()); | 1126 encoder.GetStartBitrateKbps()); |
1114 | 1127 |
1115 DestroyStreams(); | 1128 DestroyStreams(); |
1116 } | 1129 } |
1117 | 1130 |
1118 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { | 1131 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { |
1119 class FrameObserver : public I420FrameCallback { | 1132 class FrameObserver : public I420FrameCallback { |
1120 public: | 1133 public: |
1121 FrameObserver() : output_frame_event_(false, false) {} | 1134 FrameObserver() : output_frame_event_(false, false) {} |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1317 } | 1330 } |
1318 | 1331 |
1319 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { | 1332 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
1320 EXPECT_TRUE(IsReadyForEncode()); | 1333 EXPECT_TRUE(IsReadyForEncode()); |
1321 return 0; | 1334 return 0; |
1322 } | 1335 } |
1323 | 1336 |
1324 void OnVideoStreamsCreated( | 1337 void OnVideoStreamsCreated( |
1325 VideoSendStream* send_stream, | 1338 VideoSendStream* send_stream, |
1326 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1339 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1327 // Encoder initialization should be done in stream construction before | |
1328 // starting. | |
1329 EXPECT_TRUE(IsReadyForEncode()); | |
1330 stream_ = send_stream; | 1340 stream_ = send_stream; |
1331 } | 1341 } |
1332 | 1342 |
1333 void ModifyVideoConfigs( | 1343 void ModifyVideoConfigs( |
1334 VideoSendStream::Config* send_config, | 1344 VideoSendStream::Config* send_config, |
1335 std::vector<VideoReceiveStream::Config>* receive_configs, | 1345 std::vector<VideoReceiveStream::Config>* receive_configs, |
1336 VideoEncoderConfig* encoder_config) override { | 1346 VideoEncoderConfig* encoder_config) override { |
1337 send_config->encoder_settings.encoder = this; | 1347 send_config->encoder_settings.encoder = this; |
1338 encoder_config_ = *encoder_config; | 1348 encoder_config_ = *encoder_config; |
1339 } | 1349 } |
(...skipping 27 matching lines...) Expand all Loading... |
1367 EXPECT_EQ(1u, test_encoder.num_releases()); | 1377 EXPECT_EQ(1u, test_encoder.num_releases()); |
1368 } | 1378 } |
1369 | 1379 |
1370 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1380 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
1371 class VideoCodecConfigObserver : public test::SendTest, | 1381 class VideoCodecConfigObserver : public test::SendTest, |
1372 public test::FakeEncoder { | 1382 public test::FakeEncoder { |
1373 public: | 1383 public: |
1374 VideoCodecConfigObserver() | 1384 VideoCodecConfigObserver() |
1375 : SendTest(kDefaultTimeoutMs), | 1385 : SendTest(kDefaultTimeoutMs), |
1376 FakeEncoder(Clock::GetRealTimeClock()), | 1386 FakeEncoder(Clock::GetRealTimeClock()), |
| 1387 init_encode_event_(false, false), |
1377 num_initializations_(0) {} | 1388 num_initializations_(0) {} |
1378 | 1389 |
1379 private: | 1390 private: |
1380 void ModifyVideoConfigs( | 1391 void ModifyVideoConfigs( |
1381 VideoSendStream::Config* send_config, | 1392 VideoSendStream::Config* send_config, |
1382 std::vector<VideoReceiveStream::Config>* receive_configs, | 1393 std::vector<VideoReceiveStream::Config>* receive_configs, |
1383 VideoEncoderConfig* encoder_config) override { | 1394 VideoEncoderConfig* encoder_config) override { |
1384 send_config->encoder_settings.encoder = this; | 1395 send_config->encoder_settings.encoder = this; |
1385 encoder_config_ = *encoder_config; | 1396 encoder_config_ = *encoder_config; |
1386 } | 1397 } |
1387 | 1398 |
1388 void OnVideoStreamsCreated( | 1399 void OnVideoStreamsCreated( |
1389 VideoSendStream* send_stream, | 1400 VideoSendStream* send_stream, |
1390 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1401 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1391 stream_ = send_stream; | 1402 stream_ = send_stream; |
1392 } | 1403 } |
1393 | 1404 |
1394 int32_t InitEncode(const VideoCodec* config, | 1405 int32_t InitEncode(const VideoCodec* config, |
1395 int32_t number_of_cores, | 1406 int32_t number_of_cores, |
1396 size_t max_payload_size) override { | 1407 size_t max_payload_size) override { |
1397 if (num_initializations_ == 0) { | 1408 if (num_initializations_ == 0) { |
1398 // Verify default values. | 1409 // Verify default values. |
1399 EXPECT_EQ(kRealtimeVideo, config->mode); | 1410 EXPECT_EQ(kRealtimeVideo, config->mode); |
1400 } else { | 1411 } else { |
1401 // Verify that changed values are propagated. | 1412 // Verify that changed values are propagated. |
1402 EXPECT_EQ(kScreensharing, config->mode); | 1413 EXPECT_EQ(kScreensharing, config->mode); |
1403 } | 1414 } |
1404 ++num_initializations_; | 1415 ++num_initializations_; |
| 1416 init_encode_event_.Set(); |
1405 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1417 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1406 } | 1418 } |
1407 | 1419 |
1408 void PerformTest() override { | 1420 void PerformTest() override { |
| 1421 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1409 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1422 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1410 | 1423 |
1411 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; | 1424 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
1412 stream_->ReconfigureVideoEncoder(encoder_config_); | 1425 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1426 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
1413 EXPECT_EQ(2u, num_initializations_) | 1427 EXPECT_EQ(2u, num_initializations_) |
1414 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1428 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1415 "new encoder settings."; | 1429 "new encoder settings."; |
1416 } | 1430 } |
1417 | 1431 |
| 1432 rtc::Event init_encode_event_; |
1418 size_t num_initializations_; | 1433 size_t num_initializations_; |
1419 VideoSendStream* stream_; | 1434 VideoSendStream* stream_; |
1420 VideoEncoderConfig encoder_config_; | 1435 VideoEncoderConfig encoder_config_; |
1421 } test; | 1436 } test; |
1422 | 1437 |
1423 RunBaseTest(&test); | 1438 RunBaseTest(&test); |
1424 } | 1439 } |
1425 | 1440 |
1426 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; | 1441 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; |
1427 template <typename T> | 1442 template <typename T> |
1428 class VideoCodecConfigObserver : public test::SendTest, | 1443 class VideoCodecConfigObserver : public test::SendTest, |
1429 public test::FakeEncoder { | 1444 public test::FakeEncoder { |
1430 public: | 1445 public: |
1431 VideoCodecConfigObserver(VideoCodecType video_codec_type, | 1446 VideoCodecConfigObserver(VideoCodecType video_codec_type, |
1432 const char* codec_name) | 1447 const char* codec_name) |
1433 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1448 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
1434 FakeEncoder(Clock::GetRealTimeClock()), | 1449 FakeEncoder(Clock::GetRealTimeClock()), |
1435 video_codec_type_(video_codec_type), | 1450 video_codec_type_(video_codec_type), |
1436 codec_name_(codec_name), | 1451 codec_name_(codec_name), |
| 1452 init_encode_event_(false, false), |
1437 num_initializations_(0) { | 1453 num_initializations_(0) { |
1438 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); | 1454 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
1439 } | 1455 } |
1440 | 1456 |
1441 private: | 1457 private: |
1442 void ModifyVideoConfigs( | 1458 void ModifyVideoConfigs( |
1443 VideoSendStream::Config* send_config, | 1459 VideoSendStream::Config* send_config, |
1444 std::vector<VideoReceiveStream::Config>* receive_configs, | 1460 std::vector<VideoReceiveStream::Config>* receive_configs, |
1445 VideoEncoderConfig* encoder_config) override { | 1461 VideoEncoderConfig* encoder_config) override { |
1446 send_config->encoder_settings.encoder = this; | 1462 send_config->encoder_settings.encoder = this; |
(...skipping 13 matching lines...) Expand all Loading... |
1460 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1476 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1461 stream_ = send_stream; | 1477 stream_ = send_stream; |
1462 } | 1478 } |
1463 | 1479 |
1464 int32_t InitEncode(const VideoCodec* config, | 1480 int32_t InitEncode(const VideoCodec* config, |
1465 int32_t number_of_cores, | 1481 int32_t number_of_cores, |
1466 size_t max_payload_size) override { | 1482 size_t max_payload_size) override { |
1467 EXPECT_EQ(video_codec_type_, config->codecType); | 1483 EXPECT_EQ(video_codec_type_, config->codecType); |
1468 VerifyCodecSpecifics(*config); | 1484 VerifyCodecSpecifics(*config); |
1469 ++num_initializations_; | 1485 ++num_initializations_; |
| 1486 init_encode_event_.Set(); |
1470 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 1487 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
1471 } | 1488 } |
1472 | 1489 |
1473 void VerifyCodecSpecifics(const VideoCodec& config) const; | 1490 void VerifyCodecSpecifics(const VideoCodec& config) const; |
1474 | 1491 |
1475 void PerformTest() override { | 1492 void PerformTest() override { |
1476 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; | 1493 EXPECT_TRUE( |
| 1494 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
| 1495 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
1477 | 1496 |
1478 encoder_settings_.frameDroppingOn = true; | 1497 encoder_settings_.frameDroppingOn = true; |
1479 stream_->ReconfigureVideoEncoder(encoder_config_); | 1498 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1499 ASSERT_TRUE( |
| 1500 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1480 EXPECT_EQ(2u, num_initializations_) | 1501 EXPECT_EQ(2u, num_initializations_) |
1481 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1502 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1482 "new encoder settings."; | 1503 "new encoder settings."; |
1483 } | 1504 } |
1484 | 1505 |
1485 int32_t Encode(const VideoFrame& input_image, | 1506 int32_t Encode(const VideoFrame& input_image, |
1486 const CodecSpecificInfo* codec_specific_info, | 1507 const CodecSpecificInfo* codec_specific_info, |
1487 const std::vector<FrameType>* frame_types) override { | 1508 const std::vector<FrameType>* frame_types) override { |
1488 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. | 1509 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. |
1489 return 0; | 1510 return 0; |
1490 } | 1511 } |
1491 | 1512 |
1492 T encoder_settings_; | 1513 T encoder_settings_; |
1493 const VideoCodecType video_codec_type_; | 1514 const VideoCodecType video_codec_type_; |
1494 const char* const codec_name_; | 1515 const char* const codec_name_; |
| 1516 rtc::Event init_encode_event_; |
1495 size_t num_initializations_; | 1517 size_t num_initializations_; |
1496 VideoSendStream* stream_; | 1518 VideoSendStream* stream_; |
1497 VideoEncoderConfig encoder_config_; | 1519 VideoEncoderConfig encoder_config_; |
1498 }; | 1520 }; |
1499 | 1521 |
1500 template <> | 1522 template <> |
1501 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( | 1523 void VideoCodecConfigObserver<VideoCodecH264>::VerifyCodecSpecifics( |
1502 const VideoCodec& config) const { | 1524 const VideoCodec& config) const { |
1503 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, | 1525 EXPECT_EQ(0, memcmp(&config.codecSpecific.H264, &encoder_settings_, |
1504 sizeof(encoder_settings_))); | 1526 sizeof(encoder_settings_))); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1673 static const int kLowerMaxBitrateKbps = 312; | 1695 static const int kLowerMaxBitrateKbps = 312; |
1674 static const int kMaxBitrateKbps = 413; | 1696 static const int kMaxBitrateKbps = 413; |
1675 static const int kIncreasedStartBitrateKbps = 451; | 1697 static const int kIncreasedStartBitrateKbps = 451; |
1676 static const int kIncreasedMaxBitrateKbps = 597; | 1698 static const int kIncreasedMaxBitrateKbps = 597; |
1677 class EncoderBitrateThresholdObserver : public test::SendTest, | 1699 class EncoderBitrateThresholdObserver : public test::SendTest, |
1678 public test::FakeEncoder { | 1700 public test::FakeEncoder { |
1679 public: | 1701 public: |
1680 EncoderBitrateThresholdObserver() | 1702 EncoderBitrateThresholdObserver() |
1681 : SendTest(kDefaultTimeoutMs), | 1703 : SendTest(kDefaultTimeoutMs), |
1682 FakeEncoder(Clock::GetRealTimeClock()), | 1704 FakeEncoder(Clock::GetRealTimeClock()), |
| 1705 init_encode_event_(false, false), |
1683 num_initializations_(0) {} | 1706 num_initializations_(0) {} |
1684 | 1707 |
1685 private: | 1708 private: |
1686 int32_t InitEncode(const VideoCodec* codecSettings, | 1709 int32_t InitEncode(const VideoCodec* codecSettings, |
1687 int32_t numberOfCores, | 1710 int32_t numberOfCores, |
1688 size_t maxPayloadSize) override { | 1711 size_t maxPayloadSize) override { |
1689 if (num_initializations_ == 0) { | 1712 if (num_initializations_ == 0) { |
1690 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1713 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1691 codecSettings->minBitrate); | 1714 codecSettings->minBitrate); |
1692 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1715 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1693 codecSettings->startBitrate); | 1716 codecSettings->startBitrate); |
1694 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1717 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1695 codecSettings->maxBitrate); | 1718 codecSettings->maxBitrate); |
1696 observation_complete_.Set(); | |
1697 } else if (num_initializations_ == 1) { | 1719 } else if (num_initializations_ == 1) { |
1698 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1720 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1699 codecSettings->maxBitrate); | 1721 codecSettings->maxBitrate); |
1700 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1722 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1701 // Since this is not an end-to-end call no receiver should have been | 1723 // Since this is not an end-to-end call no receiver should have been |
1702 // returning a REMB that could lower this estimate. | 1724 // returning a REMB that could lower this estimate. |
1703 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1725 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1704 } else if (num_initializations_ == 2) { | 1726 } else if (num_initializations_ == 2) { |
1705 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1727 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1706 codecSettings->maxBitrate); | 1728 codecSettings->maxBitrate); |
1707 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), | 1729 EXPECT_EQ(static_cast<unsigned int>(kIncreasedStartBitrateKbps), |
1708 codecSettings->startBitrate); | 1730 codecSettings->startBitrate); |
1709 } | 1731 } |
1710 ++num_initializations_; | 1732 ++num_initializations_; |
| 1733 init_encode_event_.Set(); |
1711 return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 1734 return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
1712 maxPayloadSize); | 1735 maxPayloadSize); |
1713 } | 1736 } |
1714 | 1737 |
1715 Call::Config GetSenderCallConfig() override { | 1738 Call::Config GetSenderCallConfig() override { |
1716 Call::Config config; | 1739 Call::Config config; |
1717 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 1740 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
1718 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 1741 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
1719 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 1742 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
1720 return config; | 1743 return config; |
(...skipping 15 matching lines...) Expand all Loading... |
1736 call_ = sender_call; | 1759 call_ = sender_call; |
1737 } | 1760 } |
1738 | 1761 |
1739 void OnVideoStreamsCreated( | 1762 void OnVideoStreamsCreated( |
1740 VideoSendStream* send_stream, | 1763 VideoSendStream* send_stream, |
1741 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1764 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1742 send_stream_ = send_stream; | 1765 send_stream_ = send_stream; |
1743 } | 1766 } |
1744 | 1767 |
1745 void PerformTest() override { | 1768 void PerformTest() override { |
| 1769 ASSERT_TRUE( |
| 1770 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
| 1771 << "Timed out while waiting encoder to be configured."; |
1746 Call::Config::BitrateConfig bitrate_config; | 1772 Call::Config::BitrateConfig bitrate_config; |
1747 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1773 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
1748 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1774 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
1749 call_->SetBitrateConfig(bitrate_config); | 1775 call_->SetBitrateConfig(bitrate_config); |
1750 EXPECT_TRUE(Wait()) | |
1751 << "Timed out while waiting encoder to be configured."; | |
1752 encoder_config_.streams[0].min_bitrate_bps = 0; | 1776 encoder_config_.streams[0].min_bitrate_bps = 0; |
1753 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 1777 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
1754 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1778 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1779 ASSERT_TRUE( |
| 1780 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1755 EXPECT_EQ(2, num_initializations_) | 1781 EXPECT_EQ(2, num_initializations_) |
1756 << "Encoder should have been reconfigured with the new value."; | 1782 << "Encoder should have been reconfigured with the new value."; |
1757 encoder_config_.streams[0].target_bitrate_bps = | 1783 encoder_config_.streams[0].target_bitrate_bps = |
1758 encoder_config_.streams[0].min_bitrate_bps; | 1784 encoder_config_.streams[0].min_bitrate_bps; |
1759 encoder_config_.streams[0].max_bitrate_bps = | 1785 encoder_config_.streams[0].max_bitrate_bps = |
1760 kIncreasedMaxBitrateKbps * 1000; | 1786 kIncreasedMaxBitrateKbps * 1000; |
1761 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1787 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1788 ASSERT_TRUE( |
| 1789 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
1762 EXPECT_EQ(3, num_initializations_) | 1790 EXPECT_EQ(3, num_initializations_) |
1763 << "Encoder should have been reconfigured with the new value."; | 1791 << "Encoder should have been reconfigured with the new value."; |
1764 } | 1792 } |
1765 | 1793 |
| 1794 rtc::Event init_encode_event_; |
1766 int num_initializations_; | 1795 int num_initializations_; |
1767 webrtc::Call* call_; | 1796 webrtc::Call* call_; |
1768 webrtc::VideoSendStream* send_stream_; | 1797 webrtc::VideoSendStream* send_stream_; |
1769 webrtc::VideoEncoderConfig encoder_config_; | 1798 webrtc::VideoEncoderConfig encoder_config_; |
1770 } test; | 1799 } test; |
1771 | 1800 |
1772 RunBaseTest(&test); | 1801 RunBaseTest(&test); |
1773 } | 1802 } |
1774 | 1803 |
1775 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 1804 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2231 observation_complete_.Set(); | 2260 observation_complete_.Set(); |
2232 } | 2261 } |
2233 } | 2262 } |
2234 } test; | 2263 } test; |
2235 | 2264 |
2236 RunBaseTest(&test); | 2265 RunBaseTest(&test); |
2237 } | 2266 } |
2238 #endif | 2267 #endif |
2239 | 2268 |
2240 } // namespace webrtc | 2269 } // namespace webrtc |
OLD | NEW |