Index: webrtc/video/vie_encoder_unittest.cc |
diff --git a/webrtc/video/vie_encoder_unittest.cc b/webrtc/video/vie_encoder_unittest.cc |
index d2f46e68059781aa3deea36ff94395649607fd13..eb39bf7c4d909b40861500c0174e7f7740ece200 100644 |
--- a/webrtc/video/vie_encoder_unittest.cc |
+++ b/webrtc/video/vie_encoder_unittest.cc |
@@ -139,6 +139,11 @@ class AdaptingFrameForwarder : public test::FrameForwarder { |
return adaptation_enabled_; |
} |
+ rtc::VideoSinkWants last_wants() const { |
+ rtc::CritScope cs(&crit_); |
+ return last_wants_; |
+ } |
+ |
void IncomingCapturedFrame(const VideoFrame& video_frame) override { |
int cropped_width = 0; |
int cropped_height = 0; |
@@ -163,14 +168,15 @@ class AdaptingFrameForwarder : public test::FrameForwarder { |
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink, |
const rtc::VideoSinkWants& wants) override { |
rtc::CritScope cs(&crit_); |
+ last_wants_ = sink_wants(); |
adapter_.OnResolutionFramerateRequest(wants.target_pixel_count, |
wants.max_pixel_count, |
wants.max_framerate_fps); |
test::FrameForwarder::AddOrUpdateSink(sink, wants); |
} |
- |
cricket::VideoAdapter adapter_; |
bool adaptation_enabled_ GUARDED_BY(crit_); |
+ rtc::VideoSinkWants last_wants_ GUARDED_BY(crit_); |
}; |
class MockableSendStatisticsProxy : public SendStatisticsProxy { |
@@ -281,16 +287,41 @@ class ViEEncoderTest : public ::testing::Test { |
} |
void VerifyNoLimitation(const rtc::VideoSinkWants& wants) { |
- EXPECT_FALSE(wants.target_pixel_count); |
- EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_pixel_count); |
EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_framerate_fps); |
+ EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_pixel_count); |
+ EXPECT_FALSE(wants.target_pixel_count); |
+ } |
+ |
+ void VerifyFpsEqResolutionEq(const rtc::VideoSinkWants& wants1, |
+ const rtc::VideoSinkWants& wants2) { |
+ EXPECT_EQ(wants1.max_framerate_fps, wants2.max_framerate_fps); |
+ EXPECT_EQ(wants1.max_pixel_count, wants2.max_pixel_count); |
} |
- void VerifyResolutionLimitationLessThan(const rtc::VideoSinkWants& wants, |
- int pixel_count) { |
+ void VerifyFpsMaxResolutionLt(const rtc::VideoSinkWants& wants1, |
+ const rtc::VideoSinkWants& wants2) { |
+ EXPECT_EQ(std::numeric_limits<int>::max(), wants1.max_framerate_fps); |
+ EXPECT_LT(wants1.max_pixel_count, wants2.max_pixel_count); |
+ EXPECT_GT(wants1.max_pixel_count, 0); |
+ } |
+ |
+ void VerifyFpsMaxResolutionGt(const rtc::VideoSinkWants& wants1, |
+ const rtc::VideoSinkWants& wants2) { |
+ EXPECT_EQ(std::numeric_limits<int>::max(), wants1.max_framerate_fps); |
+ EXPECT_GT(wants1.max_pixel_count, wants2.max_pixel_count); |
+ } |
+ |
+ void VerifyFpsMaxResolutionLt(const rtc::VideoSinkWants& wants, |
+ int pixel_count) { |
+ EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_framerate_fps); |
EXPECT_LT(wants.max_pixel_count, pixel_count); |
EXPECT_GT(wants.max_pixel_count, 0); |
- EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_framerate_fps); |
+ } |
+ |
+ void VerifyFpsLtResolutionMax(const rtc::VideoSinkWants& wants, int fps) { |
+ EXPECT_LT(wants.max_framerate_fps, fps); |
+ EXPECT_EQ(std::numeric_limits<int>::max(), wants.max_pixel_count); |
+ EXPECT_FALSE(wants.target_pixel_count); |
} |
class TestEncoder : public test::FakeEncoder { |
@@ -946,6 +977,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(1); |
VideoSendStream::Stats stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_FALSE(stats.cpu_limited_resolution); |
EXPECT_EQ(0, stats.number_of_cpu_adapt_changes); |
@@ -954,6 +986,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
video_source_.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(2); |
stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_TRUE(stats.cpu_limited_resolution); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
@@ -966,6 +999,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
new_video_source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(3); |
stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_TRUE(stats.cpu_limited_resolution); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
@@ -977,6 +1011,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
new_video_source.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(4); |
stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_FALSE(stats.cpu_limited_resolution); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
@@ -988,6 +1023,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
new_video_source.IncomingCapturedFrame(CreateFrame(5, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(5); |
stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_TRUE(stats.cpu_limited_resolution); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
@@ -996,6 +1032,7 @@ TEST_F(ViEEncoderTest, SwitchingSourceKeepsCpuAdaptation) { |
new_video_source.IncomingCapturedFrame(CreateFrame(6, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(6); |
stats = stats_proxy_->GetStats(); |
+ EXPECT_FALSE(stats.bw_limited_resolution); |
EXPECT_FALSE(stats.cpu_limited_resolution); |
EXPECT_EQ(2, stats.number_of_cpu_adapt_changes); |
EXPECT_EQ(0, stats.number_of_quality_adapt_changes); |
@@ -1138,6 +1175,7 @@ TEST_F(ViEEncoderTest, StatsTracksCpuAdaptationStatsWhenSwitchingSource) { |
sink_.WaitForEncodedFrame(sequence++); |
stats = stats_proxy_->GetStats(); |
EXPECT_TRUE(stats.cpu_limited_resolution); |
+ EXPECT_FALSE(stats.cpu_limited_framerate); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
// Set cpu adaptation by frame dropping. |
@@ -1150,10 +1188,11 @@ TEST_F(ViEEncoderTest, StatsTracksCpuAdaptationStatsWhenSwitchingSource) { |
stats = stats_proxy_->GetStats(); |
// Not adapted at first. |
EXPECT_FALSE(stats.cpu_limited_resolution); |
+ EXPECT_FALSE(stats.cpu_limited_framerate); |
EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); |
// Force an input frame rate to be available, or the adaptation call won't |
- // know what framerate to adapt form. |
+ // know what framerate to adapt from. |
VideoSendStream::Stats mock_stats = stats_proxy_->GetStats(); |
mock_stats.input_frame_rate = 30; |
stats_proxy_->SetMockStats(mock_stats); |
@@ -1166,7 +1205,8 @@ TEST_F(ViEEncoderTest, StatsTracksCpuAdaptationStatsWhenSwitchingSource) { |
// Framerate now adapted. |
stats = stats_proxy_->GetStats(); |
- EXPECT_TRUE(stats.cpu_limited_resolution); |
+ EXPECT_FALSE(stats.cpu_limited_resolution); |
+ EXPECT_TRUE(stats.cpu_limited_framerate); |
EXPECT_EQ(2, stats.number_of_cpu_adapt_changes); |
// Disable CPU adaptation. |
@@ -1314,7 +1354,7 @@ TEST_F(ViEEncoderTest, SkipsSameAdaptDownRequest_MaintainFramerateMode) { |
// Trigger adapt down, expect scaled down resolution. |
vie_encoder_->TriggerCpuOveruse(); |
- VerifyResolutionLimitationLessThan(source.sink_wants(), kWidth * kHeight); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), kWidth * kHeight); |
const int kLastMaxPixelCount = source.sink_wants().max_pixel_count; |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1366,18 +1406,45 @@ TEST_F(ViEEncoderTest, NoChangeForInitialNormalUsage_MaintainResolutionMode) { |
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(kWidth, kHeight); |
VerifyNoLimitation(source.sink_wants()); |
- EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate); |
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
// Trigger adapt up, expect no change. |
vie_encoder_->TriggerCpuNormalUsage(); |
VerifyNoLimitation(source.sink_wants()); |
- EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate); |
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
vie_encoder_->Stop(); |
} |
+TEST_F(ViEEncoderTest, NoChangeForInitialNormalUsage_DisabledMode) { |
+ const int kWidth = 1280; |
+ const int kHeight = 720; |
+ vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); |
+ |
+ // Enable kDegradationDisabled preference, no initial limitation. |
+ test::FrameForwarder source; |
+ vie_encoder_->SetSource( |
+ &source, VideoSendStream::DegradationPreference::kDegradationDisabled); |
+ |
+ source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(kWidth, kHeight); |
+ VerifyNoLimitation(source.sink_wants()); |
+ EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate); |
+ EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes); |
+ |
+ // Trigger adapt up, expect no change. |
+ vie_encoder_->TriggerQualityHigh(); |
+ VerifyNoLimitation(source.sink_wants()); |
+ EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
+ EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_framerate); |
+ EXPECT_EQ(0, stats_proxy_->GetStats().number_of_quality_adapt_changes); |
+ |
+ vie_encoder_->Stop(); |
+} |
+ |
TEST_F(ViEEncoderTest, AdaptsResolutionForLowQuality_MaintainFramerateMode) { |
const int kWidth = 1280; |
const int kHeight = 720; |
@@ -1399,7 +1466,7 @@ TEST_F(ViEEncoderTest, AdaptsResolutionForLowQuality_MaintainFramerateMode) { |
vie_encoder_->TriggerQualityLow(); |
source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(2); |
- VerifyResolutionLimitationLessThan(source.sink_wants(), kWidth * kHeight); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), kWidth * kHeight); |
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_quality_adapt_changes); |
@@ -1413,6 +1480,47 @@ TEST_F(ViEEncoderTest, AdaptsResolutionForLowQuality_MaintainFramerateMode) { |
vie_encoder_->Stop(); |
} |
+TEST_F(ViEEncoderTest, AdaptsFramerateForLowQuality_MaintainResolutionMode) { |
+ const int kWidth = 1280; |
+ const int kHeight = 720; |
+ const int kInputFps = 30; |
+ vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); |
+ |
+ VideoSendStream::Stats stats = stats_proxy_->GetStats(); |
+ stats.input_frame_rate = kInputFps; |
+ stats_proxy_->SetMockStats(stats); |
+ |
+ // Expect no scaling to begin with (preference: kMaintainFramerate). |
+ video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(1); |
+ VerifyNoLimitation(video_source_.sink_wants()); |
+ |
+ // Trigger adapt down, expect scaled down resolution. |
+ vie_encoder_->TriggerQualityLow(); |
+ video_source_.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(2); |
+ VerifyFpsMaxResolutionLt(video_source_.sink_wants(), kWidth * kHeight); |
+ |
+ // Enable kMaintainResolution preference. |
+ test::FrameForwarder new_video_source; |
+ vie_encoder_->SetSource( |
+ &new_video_source, |
+ VideoSendStream::DegradationPreference::kMaintainResolution); |
+ VerifyNoLimitation(new_video_source.sink_wants()); |
+ |
+ // Trigger adapt down, expect reduced framerate. |
+ vie_encoder_->TriggerQualityLow(); |
+ new_video_source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(3); |
+ VerifyFpsLtResolutionMax(new_video_source.sink_wants(), kInputFps); |
+ |
+ // Trigger adapt up, expect no restriction. |
+ vie_encoder_->TriggerQualityHigh(); |
+ VerifyNoLimitation(new_video_source.sink_wants()); |
+ |
+ vie_encoder_->Stop(); |
+} |
+ |
TEST_F(ViEEncoderTest, DoesNotScaleBelowSetResolutionLimit) { |
const int kWidth = 1280; |
const int kHeight = 720; |
@@ -1461,7 +1569,7 @@ TEST_F(ViEEncoderTest, |
&source, VideoSendStream::DegradationPreference::kMaintainFramerate); |
source.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); |
- sink_.WaitForEncodedFrame(1); |
+ sink_.WaitForEncodedFrame(kWidth, kHeight); |
VerifyNoLimitation(source.sink_wants()); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(0, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1470,14 +1578,14 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuOveruse(); |
source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(2); |
- VerifyResolutionLimitationLessThan(source.sink_wants(), kWidth * kHeight); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), kWidth * kHeight); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
// Trigger adapt up, expect no restriction. |
vie_encoder_->TriggerCpuNormalUsage(); |
source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); |
- sink_.WaitForEncodedFrame(3); |
+ sink_.WaitForEncodedFrame(kWidth, kHeight); |
VerifyNoLimitation(source.sink_wants()); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1486,12 +1594,14 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuOveruse(); |
source.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(4); |
- VerifyResolutionLimitationLessThan(source.sink_wants(), kWidth * kHeight); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), kWidth * kHeight); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
// Trigger adapt up, expect no restriction. |
vie_encoder_->TriggerCpuNormalUsage(); |
+ source.IncomingCapturedFrame(CreateFrame(5, kWidth, kHeight)); |
+ sink_.WaitForEncodedFrame(kWidth, kHeight); |
VerifyNoLimitation(source.sink_wants()); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_EQ(4, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1523,8 +1633,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuOveruse(); |
source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(2); |
- VerifyResolutionLimitationLessThan(source.sink_wants(), kWidth * kHeight); |
- rtc::VideoSinkWants last_wants = source.sink_wants(); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), kWidth * kHeight); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(1, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1534,8 +1643,8 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuOveruse(); |
source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(3); |
- EXPECT_LT(source.sink_wants().max_pixel_count, last_wants.max_pixel_count); |
- last_wants = source.sink_wants(); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), source.last_wants()); |
+ rtc::VideoSinkWants last_wants = source.sink_wants(); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1545,7 +1654,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuOveruse(); |
source.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(4); |
- EXPECT_EQ(last_wants.max_pixel_count, source.sink_wants().max_pixel_count); |
+ VerifyFpsEqResolutionEq(source.sink_wants(), last_wants); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1555,8 +1664,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerQualityLow(); |
source.IncomingCapturedFrame(CreateFrame(5, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(5); |
- EXPECT_LT(source.sink_wants().max_pixel_count, last_wants.max_pixel_count); |
- last_wants = source.sink_wants(); |
+ VerifyFpsMaxResolutionLt(source.sink_wants(), source.last_wants()); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(2, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1566,8 +1674,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuNormalUsage(); |
source.IncomingCapturedFrame(CreateFrame(6, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(6); |
- EXPECT_GT(source.sink_wants().max_pixel_count, last_wants.max_pixel_count); |
- last_wants = source.sink_wants(); |
+ VerifyFpsMaxResolutionGt(source.sink_wants(), source.last_wants()); |
EXPECT_TRUE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(3, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1577,7 +1684,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuNormalUsage(); |
source.IncomingCapturedFrame(CreateFrame(7, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(7); |
- EXPECT_GT(source.sink_wants().max_pixel_count, last_wants.max_pixel_count); |
+ VerifyFpsMaxResolutionGt(source.sink_wants(), source.last_wants()); |
last_wants = source.sink_wants(); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
@@ -1588,7 +1695,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerCpuNormalUsage(); |
source.IncomingCapturedFrame(CreateFrame(8, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(8); |
- EXPECT_EQ(last_wants.max_pixel_count, source.sink_wants().max_pixel_count); |
+ VerifyFpsEqResolutionEq(source.sink_wants(), last_wants); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_TRUE(stats_proxy_->GetStats().bw_limited_resolution); |
EXPECT_EQ(4, stats_proxy_->GetStats().number_of_cpu_adapt_changes); |
@@ -1598,7 +1705,7 @@ TEST_F(ViEEncoderTest, |
vie_encoder_->TriggerQualityHigh(); |
source.IncomingCapturedFrame(CreateFrame(9, kWidth, kHeight)); |
sink_.WaitForEncodedFrame(kWidth, kHeight); |
- EXPECT_GT(source.sink_wants().max_pixel_count, last_wants.max_pixel_count); |
+ VerifyFpsMaxResolutionGt(source.sink_wants(), source.last_wants()); |
VerifyNoLimitation(source.sink_wants()); |
EXPECT_FALSE(stats_proxy_->GetStats().cpu_limited_resolution); |
EXPECT_FALSE(stats_proxy_->GetStats().bw_limited_resolution); |
@@ -1730,7 +1837,7 @@ TEST_F(ViEEncoderTest, DropsFramesAndScalesWhenBitrateIsTooLow) { |
vie_encoder_->Stop(); |
} |
-TEST_F(ViEEncoderTest, NrOfDroppedFramesLimitedWhenBitrateIsTooLow) { |
+TEST_F(ViEEncoderTest, NumberOfDroppedFramesLimitedWhenBitrateIsTooLow) { |
const int kTooLowBitrateForFrameSizeBps = 10000; |
vie_encoder_->OnBitrateUpdated(kTooLowBitrateForFrameSizeBps, 0, 0); |
const int kWidth = 640; |
@@ -1774,6 +1881,7 @@ TEST_F(ViEEncoderTest, InitialFrameDropOffWhenEncoderDisabledScaling) { |
const int kHeight = 360; |
fake_encoder_.SetQualityScaling(false); |
vie_encoder_->OnBitrateUpdated(kLowTargetBitrateBps, 0, 0); |
+ |
// Force quality scaler reconfiguration by resetting the source. |
vie_encoder_->SetSource(&video_source_, |
VideoSendStream::DegradationPreference::kBalanced); |