// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/renderer/media/media_stream_video_track.h" #include "content/renderer/media/webrtc/webrtc_video_sink_adapter.h" namespace content { // Wrapper which allows to use std::find_if() when adding and removing // sinks to/from |sinks_|. struct SinkWrapper { explicit SinkWrapper(MediaStreamVideoSink* sink) : sink_(sink) {} bool operator()( const WebRtcVideoSinkAdapter* owner) { return owner->sink() == sink_; } MediaStreamVideoSink* sink_; }; MediaStreamVideoTrack::MediaStreamVideoTrack(webrtc::VideoTrackInterface* track, bool is_local_track) : MediaStreamTrackExtraData(track, is_local_track), video_track_(track) { } MediaStreamVideoTrack::~MediaStreamVideoTrack() { DCHECK(sinks_.empty()); } void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)) == sinks_.end()); sinks_.push_back(new WebRtcVideoSinkAdapter(video_track_, sink)); } void MediaStreamVideoTrack::RemoveSink(MediaStreamVideoSink* sink) { DCHECK(thread_checker_.CalledOnValidThread()); ScopedVector::iterator it = std::find_if(sinks_.begin(), sinks_.end(), SinkWrapper(sink)); DCHECK(it != sinks_.end()); sinks_.erase(it); } } // namespace content