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

Unified Diff: webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc

Issue 1869003002: Make sure temporal layered screenshare frames are sent in at least 2s. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Cleanup/rebase Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698