Delete class webrtc::VideoRenderer and its header file.

To replace the SmoothsRenderedFrames method, added a corresponding
flag to VideoReceiveStream::Config instead.

BUG=webrtc:5426

Review URL: https://codereview.webrtc.org/1818023002

Cr-Commit-Position: refs/heads/master@{#12102}
diff --git a/webrtc/DEPS b/webrtc/DEPS
index aebafa7..7f15817e 100644
--- a/webrtc/DEPS
+++ b/webrtc/DEPS
@@ -44,7 +44,10 @@
   "video_frame\.h": [
     "+webrtc/common_video",
   ],
-  "video_renderer\.h": [
+  "video_receive_stream\.h": [
+    "+webrtc/media/base",
+  ],
+  "video_send_stream\.h": [
     "+webrtc/media/base",
   ],
 }
diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc
index 7501ada..9aa50d0 100644
--- a/webrtc/call/call_perf_tests.cc
+++ b/webrtc/call/call_perf_tests.cc
@@ -75,7 +75,7 @@
 };
 
 class VideoRtcpAndSyncObserver : public test::RtpRtcpObserver,
-                                 public VideoRenderer {
+                                 public rtc::VideoSinkInterface<VideoFrame> {
   static const int kInSyncThresholdMs = 50;
   static const int kStartupTimeMs = 2000;
   static const int kMinRunTimeMs = 30000;
@@ -346,7 +346,7 @@
                                       int start_time_ms,
                                       int run_time_ms) {
   class CaptureNtpTimeObserver : public test::EndToEndTest,
-                                 public VideoRenderer {
+                                 public rtc::VideoSinkInterface<VideoFrame> {
    public:
     CaptureNtpTimeObserver(const FakeNetworkPipe::Config& net_config,
                            int threshold_ms,
diff --git a/webrtc/common_video/incoming_video_stream.cc b/webrtc/common_video/incoming_video_stream.cc
index b0f105c..0e048a6 100644
--- a/webrtc/common_video/incoming_video_stream.cc
+++ b/webrtc/common_video/incoming_video_stream.cc
@@ -28,7 +28,6 @@
 #include "webrtc/system_wrappers/include/event_wrapper.h"
 #include "webrtc/system_wrappers/include/tick_util.h"
 #include "webrtc/system_wrappers/include/trace.h"
-#include "webrtc/video_renderer.h"
 
 namespace webrtc {
 
diff --git a/webrtc/media/base/videosinkinterface.h b/webrtc/media/base/videosinkinterface.h
index bb41bdb..df7677b 100644
--- a/webrtc/media/base/videosinkinterface.h
+++ b/webrtc/media/base/videosinkinterface.h
@@ -11,6 +11,9 @@
 #ifndef WEBRTC_MEDIA_BASE_VIDEOSINKINTERFACE_H_
 #define WEBRTC_MEDIA_BASE_VIDEOSINKINTERFACE_H_
 
+// TODO(nisse): Consider moving this interface (and possibly
+// VideoSourceInterface too) from media/base to common_video, to
+// reduce dependency cycles.
 namespace rtc {
 
 template <typename VideoFrameT>
diff --git a/webrtc/media/engine/webrtcvideoengine2.cc b/webrtc/media/engine/webrtcvideoengine2.cc
index f835c12..fbd5961 100644
--- a/webrtc/media/engine/webrtcvideoengine2.cc
+++ b/webrtc/media/engine/webrtcvideoengine2.cc
@@ -1184,10 +1184,12 @@
   config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false;
   config.rtp.transport_cc =
       send_codec_ ? HasTransportCc(send_codec_->codec) : false;
+  config.disable_prerenderer_smoothing =
+      video_config_.disable_prerenderer_smoothing;
 
   receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
       call_, sp, config, external_decoder_factory_, default_stream,
-      recv_codecs_, video_config_.disable_prerenderer_smoothing);
+      recv_codecs_);
 
   return true;
 }
@@ -2206,8 +2208,7 @@
     const webrtc::VideoReceiveStream::Config& config,
     WebRtcVideoDecoderFactory* external_decoder_factory,
     bool default_stream,
-    const std::vector<VideoCodecSettings>& recv_codecs,
-    bool disable_prerenderer_smoothing)
+    const std::vector<VideoCodecSettings>& recv_codecs)
     : call_(call),
       ssrcs_(sp.ssrcs),
       ssrc_groups_(sp.ssrc_groups),
@@ -2215,7 +2216,6 @@
       default_stream_(default_stream),
       config_(config),
       external_decoder_factory_(external_decoder_factory),
-      disable_prerenderer_smoothing_(disable_prerenderer_smoothing),
       sink_(NULL),
       last_width_(-1),
       last_height_(-1),
@@ -2434,11 +2434,6 @@
   sink_->OnFrame(render_frame);
 }
 
-bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::SmoothsRenderedFrames()
-    const {
-  return disable_prerenderer_smoothing_;
-}
-
 bool WebRtcVideoChannel2::WebRtcVideoReceiveStream::IsDefaultStream() const {
   return default_stream_;
 }
diff --git a/webrtc/media/engine/webrtcvideoengine2.h b/webrtc/media/engine/webrtcvideoengine2.h
index 3668a18..ff86245 100644
--- a/webrtc/media/engine/webrtcvideoengine2.h
+++ b/webrtc/media/engine/webrtcvideoengine2.h
@@ -31,7 +31,6 @@
 #include "webrtc/transport.h"
 #include "webrtc/video_frame.h"
 #include "webrtc/video_receive_stream.h"
-#include "webrtc/video_renderer.h"
 #include "webrtc/video_send_stream.h"
 
 namespace webrtc {
@@ -396,8 +395,10 @@
 
   // Wrapper for the receiver part, contains configs etc. that are needed to
   // reconstruct the underlying VideoReceiveStream. Also serves as a wrapper
-  // between webrtc::VideoRenderer and cricket::VideoRenderer.
-  class WebRtcVideoReceiveStream : public webrtc::VideoRenderer {
+  // between rtc::VideoSinkInterface<webrtc::VideoFrame> and
+  // rtc::VideoSinkInterface<cricket::VideoFrame>.
+  class WebRtcVideoReceiveStream
+      : public rtc::VideoSinkInterface<webrtc::VideoFrame> {
    public:
     WebRtcVideoReceiveStream(
         webrtc::Call* call,
@@ -405,8 +406,7 @@
         const webrtc::VideoReceiveStream::Config& config,
         WebRtcVideoDecoderFactory* external_decoder_factory,
         bool default_stream,
-        const std::vector<VideoCodecSettings>& recv_codecs,
-        bool disable_prerenderer_smoothing);
+        const std::vector<VideoCodecSettings>& recv_codecs);
     ~WebRtcVideoReceiveStream();
 
     const std::vector<uint32_t>& GetSsrcs() const;
@@ -420,7 +420,6 @@
     void SetRecvParameters(const ChangedRecvParameters& recv_params);
 
     void OnFrame(const webrtc::VideoFrame& frame) override;
-    bool SmoothsRenderedFrames() const override;
     bool IsDefaultStream() const;
 
     void SetSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink);
@@ -461,8 +460,6 @@
     WebRtcVideoDecoderFactory* const external_decoder_factory_;
     std::vector<AllocatedDecoder> allocated_decoders_;
 
-    const bool disable_prerenderer_smoothing_;
-
     rtc::CriticalSection sink_lock_;
     rtc::VideoSinkInterface<cricket::VideoFrame>* sink_ GUARDED_BY(sink_lock_);
     int last_width_ GUARDED_BY(sink_lock_);
diff --git a/webrtc/test/DEPS b/webrtc/test/DEPS
index 27c0e74..e8ed18b 100644
--- a/webrtc/test/DEPS
+++ b/webrtc/test/DEPS
@@ -2,6 +2,7 @@
   "+webrtc/base",
   "+webrtc/call",
   "+webrtc/common_video",
+  "+webrtc/media/base",
   "+webrtc/modules/audio_coding",
   "+webrtc/modules/audio_device",
   "+webrtc/modules/media_file",
diff --git a/webrtc/test/video_renderer.h b/webrtc/test/video_renderer.h
index 3739522..49d2fa3 100644
--- a/webrtc/test/video_renderer.h
+++ b/webrtc/test/video_renderer.h
@@ -12,11 +12,13 @@
 
 #include <stddef.h>
 
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
 
 namespace webrtc {
+class VideoFrame;
+
 namespace test {
-class VideoRenderer : public webrtc::VideoRenderer {
+class VideoRenderer : public rtc::VideoSinkInterface<VideoFrame> {
  public:
   // Creates a platform-specific renderer if possible, or a null implementation
   // if failing.
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index e9e330f..1799e98 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -159,7 +159,7 @@
   // frames in the queue.
   static const int kDelayRenderCallbackMs = 1000;
 
-  class Renderer : public VideoRenderer {
+  class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
    public:
     Renderer() : event_(false, false) {}
 
@@ -222,7 +222,7 @@
 }
 
 TEST_F(EndToEndTest, TransmitsFirstFrame) {
-  class Renderer : public VideoRenderer {
+  class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
    public:
     Renderer() : event_(false, false) {}
 
@@ -266,7 +266,8 @@
 }
 
 TEST_F(EndToEndTest, SendsAndReceivesVP9) {
-  class VP9Observer : public test::EndToEndTest, public VideoRenderer {
+  class VP9Observer : public test::EndToEndTest,
+                      public rtc::VideoSinkInterface<VideoFrame> {
    public:
     VP9Observer()
         : EndToEndTest(2 * kDefaultTimeoutMs),
@@ -317,7 +318,8 @@
 #if defined(WEBRTC_END_TO_END_H264_TESTS)
 
 TEST_F(EndToEndTest, SendsAndReceivesH264) {
-  class H264Observer : public test::EndToEndTest, public VideoRenderer {
+  class H264Observer : public test::EndToEndTest,
+                       public rtc::VideoSinkInterface<VideoFrame> {
    public:
     H264Observer()
         : EndToEndTest(2 * kDefaultTimeoutMs),
@@ -488,7 +490,8 @@
 }
 
 TEST_F(EndToEndTest, CanReceiveFec) {
-  class FecRenderObserver : public test::EndToEndTest, public VideoRenderer {
+  class FecRenderObserver : public test::EndToEndTest,
+                            public rtc::VideoSinkInterface<VideoFrame> {
    public:
     FecRenderObserver()
         : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
@@ -864,7 +867,7 @@
   static const int kWidth = 320;
   static const int kHeight = 240;
 
-  class Renderer : public VideoRenderer {
+  class Renderer : public rtc::VideoSinkInterface<VideoFrame> {
    public:
     Renderer() : event_(false, false) {}
 
@@ -964,7 +967,8 @@
 void EndToEndTest::ReceivesPliAndRecovers(int rtp_history_ms) {
   static const int kPacketsToDrop = 1;
 
-  class PliObserver : public test::EndToEndTest, public VideoRenderer {
+  class PliObserver : public test::EndToEndTest,
+                      public rtc::VideoSinkInterface<VideoFrame> {
    public:
     explicit PliObserver(int rtp_history_ms)
         : EndToEndTest(kLongTimeoutMs),
@@ -1325,7 +1329,7 @@
 // Each renderer verifies that it receives the expected resolution, and as soon
 // as every renderer has received a frame, the test finishes.
 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) {
-  class VideoOutputObserver : public VideoRenderer {
+  class VideoOutputObserver : public rtc::VideoSinkInterface<VideoFrame> {
    public:
     VideoOutputObserver(const MultiStreamTest::CodecSettings& settings,
                         uint32_t ssrc,
diff --git a/webrtc/video/receive_statistics_proxy.h b/webrtc/video/receive_statistics_proxy.h
index 04bfd7b..10a1be7 100644
--- a/webrtc/video/receive_statistics_proxy.h
+++ b/webrtc/video/receive_statistics_proxy.h
@@ -24,7 +24,6 @@
 #include "webrtc/video/report_block_stats.h"
 #include "webrtc/video/vie_channel.h"
 #include "webrtc/video_receive_stream.h"
-#include "webrtc/video_renderer.h"
 
 namespace webrtc {
 
diff --git a/webrtc/video/replay.cc b/webrtc/video/replay.cc
index 3bfa7ff..affd033 100644
--- a/webrtc/video/replay.cc
+++ b/webrtc/video/replay.cc
@@ -136,9 +136,10 @@
 
 static const uint32_t kReceiverLocalSsrc = 0x123456;
 
-class FileRenderPassthrough : public VideoRenderer {
+class FileRenderPassthrough : public rtc::VideoSinkInterface<VideoFrame> {
  public:
-  FileRenderPassthrough(const std::string& basename, VideoRenderer* renderer)
+  FileRenderPassthrough(const std::string& basename,
+                        rtc::VideoSinkInterface<VideoFrame>* renderer)
       : basename_(basename),
         renderer_(renderer),
         file_(nullptr),
@@ -182,7 +183,7 @@
   }
 
   const std::string basename_;
-  VideoRenderer* const renderer_;
+  rtc::VideoSinkInterface<VideoFrame>* const renderer_;
   FILE* file_;
   size_t count_;
   int last_width_;
diff --git a/webrtc/video/video_capture_input.cc b/webrtc/video/video_capture_input.cc
index e355a74..16263cc 100644
--- a/webrtc/video/video_capture_input.cc
+++ b/webrtc/video/video_capture_input.cc
@@ -24,10 +24,11 @@
 namespace webrtc {
 
 namespace internal {
-VideoCaptureInput::VideoCaptureInput(rtc::Event* capture_event,
-                                     VideoRenderer* local_renderer,
-                                     SendStatisticsProxy* stats_proxy,
-                                     OveruseFrameDetector* overuse_detector)
+VideoCaptureInput::VideoCaptureInput(
+    rtc::Event* capture_event,
+    rtc::VideoSinkInterface<VideoFrame>* local_renderer,
+    SendStatisticsProxy* stats_proxy,
+    OveruseFrameDetector* overuse_detector)
     : local_renderer_(local_renderer),
       stats_proxy_(stats_proxy),
       capture_event_(capture_event),
diff --git a/webrtc/video/video_capture_input.h b/webrtc/video/video_capture_input.h
index 90d7a31..a47e877 100644
--- a/webrtc/video/video_capture_input.h
+++ b/webrtc/video/video_capture_input.h
@@ -32,13 +32,12 @@
 class Config;
 class OveruseFrameDetector;
 class SendStatisticsProxy;
-class VideoRenderer;
 
 namespace internal {
 class VideoCaptureInput : public webrtc::VideoCaptureInput {
  public:
   VideoCaptureInput(rtc::Event* capture_event,
-                    VideoRenderer* local_renderer,
+                    rtc::VideoSinkInterface<VideoFrame>* local_renderer,
                     SendStatisticsProxy* send_stats_proxy,
                     OveruseFrameDetector* overuse_detector);
   ~VideoCaptureInput();
@@ -50,7 +49,7 @@
  private:
   rtc::CriticalSection crit_;
 
-  VideoRenderer* const local_renderer_;
+  rtc::VideoSinkInterface<VideoFrame>* const local_renderer_;
   SendStatisticsProxy* const stats_proxy_;
   rtc::Event* const capture_event_;
 
diff --git a/webrtc/video/video_quality_test.cc b/webrtc/video/video_quality_test.cc
index b2c3824..9e16448 100644
--- a/webrtc/video/video_quality_test.cc
+++ b/webrtc/video/video_quality_test.cc
@@ -43,7 +43,7 @@
 
 class VideoAnalyzer : public PacketReceiver,
                       public Transport,
-                      public VideoRenderer,
+                      public rtc::VideoSinkInterface<VideoFrame>,
                       public VideoCaptureInput,
                       public EncodedFrameObserver {
  public:
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index cb2515b..9778296 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -164,9 +164,7 @@
                                      nullptr,
                                      this,
                                      this)),
-      incoming_video_stream_(
-          0,
-          config.renderer ? config.renderer->SmoothsRenderedFrames() : false),
+      incoming_video_stream_(0, config.disable_prerenderer_smoothing),
       stats_proxy_(config_, clock_),
       vie_channel_(&transport_adapter_,
                    process_thread,
diff --git a/webrtc/video_receive_stream.h b/webrtc/video_receive_stream.h
index 249523c..109c2aa 100644
--- a/webrtc/video_receive_stream.h
+++ b/webrtc/video_receive_stream.h
@@ -21,7 +21,7 @@
 #include "webrtc/frame_callback.h"
 #include "webrtc/stream.h"
 #include "webrtc/transport.h"
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
 
 namespace webrtc {
 
@@ -145,13 +145,17 @@
 
     // VideoRenderer will be called for each decoded frame. 'nullptr' disables
     // rendering of this stream.
-    VideoRenderer* renderer = nullptr;
+    rtc::VideoSinkInterface<VideoFrame>* renderer = nullptr;
 
     // Expected delay needed by the renderer, i.e. the frame will be delivered
     // this many milliseconds, if possible, earlier than the ideal render time.
     // Only valid if 'renderer' is set.
     int render_delay_ms = 10;
 
+    // If set, pass frames on to the renderer as soon as they are
+    // available.
+    bool disable_prerenderer_smoothing = false;
+
     // Identifier for an A/V synchronization group. Empty string to disable.
     // TODO(pbos): Synchronize streams in a sync group, not just video streams
     // to one of the audio streams.
diff --git a/webrtc/video_renderer.h b/webrtc/video_renderer.h
deleted file mode 100644
index 85c4ac5..0000000
--- a/webrtc/video_renderer.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef WEBRTC_VIDEO_RENDERER_H_
-#define WEBRTC_VIDEO_RENDERER_H_
-
-#include "webrtc/media/base/videosinkinterface.h"
-
-namespace webrtc {
-
-class VideoFrame;
-
-class VideoRenderer : public rtc::VideoSinkInterface<VideoFrame> {
- public:
-  // This function returns true if WebRTC should not delay frames for
-  // smoothness. In general, this case means the renderer can schedule frames to
-  // optimize smoothness.
-  virtual bool SmoothsRenderedFrames() const { return false; }
-
- protected:
-  virtual ~VideoRenderer() {}
-};
-}  // namespace webrtc
-
-#endif  // WEBRTC_VIDEO_RENDERER_H_
diff --git a/webrtc/video_send_stream.h b/webrtc/video_send_stream.h
index c58775f..7815acf 100644
--- a/webrtc/video_send_stream.h
+++ b/webrtc/video_send_stream.h
@@ -19,7 +19,7 @@
 #include "webrtc/frame_callback.h"
 #include "webrtc/stream.h"
 #include "webrtc/transport.h"
-#include "webrtc/video_renderer.h"
+#include "webrtc/media/base/videosinkinterface.h"
 
 namespace webrtc {
 
@@ -149,7 +149,7 @@
 
     // Renderer for local preview. The local renderer will be called even if
     // sending hasn't started. 'nullptr' disables local rendering.
-    VideoRenderer* local_renderer = nullptr;
+    rtc::VideoSinkInterface<VideoFrame>* local_renderer = nullptr;
 
     // Expected delay needed by the renderer, i.e. the frame will be delivered
     // this many milliseconds, if possible, earlier than expected render time.
diff --git a/webrtc/webrtc.gyp b/webrtc/webrtc.gyp
index 5bcb072..8c10f02 100644
--- a/webrtc/webrtc.gyp
+++ b/webrtc/webrtc.gyp
@@ -116,7 +116,6 @@
         'stream.h',
         'transport.h',
         'video_receive_stream.h',
-        'video_renderer.h',
         'video_send_stream.h',
 
         '<@(webrtc_audio_sources)',