From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- third_party/libwebrtc/pc/video_track.h | 88 ++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 third_party/libwebrtc/pc/video_track.h (limited to 'third_party/libwebrtc/pc/video_track.h') diff --git a/third_party/libwebrtc/pc/video_track.h b/third_party/libwebrtc/pc/video_track.h new file mode 100644 index 0000000000..13a51c454b --- /dev/null +++ b/third_party/libwebrtc/pc/video_track.h @@ -0,0 +1,88 @@ +/* + * Copyright 2012 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. + */ + +#ifndef PC_VIDEO_TRACK_H_ +#define PC_VIDEO_TRACK_H_ + +#include + +#include "absl/types/optional.h" +#include "api/media_stream_interface.h" +#include "api/media_stream_track.h" +#include "api/scoped_refptr.h" +#include "api/sequence_checker.h" +#include "api/video/video_frame.h" +#include "api/video/video_sink_interface.h" +#include "api/video/video_source_interface.h" +#include "media/base/video_source_base.h" +#include "pc/video_track_source_proxy.h" +#include "rtc_base/system/no_unique_address.h" +#include "rtc_base/thread.h" +#include "rtc_base/thread_annotations.h" + +namespace webrtc { + +// TODO(tommi): Instead of inheriting from `MediaStreamTrack<>`, implement the +// properties directly in this class. `MediaStreamTrack` doesn't guard against +// conflicting access, so we'd need to override those methods anyway in this +// class in order to make sure things are correctly checked. +class VideoTrack : public MediaStreamTrack, + public rtc::VideoSourceBaseGuarded, + public ObserverInterface { + public: + static rtc::scoped_refptr Create( + absl::string_view label, + rtc::scoped_refptr source, + rtc::Thread* worker_thread); + + void AddOrUpdateSink(rtc::VideoSinkInterface* sink, + const rtc::VideoSinkWants& wants) override; + void RemoveSink(rtc::VideoSinkInterface* sink) override; + void RequestRefreshFrame() override; + VideoTrackSourceInterface* GetSource() const override; + + ContentHint content_hint() const override; + void set_content_hint(ContentHint hint) override; + bool set_enabled(bool enable) override; + bool enabled() const override; + MediaStreamTrackInterface::TrackState state() const override; + std::string kind() const override; + + // Direct access to the non-proxied source object for internal implementation. + VideoTrackSourceInterface* GetSourceInternal() const; + + protected: + VideoTrack( + absl::string_view id, + rtc::scoped_refptr< + VideoTrackSourceProxyWithInternal> source, + rtc::Thread* worker_thread); + ~VideoTrack(); + + private: + // Implements ObserverInterface. Observes `video_source_` state. + void OnChanged() override; + + RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker signaling_thread_; + rtc::Thread* const worker_thread_; + const rtc::scoped_refptr< + VideoTrackSourceProxyWithInternal> + video_source_; + ContentHint content_hint_ RTC_GUARDED_BY(&signaling_thread_); + // Cached `enabled` state for the worker thread. This is kept in sync with + // the state maintained on the signaling thread via set_enabled() but can + // be queried without blocking on the worker thread by callers that don't + // use an api proxy to call the `enabled()` method. + bool enabled_w_ RTC_GUARDED_BY(worker_thread_) = true; +}; + +} // namespace webrtc + +#endif // PC_VIDEO_TRACK_H_ -- cgit v1.2.3