blob: 49deaee76a176222a7844820eb7ff5ae20e8b795 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:361/*
kjellanderb24317b2016-02-10 15:54:432 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:363 *
kjellanderb24317b2016-02-10 15:54:434 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:369 */
10
Steve Anton10542f22019-01-11 17:11:0011#ifndef PC_VIDEO_TRACK_H_
12#define PC_VIDEO_TRACK_H_
henrike@webrtc.org28e20752013-07-10 00:45:3613
14#include <string>
15
Steve Anton10542f22019-01-11 17:11:0016#include "api/media_stream_interface.h"
Harald Alvestrand9cb42c82020-10-11 13:03:4717#include "api/media_stream_track.h"
Mirko Bonadeid9708072019-01-25 19:26:4818#include "api/scoped_refptr.h"
Artem Titovd15a5752021-02-10 13:31:2419#include "api/sequence_checker.h"
Yves Gerey3e707812018-11-28 15:47:4920#include "api/video/video_frame.h"
21#include "api/video/video_sink_interface.h"
22#include "api/video/video_source_interface.h"
Steve Anton10542f22019-01-11 17:11:0023#include "media/base/video_source_base.h"
Yves Gerey2e00abc2018-10-05 13:39:2424#include "rtc_base/thread.h"
Yves Gerey3e707812018-11-28 15:47:4925#include "rtc_base/thread_annotations.h"
henrike@webrtc.org28e20752013-07-10 00:45:3626
27namespace webrtc {
28
perkjd6c39542016-03-17 09:35:2329class VideoTrack : public MediaStreamTrack<VideoTrackInterface>,
Tommi816134a2021-05-24 14:54:4130 public rtc::VideoSourceBaseGuarded,
perkjc8f952d2016-03-23 07:33:5631 public ObserverInterface {
henrike@webrtc.org28e20752013-07-10 00:45:3632 public:
perkja3ede6c2016-03-08 00:27:4833 static rtc::scoped_refptr<VideoTrack> Create(
34 const std::string& label,
perkj773be362017-08-01 06:22:0135 VideoTrackSourceInterface* source,
36 rtc::Thread* worker_thread);
henrike@webrtc.org28e20752013-07-10 00:45:3637
nisseacd935b2016-11-11 11:55:1338 void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
nissedb25d2e2016-02-26 09:24:5839 const rtc::VideoSinkWants& wants) override;
nisseacd935b2016-11-11 11:55:1340 void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override;
Tommi816134a2021-05-24 14:54:4141 VideoTrackSourceInterface* GetSource() const override;
nissedb25d2e2016-02-26 09:24:5842
pbos5214a0a2016-12-16 23:39:1143 ContentHint content_hint() const override;
44 void set_content_hint(ContentHint hint) override;
nisseef8b61e2016-04-29 13:09:1545 bool set_enabled(bool enable) override;
Tommi816134a2021-05-24 14:54:4146 bool enabled() const override;
47 MediaStreamTrackInterface::TrackState state() const override;
nisseef8b61e2016-04-29 13:09:1548 std::string kind() const override;
henrike@webrtc.org28e20752013-07-10 00:45:3649
50 protected:
perkj773be362017-08-01 06:22:0151 VideoTrack(const std::string& id,
52 VideoTrackSourceInterface* video_source,
53 rtc::Thread* worker_thread);
henrike@webrtc.org28e20752013-07-10 00:45:3654 ~VideoTrack();
55
56 private:
Artem Titov880fa812021-07-30 20:30:2357 // Implements ObserverInterface. Observes `video_source_` state.
perkjc8f952d2016-03-23 07:33:5658 void OnChanged() override;
59
Tommi816134a2021-05-24 14:54:4160 RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker signaling_thread_;
perkj773be362017-08-01 06:22:0161 rtc::Thread* const worker_thread_;
Tommi816134a2021-05-24 14:54:4162 const rtc::scoped_refptr<VideoTrackSourceInterface> video_source_;
63 ContentHint content_hint_ RTC_GUARDED_BY(worker_thread_);
henrike@webrtc.org28e20752013-07-10 00:45:3664};
65
66} // namespace webrtc
67
Steve Anton10542f22019-01-11 17:11:0068#endif // PC_VIDEO_TRACK_H_