Add --screencast and --frame_drop flags to EncodeDecode test

Bug: b/42225151, b/337757868
Change-Id: I78c053cb47961ff86c001be3150dc1efb13870af
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/349481
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42218}
diff --git a/modules/video_coding/codecs/test/video_codec_test.cc b/modules/video_coding/codecs/test/video_codec_test.cc
index b71e4e1..e676756 100644
--- a/modules/video_coding/codecs/test/video_codec_test.cc
+++ b/modules/video_coding/codecs/test/video_codec_test.cc
@@ -61,6 +61,8 @@
           framerate_fps,
           30.0,
           "Encode target frame rate of the top temporal layer in fps.");
+ABSL_FLAG(bool, screencast, false, "Enable screen encoding mode.");
+ABSL_FLAG(bool, frame_drop, true, "Enable frame dropping.");
 ABSL_FLAG(int, num_frames, 300, "Number of frames to encode and/or decode.");
 ABSL_FLAG(std::string, field_trials, "", "Field trials to apply.");
 ABSL_FLAG(std::string, test_name, "", "Test name.");
@@ -549,12 +551,18 @@
                  std::back_inserter(bitrate_kbps),
                  [](const std::string& str) { return std::stoi(str); });
 
+  VideoCodecMode content_type = absl::GetFlag(FLAGS_screencast)
+                                    ? VideoCodecMode::kScreensharing
+                                    : VideoCodecMode::kRealtimeVideo;
+
   std::map<uint32_t, EncodingSettings> frames_settings =
       VideoCodecTester::CreateEncodingSettings(
           CodecNameToCodecType(absl::GetFlag(FLAGS_encoder)),
           absl::GetFlag(FLAGS_scalability_mode), absl::GetFlag(FLAGS_width),
           absl::GetFlag(FLAGS_height), {bitrate_kbps},
-          absl::GetFlag(FLAGS_framerate_fps), absl::GetFlag(FLAGS_num_frames));
+          absl::GetFlag(FLAGS_framerate_fps), absl::GetFlag(FLAGS_num_frames),
+          /*first_timestamp_rtp=*/90000, content_type,
+          absl::GetFlag(FLAGS_frame_drop));
 
   // TODO(webrtc:14852): Pass encoder and decoder names directly, and update
   // logged test name (implies lossing history in the chromeperf dashboard).
diff --git a/test/video_codec_tester.cc b/test/video_codec_tester.cc
index 4706eb6..9baedfc 100644
--- a/test/video_codec_tester.cc
+++ b/test/video_codec_tester.cc
@@ -1046,8 +1046,8 @@
     vc.maxFramerate = top_layer_settings.framerate.hertz<uint32_t>();
     vc.active = true;
     vc.numberOfSimulcastStreams = 0;
-    vc.mode = webrtc::VideoCodecMode::kRealtimeVideo;
-    vc.SetFrameDropEnabled(true);
+    vc.mode = es.content_type;
+    vc.SetFrameDropEnabled(es.frame_drop);
     vc.SetScalabilityMode(es.scalability_mode);
     vc.SetVideoEncoderComplexity(VideoCodecComplexity::kComplexityNormal);
 
@@ -1297,7 +1297,8 @@
                                      int width,
                                      int height,
                                      std::vector<int> bitrates_kbps,
-                                     double framerate_fps) {
+                                     double framerate_fps,
+                                     VideoCodecMode content_type) {
   int num_spatial_layers = ScalabilityModeToNumSpatialLayers(scalability_mode);
   int num_temporal_layers =
       ScalabilityModeToNumTemporalLayers(scalability_mode);
@@ -1326,7 +1327,7 @@
   vc.minBitrate = 0;
   vc.maxFramerate = static_cast<uint32_t>(framerate_fps);
   vc.numberOfSimulcastStreams = 0;
-  vc.mode = webrtc::VideoCodecMode::kRealtimeVideo;
+  vc.mode = content_type;
   vc.SetScalabilityMode(scalability_mode);
   SetDefaultCodecSpecificSettings(&vc, num_temporal_layers);
 
@@ -1489,11 +1490,13 @@
     std::vector<int> layer_bitrates_kbps,
     double framerate_fps,
     int num_frames,
-    uint32_t first_timestamp_rtp) {
+    uint32_t first_timestamp_rtp,
+    webrtc::VideoCodecMode content_type,
+    bool frame_drop) {
   auto [layer_bitrates, scalability_mode] =
       SplitBitrateAndUpdateScalabilityMode(
           codec_type, *ScalabilityModeFromString(scalability_name), width,
-          height, layer_bitrates_kbps, framerate_fps);
+          height, layer_bitrates_kbps, framerate_fps, content_type);
 
   int num_spatial_layers = ScalabilityModeToNumSpatialLayers(scalability_mode);
   int num_temporal_layers =
@@ -1532,6 +1535,8 @@
     frames_settings.emplace(
         timestamp_rtp, EncodingSettings{.sdp_video_format = sdp_video_format,
                                         .scalability_mode = scalability_mode,
+                                        .content_type = content_type,
+                                        .frame_drop = frame_drop,
                                         .layers_settings = layers_settings});
 
     timestamp_rtp += k90kHz / Frequency::MilliHertz(1000 * framerate_fps);
diff --git a/test/video_codec_tester.h b/test/video_codec_tester.h
index 6733c86..ba8b197 100644
--- a/test/video_codec_tester.h
+++ b/test/video_codec_tester.h
@@ -51,6 +51,8 @@
   struct EncodingSettings {
     SdpVideoFormat sdp_video_format = SdpVideoFormat::VP8();
     ScalabilityMode scalability_mode = ScalabilityMode::kL1T1;
+    VideoCodecMode content_type = VideoCodecMode::kRealtimeVideo;
+    bool frame_drop = true;
 
     struct LayerSettings {
       Resolution resolution;
@@ -196,7 +198,9 @@
       std::vector<int> bitrates_kbps,
       double framerate_fps,
       int num_frames,
-      uint32_t first_timestamp_rtp = 90000);
+      uint32_t first_timestamp_rtp = 90000,
+      VideoCodecMode content_type = VideoCodecMode::kRealtimeVideo,
+      bool frame_drop = true);
 
   // Decodes video, collects and returns decode metrics.
   static std::unique_ptr<VideoCodecStats> RunDecodeTest(