Index: webrtc/api/videotrackrenderers.cc |
diff --git a/webrtc/api/videotrackrenderers.cc b/webrtc/api/videotrackrenderers.cc |
index 4800d3b5c89768e8aef3473a0dc9e25f13f357b0..9e928efbf1f1cf7b776fd331694d0f8eb1d6f800 100644 |
--- a/webrtc/api/videotrackrenderers.cc |
+++ b/webrtc/api/videotrackrenderers.cc |
@@ -19,17 +19,21 @@ VideoTrackRenderers::VideoTrackRenderers() : enabled_(true) { |
VideoTrackRenderers::~VideoTrackRenderers() { |
} |
-void VideoTrackRenderers::AddRenderer(VideoRendererInterface* renderer) { |
- if (!renderer) { |
- return; |
- } |
+void VideoTrackRenderers::AddOrUpdateSink( |
+ VideoSinkInterface<cricket::VideoFrame>* sink, |
+ const rtc::VideoSinkWants& wants) { |
+ // TODO(nisse): Currently ignores wants. We should somehow use |
+ // VideoBroadcaster, but we need to sort out its threading issues |
+ // first. |
rtc::CritScope cs(&critical_section_); |
- renderers_.insert(renderer); |
+ if (std::find(sinks_.begin(), sinks_.end(), sink) == sinks_.end()) |
+ sinks_.push_back(sink); |
} |
-void VideoTrackRenderers::RemoveRenderer(VideoRendererInterface* renderer) { |
+void VideoTrackRenderers::RemoveSink( |
+ VideoSinkInterface<cricket::VideoFrame>* sink) { |
rtc::CritScope cs(&critical_section_); |
- renderers_.erase(renderer); |
+ sinks_.erase(std::remove(sinks_.begin(), sinks_.end(), sink), sinks_.end()); |
} |
void VideoTrackRenderers::SetEnabled(bool enable) { |
@@ -41,7 +45,7 @@ bool VideoTrackRenderers::RenderFrame(const cricket::VideoFrame* frame) { |
{ |
rtc::CritScope cs(&critical_section_); |
if (enabled_) { |
- RenderFrameToRenderers(frame); |
+ RenderFrameToSinks(*frame); |
return true; |
} |
} |
@@ -64,17 +68,16 @@ bool VideoTrackRenderers::RenderFrame(const cricket::VideoFrame* frame) { |
// enabled while we generated the black frame. I think the |
// enabled-ness ought to be applied at the track output, and hence |
// an enabled track shouldn't send any blacked out frames. |
- RenderFrameToRenderers(enabled_ ? frame : &black); |
+ RenderFrameToSinks(enabled_ ? *frame : black); |
return true; |
} |
} |
// Called with critical_section_ already locked |
-void VideoTrackRenderers::RenderFrameToRenderers( |
- const cricket::VideoFrame* frame) { |
- for (VideoRendererInterface* renderer : renderers_) { |
- renderer->RenderFrame(frame); |
+void VideoTrackRenderers::RenderFrameToSinks(const cricket::VideoFrame& frame) { |
+ for (auto sink : sinks_) { |
+ sink->OnFrame(frame); |
} |
} |