Make VideoTrack and VideoTrackRenderers implement rtc::VideoSourceInterface.

This patch tries to only change the interface to VideoTrack, with
minimal changes to the implementation. Some points worth noting:

VideoTrackRenderers should ultimately be deleted, but it is kept for
now since we need an object implementing webrtc::VideoRenderer, and
that shouldn't be VideoTrack.

BUG=webrtc:5426
TBR=glaznev@webrtc.org  // please look at  examples

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

Cr-Commit-Position: refs/heads/master@{#11775}
diff --git a/webrtc/api/mediastreaminterface.h b/webrtc/api/mediastreaminterface.h
index d4fe2bf..100db08 100644
--- a/webrtc/api/mediastreaminterface.h
+++ b/webrtc/api/mediastreaminterface.h
@@ -24,6 +24,7 @@
 #include "webrtc/base/refcount.h"
 #include "webrtc/base/scoped_ref_ptr.h"
 #include "webrtc/media/base/videosinkinterface.h"
+#include "webrtc/media/base/videosourceinterface.h"
 
 namespace cricket {
 
@@ -121,12 +122,30 @@
 
 class VideoSourceInterface;
 
-class VideoTrackInterface : public MediaStreamTrackInterface {
+class VideoTrackInterface
+    : public MediaStreamTrackInterface,
+      public rtc::VideoSourceInterface<cricket::VideoFrame> {
  public:
-  // Register a renderer that will render all frames received on this track.
-  virtual void AddRenderer(VideoRendererInterface* renderer) = 0;
-  // Deregister a renderer.
-  virtual void RemoveRenderer(VideoRendererInterface* renderer) = 0;
+  // Make an unqualified VideoSourceInterface resolve to
+  // webrtc::VideoSourceInterface, not our base class
+  // rtc::VideoSourceInterface<cricket::VideoFrame>.
+  using VideoSourceInterface = webrtc::VideoSourceInterface;
+
+  // AddRenderer and RemoveRenderer are for backwards compatibility
+  // only. They are obsoleted by the methods of
+  // rtc::VideoSourceInterface.
+  virtual void AddRenderer(VideoRendererInterface* renderer) {
+    AddOrUpdateSink(renderer, rtc::VideoSinkWants());
+  }
+  virtual void RemoveRenderer(VideoRendererInterface* renderer) {
+    RemoveSink(renderer);
+  }
+
+  // Register a video sink for this track.
+  void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink,
+                       const rtc::VideoSinkWants& wants) override{};
+  void RemoveSink(
+      rtc::VideoSinkInterface<cricket::VideoFrame>* sink) override{};
 
   virtual VideoSourceInterface* GetSource() const = 0;