This remove the use of VideoTrackRenderers within VideoTrack and instead all its sinks are passed to VideoSource. That means that the source will handle all sinks and can (if the source implement it) handle different SinkWants for each sink. The VideoBroadcaster is updated to produce black frames instead of as is today the deprecated VideoTrackRenderers. BUG=webrtc:5426 R=nisse@webrtc.org, pthatcher@webrtc.org Review URL: https://codereview.webrtc.org/1779063003 . Cr-Commit-Position: refs/heads/master@{#12028}
60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "webrtc/media/base/videosourcebase.h"
|
|
|
|
#include "webrtc/base/checks.h"
|
|
|
|
namespace rtc {
|
|
|
|
VideoSourceBase::VideoSourceBase() {
|
|
thread_checker_.DetachFromThread();
|
|
}
|
|
|
|
void VideoSourceBase::AddOrUpdateSink(
|
|
VideoSinkInterface<cricket::VideoFrame>* sink,
|
|
const VideoSinkWants& wants) {
|
|
RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
|
RTC_DCHECK(sink != nullptr);
|
|
|
|
SinkPair* sink_pair = FindSinkPair(sink);
|
|
if (!sink_pair) {
|
|
sinks_.push_back(SinkPair(sink, wants));
|
|
} else {
|
|
sink_pair->wants = wants;
|
|
}
|
|
}
|
|
|
|
void VideoSourceBase::RemoveSink(
|
|
VideoSinkInterface<cricket::VideoFrame>* sink) {
|
|
RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
|
RTC_DCHECK(sink != nullptr);
|
|
RTC_DCHECK(FindSinkPair(sink));
|
|
sinks_.erase(std::remove_if(sinks_.begin(), sinks_.end(),
|
|
[sink](const SinkPair& sink_pair) {
|
|
return sink_pair.sink == sink;
|
|
}),
|
|
sinks_.end());
|
|
}
|
|
|
|
VideoSourceBase::SinkPair* VideoSourceBase::FindSinkPair(
|
|
const VideoSinkInterface<cricket::VideoFrame>* sink) {
|
|
RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
|
auto sink_pair_it = std::find_if(
|
|
sinks_.begin(), sinks_.end(),
|
|
[sink](const SinkPair& sink_pair) { return sink_pair.sink == sink; });
|
|
if (sink_pair_it != sinks_.end()) {
|
|
return &*sink_pair_it;
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
} // namespace rtc
|