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;