| 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..667f6b0922e9ec094aaffc91a1a4f79f96d6d19d 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc
|
| @@ -108,6 +108,14 @@ class ScreenshareLayerTest : public ::testing::Test {
|
| return 0;
|
| }
|
|
|
| + vpx_codec_enc_cfg_t GetConfig() {
|
| + vpx_codec_enc_cfg_t cfg;
|
| + memset(&cfg, 0, sizeof(cfg));
|
| + cfg.rc_min_quantizer = 2;
|
| + cfg.rc_max_quantizer = kDefaultQp;
|
| + return cfg;
|
| + }
|
| +
|
| int min_qp_;
|
| int max_qp_;
|
| int frame_size_;
|
| @@ -359,13 +367,12 @@ 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);
|
| }
|
|
|
| TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL0) {
|
| - vpx_codec_enc_cfg_t cfg;
|
| + vpx_codec_enc_cfg_t cfg = GetConfig();
|
| layers_->ConfigureBitrates(100, 1000, 5, &cfg);
|
|
|
| EXPECT_EQ(static_cast<unsigned int>(
|
| @@ -374,7 +381,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL0) {
|
| }
|
|
|
| TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL1) {
|
| - vpx_codec_enc_cfg_t cfg;
|
| + vpx_codec_enc_cfg_t cfg = GetConfig();
|
| layers_->ConfigureBitrates(100, 450, 5, &cfg);
|
|
|
| EXPECT_EQ(static_cast<unsigned int>(
|
| @@ -383,7 +390,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateCappedByTL1) {
|
| }
|
|
|
| TEST_F(ScreenshareLayerTest, TargetBitrateBelowTL0) {
|
| - vpx_codec_enc_cfg_t cfg;
|
| + vpx_codec_enc_cfg_t cfg = GetConfig();
|
| layers_->ConfigureBitrates(100, 100, 5, &cfg);
|
|
|
| EXPECT_EQ(100U, cfg.rc_target_bitrate);
|
| @@ -392,8 +399,7 @@ TEST_F(ScreenshareLayerTest, TargetBitrateBelowTL0) {
|
| TEST_F(ScreenshareLayerTest, EncoderDrop) {
|
| ConfigureBitrates();
|
| CodecSpecificInfoVP8 vp8_info;
|
| - vpx_codec_enc_cfg_t cfg;
|
| - cfg.rc_max_quantizer = kDefaultQp;
|
| + vpx_codec_enc_cfg_t cfg = GetConfig();
|
|
|
| uint32_t timestamp = RunGracePeriod();
|
| timestamp = SkipUntilTl(0, timestamp);
|
| @@ -441,10 +447,35 @@ 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 = GetConfig();
|
| + 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;
|
| - cfg.rc_max_quantizer = kDefaultQp;
|
| + vpx_codec_enc_cfg_t cfg = GetConfig();
|
| bool trigger_drop = false;
|
| bool dropped_frame = false;
|
| bool overshoot = false;
|
|
|