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

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

Issue 1757313002: Initialize/configure video encoders asychronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 9 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
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 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW
« webrtc/video/video_send_stream.cc ('K') | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698