Update video_replay tool to be able to dump .jpg files.

BUG=None

Review-Url: https://codereview.webrtc.org/2998353002
Cr-Original-Commit-Position: refs/heads/master@{#19521}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 99b63455b758f508699125d383032141078361c0
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 980145b..57776b9 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -223,6 +223,7 @@
       "../test:test_renderer",
       "../test:test_support",
       "../test:video_test_common",
+      "../test:video_test_support",
       "//third_party/gflags",
     ]
     if (!build_with_chromium && is_clang) {
diff --git a/video/replay.cc b/video/replay.cc
index b1e7f3b..ed33a28 100644
--- a/video/replay.cc
+++ b/video/replay.cc
@@ -31,6 +31,7 @@
 #include "webrtc/test/rtp_file_reader.h"
 #include "webrtc/test/run_loop.h"
 #include "webrtc/test/run_test.h"
+#include "webrtc/test/testsupport/frame_writer.h"
 #include "webrtc/test/video_capturer.h"
 #include "webrtc/test/video_renderer.h"
 #include "webrtc/typedefs.h"
@@ -136,7 +137,7 @@
                                   &ValidateInputFilenameNotEmpty);
 
 // Flag for raw output files.
-DEFINE_string(out_base, "", "Basename (excluding .yuv) for raw output");
+DEFINE_string(out_base, "", "Basename (excluding .jpg) for raw output");
 static std::string OutBase() {
   return static_cast<std::string>(FLAGS_out_base);
 }
@@ -158,12 +159,7 @@
  public:
   FileRenderPassthrough(const std::string& basename,
                         rtc::VideoSinkInterface<VideoFrame>* renderer)
-      : basename_(basename),
-        renderer_(renderer),
-        file_(nullptr),
-        count_(0),
-        last_width_(0),
-        last_height_(0) {}
+      : basename_(basename), renderer_(renderer), file_(nullptr), count_(0) {}
 
   ~FileRenderPassthrough() {
     if (file_)
@@ -174,38 +170,24 @@
   void OnFrame(const VideoFrame& video_frame) override {
     if (renderer_)
       renderer_->OnFrame(video_frame);
+
     if (basename_.empty())
       return;
-    if (last_width_ != video_frame.width() ||
-        last_height_ != video_frame.height()) {
-      if (file_)
-        fclose(file_);
-      std::stringstream filename;
-      filename << basename_;
-      if (++count_ > 1)
-        filename << '-' << count_;
-      filename << '_' << video_frame.width() << 'x' << video_frame.height()
-               << ".yuv";
-      file_ = fopen(filename.str().c_str(), "wb");
-      if (!file_) {
-        fprintf(stderr,
-                "Couldn't open file for writing: %s\n",
-                filename.str().c_str());
-      }
-    }
-    last_width_ = video_frame.width();
-    last_height_ = video_frame.height();
-    if (!file_)
-      return;
-    PrintVideoFrame(video_frame, file_);
+
+    std::stringstream filename;
+    filename << basename_ << count_++ << "_" << video_frame.timestamp()
+             << ".jpg";
+
+#if !defined(WEBRTC_IOS)
+    test::JpegFrameWriter frame_writer(filename.str());
+    RTC_CHECK(frame_writer.WriteFrame(video_frame, 100));
+#endif
   }
 
   const std::string basename_;
   rtc::VideoSinkInterface<VideoFrame>* const renderer_;
   FILE* file_;
   size_t count_;
-  int last_width_;
-  int last_height_;
 };
 
 class DecoderBitstreamFileWriter : public EncodedFrameObserver {