Switch frame_editor to ABSL_FLAG.

Bug: webrtc:10616
Change-Id: I1576c6a615d6a9ea07db61027b9eccd3efb9dcca
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137501
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28365}
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index c7022b0..c39aaa5 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -273,13 +273,15 @@
   }
 
   rtc_executable("frame_editor") {
+    testonly = true
     sources = [
       "frame_editing/frame_editing.cc",
     ]
 
     deps = [
-      ":command_line_parser",
       ":frame_editing_lib",
+      "//third_party/abseil-cpp/absl/flags:flag",
+      "//third_party/abseil-cpp/absl/flags:parse",
     ]
   }
 
diff --git a/rtc_tools/frame_editing/frame_editing.cc b/rtc_tools/frame_editing/frame_editing.cc
index 4ac9452..71798d5 100644
--- a/rtc_tools/frame_editing/frame_editing.cc
+++ b/rtc_tools/frame_editing/frame_editing.cc
@@ -13,89 +13,92 @@
 #include <string.h>
 #include <string>
 
+#include "absl/flags/flag.h"
+#include "absl/flags/parse.h"
 #include "rtc_tools/frame_editing/frame_editing_lib.h"
-#include "rtc_tools/simple_command_line_parser.h"
+
+ABSL_FLAG(std::string, in_path, "", "Path and filename to the input file");
+ABSL_FLAG(int32_t,
+          width,
+          -1,
+          "Width in pixels of the frames in the input file");
+ABSL_FLAG(int32_t,
+          height,
+          -1,
+          "Height in pixels of the frames in the input file");
+ABSL_FLAG(int32_t, f, -1, "First frame to process");
+ABSL_FLAG(int32_t,
+          interval,
+          -1,
+          "Interval specifies with what ratio the number of frames should be "
+          "increased or decreased with");
+ABSL_FLAG(int32_t, l, -1, "Last frame to process");
+ABSL_FLAG(std::string,
+          out_path,
+          "output.yuv",
+          "The output file to which frames are written");
 
 // A command-line tool to edit a YUV-video (I420 sub-sampled).
 int main(int argc, char* argv[]) {
-  std::string program_name = argv[0];
-  std::string usage =
-      "Deletes a series of frames in a yuv file."
-      " Only I420 is supported!\n"
-      "Example usage:\n" +
-      program_name +
-      " --in_path=input.yuv --width=320 --height=240 --f=60 --interval=1 "
-      "--l=120"
-      " --out_path=edited_clip.yuv\n"
-      "Command line flags:\n"
-      "--in_path(string): Path and filename to the input file\n"
-      "--width(int): Width in pixels of the frames in the input file."
-      " Default: -1\n"
-      "--height(int): Height in pixels of the frames in the input file."
-      " Default: -1\n"
-      "--f(int): First frame to process. Default: -1\n"
-      "--l(int): Last frame to process.  Default: -1\n"
-      "Frame numbering starts at 1. The set of frames to be processed includes "
-      "the frame with the number <f> and <l>.\n"
-      "--interval(int): Interval specifies with what ratio the number of "
-      "frames "
-      "should be increased or decreased with.\n"
-      "If you set <interval> to a positive number, frames between <f> and <l> "
-      "will be inserted <interval> times."
-      " If you set <interval> to a negative number then the amount of frames "
-      "between <f> and <l> will be decreased with a ratio of abs(interval)."
-      " Set interval=-1 if every frame between <f> and <l> should be "
-      "deleted. Set interval=-2 if every second frame should be deleted, and "
-      "so "
-      "on. Frame numbering between <f> and <l> starts with 1 and frames with"
-      " number n where (n - 1)  % interval == 0 will be kept.\n"
-      "Example 1:\n"
-      "If one clip has 10 frames (1 to 10) and you specify <f>=4, <l>=7 and "
-      "interval=2, then you will get a clip that contains frame "
-      "1, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9 and 10.\n"
-      "Example 2:\n"
-      "If you specify f=4, l=7 and interval=-1, then you will get a clip that"
-      " contains frame 1, 2, 3, 8, 9 and 10.\n"
-      "Example 3:\n"
-      "If one clip has 10 frames (1 to 10), and you specify f=1, l=10 and "
-      " interval=-4, then you will get a clip that contains frame "
-      "1, 5 and 9.\n"
-      "No interpolation is done when up-sampling."
-      " Default: -1\n"
-      "--out_path(string): The output file to which frames are written."
-      " Default: output.yuv\n";
+  absl::ParseCommandLine(argc, argv);
+  // TODO(bugs.webrtc.org/10616): Add program usage message when Abseil
+  // flags supports it.
+  // std::string usage =
+  //    "Deletes a series of frames in a yuv file."
+  //    " Only I420 is supported!\n"
+  //    "Example usage:\n" +
+  //    program_name +
+  //    " --in_path=input.yuv --width=320 --height=240 --f=60 --interval=1 "
+  //    "--l=120"
+  //    " --out_path=edited_clip.yuv\n"
+  //    "Command line flags:\n"
+  //    "--in_path(string): Path and filename to the input file\n"
+  //    "--width(int): Width in pixels of the frames in the input file."
+  //    " Default: -1\n"
+  //    "--height(int): Height in pixels of the frames in the input file."
+  //    " Default: -1\n"
+  //    "--f(int): First frame to process. Default: -1\n"
+  //    "--l(int): Last frame to process.  Default: -1\n"
+  //    "Frame numbering starts at 1. The set of frames to be processed includes
+  //    " "the frame with the number <f> and <l>.\n"
+  //    "--interval(int): Interval specifies with what ratio the number of "
+  //    "frames "
+  //    "should be increased or decreased with.\n"
+  //    "If you set <interval> to a positive number, frames between <f> and <l>
+  //    " "will be inserted <interval> times."
+  //   " If you set <interval> to a negative number then the amount of frames "
+  //    "between <f> and <l> will be decreased with a ratio of abs(interval)."
+  //    " Set interval=-1 if every frame between <f> and <l> should be "
+  //    "deleted. Set interval=-2 if every second frame should be deleted, and "
+  //    "so "
+  //    "on. Frame numbering between <f> and <l> starts with 1 and frames with"
+  //    " number n where (n - 1)  % interval == 0 will be kept.\n"
+  //    "Example 1:\n"
+  //    "If one clip has 10 frames (1 to 10) and you specify <f>=4, <l>=7 and "
+  //    "interval=2, then you will get a clip that contains frame "
+  //    "1, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9 and 10.\n"
+  //    "Example 2:\n"
+  //    "If you specify f=4, l=7 and interval=-1, then you will get a clip that"
+  //    " contains frame 1, 2, 3, 8, 9 and 10.\n"
+  //    "Example 3:\n"
+  //    "If one clip has 10 frames (1 to 10), and you specify f=1, l=10 and "
+  //    " interval=-4, then you will get a clip that contains frame "
+  //    "1, 5 and 9.\n"
+  //    "No interpolation is done when up-sampling."
+  //    " Default: -1\n"
+  //    "--out_path(string): The output file to which frames are written."
+  //    " Default: output.yuv\n";
 
-  webrtc::test::CommandLineParser parser;
+  const std::string in_path = absl::GetFlag(FLAGS_in_path);
+  int width = absl::GetFlag(FLAGS_width);
+  int height = absl::GetFlag(FLAGS_height);
+  int first_frame_to_cut = absl::GetFlag(FLAGS_f);
+  int interval = absl::GetFlag(FLAGS_interval);
+  int last_frame_to_cut = absl::GetFlag(FLAGS_l);
 
-  // Init the parser and set the usage message
-  parser.Init(argc, argv);
-  parser.SetUsageMessage(usage);
-  parser.SetFlag("in_path", "-1");
-  parser.SetFlag("width", "-1");
-  parser.SetFlag("height", "-1");
-  parser.SetFlag("f", "-1");
-  parser.SetFlag("interval", "-1");
-  parser.SetFlag("l", "-1");
-  parser.SetFlag("out_path", "edited_output.yuv");
-  parser.SetFlag("help", "false");
+  const std::string out_path = absl::GetFlag(FLAGS_out_path);
 
-  parser.ProcessFlags();
-  if (parser.GetFlag("help") == "true") {
-    parser.PrintUsageMessage();
-    exit(EXIT_SUCCESS);
-  }
-  parser.PrintEnteredFlags();
-
-  const char* in_path = parser.GetFlag("in_path").c_str();
-  int width = strtol((parser.GetFlag("width")).c_str(), NULL, 10);
-  int height = strtol((parser.GetFlag("height")).c_str(), NULL, 10);
-  int first_frame_to_cut = strtol((parser.GetFlag("f")).c_str(), NULL, 10);
-  int interval = strtol((parser.GetFlag("interval")).c_str(), NULL, 10);
-  int last_frame_to_cut = strtol((parser.GetFlag("l")).c_str(), NULL, 10);
-
-  const char* out_path = parser.GetFlag("out_path").c_str();
-
-  if (!strcmp(in_path, "-1")) {
+  if (in_path.empty()) {
     fprintf(stderr, "You must specify a file to edit\n");
     return -1;
   }