Index: webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc |
index 7be4eb1bb228928609d0a9a41aec5754ba0e71b2..4a6f6c6d79017c7edfd62aadc10ef5075c70642e 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc |
+++ b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc |
@@ -359,8 +359,7 @@ TEST_F(ScreenshareLayerTest, TooHighBitrate) { |
} |
} |
- EXPECT_EQ(5, tl0_frames); |
- EXPECT_EQ(45, tl1_frames); |
+ EXPECT_EQ(50, tl0_frames + tl1_frames); |
EXPECT_EQ(50, dropped_frames); |
} |
@@ -441,6 +440,32 @@ TEST_F(ScreenshareLayerTest, EncoderDrop) { |
layers_->FrameEncoded(frame_size_, timestamp, kDefaultQp); |
} |
+TEST_F(ScreenshareLayerTest, RespectsMaxIntervalBetweenFrames) { |
+ const int kLowBitrateKbps = 50; |
+ const int kLargeFrameSizeBytes = 100000; |
+ const uint32_t kStartTimestamp = 1234; |
+ |
+ vpx_codec_enc_cfg_t cfg; |
+ layers_->ConfigureBitrates(kLowBitrateKbps, kLowBitrateKbps, 5, &cfg); |
+ |
+ EXPECT_EQ(ScreenshareLayers::kTl0Flags, |
+ layers_->EncodeFlags(kStartTimestamp)); |
+ layers_->FrameEncoded(kLargeFrameSizeBytes, kStartTimestamp, kDefaultQp); |
+ |
+ const uint32_t kTwoSecondsLater = |
+ kStartTimestamp + (ScreenshareLayers::kMaxFrameIntervalMs * 90); |
+ |
+ // Sanity check, repayment time should exceed kMaxFrameIntervalMs. |
+ ASSERT_GT(kStartTimestamp + 90 * (kLargeFrameSizeBytes * 8) / kLowBitrateKbps, |
+ kStartTimestamp + (ScreenshareLayers::kMaxFrameIntervalMs * 90)); |
+ |
+ EXPECT_EQ(-1, layers_->EncodeFlags(kTwoSecondsLater)); |
+ // More than two seconds has passed since last frame, one should be emitted |
+ // even if bitrate target is then exceeded. |
+ EXPECT_EQ(ScreenshareLayers::kTl0Flags, |
+ layers_->EncodeFlags(kTwoSecondsLater + 90)); |
+} |
+ |
TEST_F(ScreenshareLayerTest, UpdatesHistograms) { |
ConfigureBitrates(); |
vpx_codec_enc_cfg_t cfg; |