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

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

Issue 1896413002: Reland of Initialize/configure video encoders asychronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase2 Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> // max 10 #include <algorithm> // max
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698