blob: 222adc457fe857ea76ca789d3c3d4a092c80718d [file] [log] [blame]
perkj916c76e2016-03-11 22:54:27 +01001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/media/base/videosourcebase.h"
12
Edward Lemurc20978e2017-07-06 19:44:34 +020013#include "webrtc/rtc_base/checks.h"
perkjd6c39542016-03-17 10:35:23 +010014
15namespace rtc {
16
17VideoSourceBase::VideoSourceBase() {
18 thread_checker_.DetachFromThread();
19}
20
21void VideoSourceBase::AddOrUpdateSink(
nisseacd935b2016-11-11 03:55:13 -080022 VideoSinkInterface<webrtc::VideoFrame>* sink,
perkjd6c39542016-03-17 10:35:23 +010023 const VideoSinkWants& wants) {
24 RTC_DCHECK(thread_checker_.CalledOnValidThread());
25 RTC_DCHECK(sink != nullptr);
26
27 SinkPair* sink_pair = FindSinkPair(sink);
28 if (!sink_pair) {
29 sinks_.push_back(SinkPair(sink, wants));
30 } else {
31 sink_pair->wants = wants;
32 }
33}
34
nisseacd935b2016-11-11 03:55:13 -080035void VideoSourceBase::RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) {
perkjd6c39542016-03-17 10:35:23 +010036 RTC_DCHECK(thread_checker_.CalledOnValidThread());
37 RTC_DCHECK(sink != nullptr);
38 RTC_DCHECK(FindSinkPair(sink));
39 sinks_.erase(std::remove_if(sinks_.begin(), sinks_.end(),
40 [sink](const SinkPair& sink_pair) {
41 return sink_pair.sink == sink;
42 }),
43 sinks_.end());
44}
45
46VideoSourceBase::SinkPair* VideoSourceBase::FindSinkPair(
nisseacd935b2016-11-11 03:55:13 -080047 const VideoSinkInterface<webrtc::VideoFrame>* sink) {
perkjd6c39542016-03-17 10:35:23 +010048 RTC_DCHECK(thread_checker_.CalledOnValidThread());
49 auto sink_pair_it = std::find_if(
50 sinks_.begin(), sinks_.end(),
51 [sink](const SinkPair& sink_pair) { return sink_pair.sink == sink; });
52 if (sink_pair_it != sinks_.end()) {
53 return &*sink_pair_it;
54 }
55 return nullptr;
56}
57
58} // namespace rtc