Index: webrtc/video/video_send_stream_tests.cc |
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc |
index 4243ee69de42b8e9c9afd1efc79d5985e18e2b69..de5f4b0f28bea0910289c78a402346f14745f32a 100644 |
--- a/webrtc/video/video_send_stream_tests.cc |
+++ b/webrtc/video/video_send_stream_tests.cc |
@@ -1116,18 +1116,22 @@ TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
class StartBitrateObserver : public test::FakeEncoder { |
public: |
StartBitrateObserver() |
- : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} |
+ : FakeEncoder(Clock::GetRealTimeClock()), |
+ start_bitrate_changed_(false, false), |
+ start_bitrate_kbps_(0) {} |
int32_t InitEncode(const VideoCodec* config, |
int32_t number_of_cores, |
size_t max_payload_size) override { |
rtc::CritScope lock(&crit_); |
start_bitrate_kbps_ = config->startBitrate; |
+ start_bitrate_changed_.Set(); |
return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
} |
int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
rtc::CritScope lock(&crit_); |
start_bitrate_kbps_ = new_target_bitrate; |
+ start_bitrate_changed_.Set(); |
return FakeEncoder::SetRates(new_target_bitrate, framerate); |
} |
@@ -1136,8 +1140,14 @@ TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
return start_bitrate_kbps_; |
} |
+ bool WaitForStartBitrate() { |
+ return start_bitrate_changed_.Wait( |
+ VideoSendStreamTest::kDefaultTimeoutMs); |
+ } |
+ |
private: |
rtc::CriticalSection crit_; |
+ rtc::Event start_bitrate_changed_; |
int start_bitrate_kbps_ GUARDED_BY(crit_); |
}; |
@@ -1156,6 +1166,7 @@ TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
CreateVideoStreams(); |
+ EXPECT_TRUE(encoder.WaitForStartBitrate()); |
EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
encoder.GetStartBitrateKbps()); |
@@ -1166,6 +1177,7 @@ TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
// New bitrate should be reconfigured above the previous max. As there's no |
// network connection this shouldn't be flaky, as no bitrate should've been |
// reported in between. |
+ EXPECT_TRUE(encoder.WaitForStartBitrate()); |
EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
encoder.GetStartBitrateKbps()); |
@@ -1379,9 +1391,6 @@ TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
void OnVideoStreamsCreated( |
VideoSendStream* send_stream, |
const std::vector<VideoReceiveStream*>& receive_streams) override { |
- // Encoder initialization should be done in stream construction before |
- // starting. |
- EXPECT_TRUE(IsReadyForEncode()); |
stream_ = send_stream; |
} |
@@ -1429,6 +1438,7 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
VideoCodecConfigObserver() |
: SendTest(kDefaultTimeoutMs), |
FakeEncoder(Clock::GetRealTimeClock()), |
+ init_encode_event_(false, false), |
num_initializations_(0) {} |
private: |
@@ -1457,19 +1467,23 @@ TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
EXPECT_EQ(kScreensharing, config->mode); |
} |
++num_initializations_; |
+ init_encode_event_.Set(); |
return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
} |
void PerformTest() override { |
+ EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; |
stream_->ReconfigureVideoEncoder(encoder_config_); |
+ EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); |
EXPECT_EQ(2u, num_initializations_) |
<< "ReconfigureVideoEncoder did not reinitialize the encoder with " |
"new encoder settings."; |
} |
+ rtc::Event init_encode_event_; |
size_t num_initializations_; |
VideoSendStream* stream_; |
VideoEncoderConfig encoder_config_; |
@@ -1489,6 +1503,7 @@ class VideoCodecConfigObserver : public test::SendTest, |
FakeEncoder(Clock::GetRealTimeClock()), |
video_codec_type_(video_codec_type), |
codec_name_(codec_name), |
+ init_encode_event_(false, false), |
num_initializations_(0) { |
memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
} |
@@ -1522,16 +1537,21 @@ class VideoCodecConfigObserver : public test::SendTest, |
EXPECT_EQ(video_codec_type_, config->codecType); |
VerifyCodecSpecifics(*config); |
++num_initializations_; |
+ init_encode_event_.Set(); |
return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); |
} |
void VerifyCodecSpecifics(const VideoCodec& config) const; |
void PerformTest() override { |
- EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
+ EXPECT_TRUE( |
+ init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
+ ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; |
encoder_settings_.frameDroppingOn = true; |
stream_->ReconfigureVideoEncoder(encoder_config_); |
+ ASSERT_TRUE( |
+ init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
EXPECT_EQ(2u, num_initializations_) |
<< "ReconfigureVideoEncoder did not reinitialize the encoder with " |
"new encoder settings."; |
@@ -1547,6 +1567,7 @@ class VideoCodecConfigObserver : public test::SendTest, |
T encoder_settings_; |
const VideoCodecType video_codec_type_; |
const char* const codec_name_; |
+ rtc::Event init_encode_event_; |
size_t num_initializations_; |
VideoSendStream* stream_; |
VideoEncoderConfig encoder_config_; |
@@ -1735,6 +1756,7 @@ TEST_F(VideoSendStreamTest, |
EncoderBitrateThresholdObserver() |
: SendTest(kDefaultTimeoutMs), |
FakeEncoder(Clock::GetRealTimeClock()), |
+ init_encode_event_(false, false), |
num_initializations_(0) {} |
private: |
@@ -1763,6 +1785,7 @@ TEST_F(VideoSendStreamTest, |
codecSettings->startBitrate); |
} |
++num_initializations_; |
+ init_encode_event_.Set(); |
return FakeEncoder::InitEncode(codecSettings, numberOfCores, |
maxPayloadSize); |
} |
@@ -1798,6 +1821,9 @@ TEST_F(VideoSendStreamTest, |
} |
void PerformTest() override { |
+ ASSERT_TRUE( |
+ init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)) |
+ << "Timed out while waiting encoder to be configured."; |
Call::Config::BitrateConfig bitrate_config; |
bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
@@ -1807,6 +1833,8 @@ TEST_F(VideoSendStreamTest, |
encoder_config_.streams[0].min_bitrate_bps = 0; |
encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
send_stream_->ReconfigureVideoEncoder(encoder_config_); |
+ ASSERT_TRUE( |
+ init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
EXPECT_EQ(2, num_initializations_) |
<< "Encoder should have been reconfigured with the new value."; |
encoder_config_.streams[0].target_bitrate_bps = |
@@ -1814,10 +1842,13 @@ TEST_F(VideoSendStreamTest, |
encoder_config_.streams[0].max_bitrate_bps = |
kIncreasedMaxBitrateKbps * 1000; |
send_stream_->ReconfigureVideoEncoder(encoder_config_); |
+ ASSERT_TRUE( |
+ init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); |
EXPECT_EQ(3, num_initializations_) |
<< "Encoder should have been reconfigured with the new value."; |
} |
+ rtc::Event init_encode_event_; |
int num_initializations_; |
webrtc::Call* call_; |
webrtc::VideoSendStream* send_stream_; |