Line data Source code
1 : /*
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 :
13 : #include "webrtc/base/checks.h"
14 :
15 : namespace rtc {
16 :
17 0 : VideoSourceBase::VideoSourceBase() {
18 0 : thread_checker_.DetachFromThread();
19 0 : }
20 :
21 0 : void VideoSourceBase::AddOrUpdateSink(
22 : VideoSinkInterface<webrtc::VideoFrame>* sink,
23 : const VideoSinkWants& wants) {
24 0 : RTC_DCHECK(thread_checker_.CalledOnValidThread());
25 0 : RTC_DCHECK(sink != nullptr);
26 :
27 0 : SinkPair* sink_pair = FindSinkPair(sink);
28 0 : if (!sink_pair) {
29 0 : sinks_.push_back(SinkPair(sink, wants));
30 : } else {
31 0 : sink_pair->wants = wants;
32 : }
33 0 : }
34 :
35 0 : void VideoSourceBase::RemoveSink(VideoSinkInterface<webrtc::VideoFrame>* sink) {
36 0 : RTC_DCHECK(thread_checker_.CalledOnValidThread());
37 0 : RTC_DCHECK(sink != nullptr);
38 0 : RTC_DCHECK(FindSinkPair(sink));
39 0 : sinks_.erase(std::remove_if(sinks_.begin(), sinks_.end(),
40 0 : [sink](const SinkPair& sink_pair) {
41 0 : return sink_pair.sink == sink;
42 0 : }),
43 0 : sinks_.end());
44 0 : }
45 :
46 0 : VideoSourceBase::SinkPair* VideoSourceBase::FindSinkPair(
47 : const VideoSinkInterface<webrtc::VideoFrame>* sink) {
48 0 : RTC_DCHECK(thread_checker_.CalledOnValidThread());
49 : auto sink_pair_it = std::find_if(
50 : sinks_.begin(), sinks_.end(),
51 0 : [sink](const SinkPair& sink_pair) { return sink_pair.sink == sink; });
52 0 : if (sink_pair_it != sinks_.end()) {
53 0 : return &*sink_pair_it;
54 : }
55 0 : return nullptr;
56 : }
57 :
58 : } // namespace rtc
|