FrameForwarder: remove lock recursions.
This change removes lock recursions and adds thread annotations. Bug: webrtc:11567 Change-Id: I5416cfc8e482bd966eec87c3790abbebc37a84d8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/176224 Reviewed-by: Magnus Flodman <mflodman@webrtc.org> Commit-Queue: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31403}
This commit is contained in:

committed by
Commit Bot

parent
5cc28b0c6a
commit
16038abb90
@ -26,6 +26,12 @@ void FrameForwarder::IncomingCapturedFrame(const VideoFrame& video_frame) {
|
|||||||
void FrameForwarder::AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
void FrameForwarder::AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
const rtc::VideoSinkWants& wants) {
|
const rtc::VideoSinkWants& wants) {
|
||||||
rtc::CritScope lock(&crit_);
|
rtc::CritScope lock(&crit_);
|
||||||
|
AddOrUpdateSinkLocked(sink, wants);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrameForwarder::AddOrUpdateSinkLocked(
|
||||||
|
rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
|
const rtc::VideoSinkWants& wants) {
|
||||||
RTC_DCHECK(!sink_ || sink_ == sink);
|
RTC_DCHECK(!sink_ || sink_ == sink);
|
||||||
sink_ = sink;
|
sink_ = sink;
|
||||||
sink_wants_ = wants;
|
sink_wants_ = wants;
|
||||||
@ -42,6 +48,10 @@ rtc::VideoSinkWants FrameForwarder::sink_wants() const {
|
|||||||
return sink_wants_;
|
return sink_wants_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rtc::VideoSinkWants FrameForwarder::sink_wants_locked() const {
|
||||||
|
return sink_wants_;
|
||||||
|
}
|
||||||
|
|
||||||
bool FrameForwarder::has_sinks() const {
|
bool FrameForwarder::has_sinks() const {
|
||||||
rtc::CritScope lock(&crit_);
|
rtc::CritScope lock(&crit_);
|
||||||
return sink_ != nullptr;
|
return sink_ != nullptr;
|
||||||
|
@ -26,14 +26,22 @@ class FrameForwarder : public rtc::VideoSourceInterface<VideoFrame> {
|
|||||||
FrameForwarder();
|
FrameForwarder();
|
||||||
~FrameForwarder() override;
|
~FrameForwarder() override;
|
||||||
// Forwards |video_frame| to the registered |sink_|.
|
// Forwards |video_frame| to the registered |sink_|.
|
||||||
virtual void IncomingCapturedFrame(const VideoFrame& video_frame);
|
virtual void IncomingCapturedFrame(const VideoFrame& video_frame)
|
||||||
rtc::VideoSinkWants sink_wants() const;
|
RTC_LOCKS_EXCLUDED(crit_);
|
||||||
bool has_sinks() const;
|
rtc::VideoSinkWants sink_wants() const RTC_LOCKS_EXCLUDED(crit_);
|
||||||
|
bool has_sinks() const RTC_LOCKS_EXCLUDED(crit_);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
rtc::VideoSinkWants sink_wants_locked() const
|
||||||
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
||||||
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
const rtc::VideoSinkWants& wants) override;
|
const rtc::VideoSinkWants& wants)
|
||||||
void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override;
|
RTC_LOCKS_EXCLUDED(crit_) override;
|
||||||
|
void AddOrUpdateSinkLocked(rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
|
const rtc::VideoSinkWants& wants)
|
||||||
|
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_);
|
||||||
|
void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink)
|
||||||
|
RTC_LOCKS_EXCLUDED(crit_) override;
|
||||||
|
|
||||||
rtc::CriticalSection crit_;
|
rtc::CriticalSection crit_;
|
||||||
rtc::VideoSinkInterface<VideoFrame>* sink_ RTC_GUARDED_BY(crit_);
|
rtc::VideoSinkInterface<VideoFrame>* sink_ RTC_GUARDED_BY(crit_);
|
||||||
|
@ -554,9 +554,9 @@ class AdaptingFrameForwarder : public test::FrameForwarder {
|
|||||||
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
|
||||||
const rtc::VideoSinkWants& wants) override {
|
const rtc::VideoSinkWants& wants) override {
|
||||||
rtc::CritScope cs(&crit_);
|
rtc::CritScope cs(&crit_);
|
||||||
last_wants_ = sink_wants();
|
last_wants_ = sink_wants_locked();
|
||||||
adapter_.OnSinkWants(wants);
|
adapter_.OnSinkWants(wants);
|
||||||
test::FrameForwarder::AddOrUpdateSink(sink, wants);
|
test::FrameForwarder::AddOrUpdateSinkLocked(sink, wants);
|
||||||
}
|
}
|
||||||
cricket::VideoAdapter adapter_;
|
cricket::VideoAdapter adapter_;
|
||||||
bool adaptation_enabled_ RTC_GUARDED_BY(crit_);
|
bool adaptation_enabled_ RTC_GUARDED_BY(crit_);
|
||||||
|
Reference in New Issue
Block a user