blob: 7e75e14d07eef30f779fd878fcaa01b0c1d8c6ea [file] [log] [blame]
Henrik Kjellanderbd0ae452016-02-10 09:53:121/*
kjellander95ed4e62016-02-10 15:54:432 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
Henrik Kjellanderbd0ae452016-02-10 09:53:123 *
kjellander95ed4e62016-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.
Henrik Kjellanderbd0ae452016-02-10 09:53:129 */
10
ossu25e4ac72017-01-23 12:56:2511#ifndef WEBRTC_PC_VIDEOTRACK_H_
12#define WEBRTC_PC_VIDEOTRACK_H_
Henrik Kjellanderbd0ae452016-02-10 09:53:1213
14#include <string>
perkj94c441c2016-03-17 09:35:2315#include <vector>
Henrik Kjellanderbd0ae452016-02-10 09:53:1216
Henrik Kjellanderbd0ae452016-02-10 09:53:1217#include "webrtc/base/scoped_ref_ptr.h"
perkj94c441c2016-03-17 09:35:2318#include "webrtc/base/thread_checker.h"
19#include "webrtc/media/base/videosourcebase.h"
ossu25e4ac72017-01-23 12:56:2520#include "webrtc/pc/mediastreamtrack.h"
Henrik Kjellanderbd0ae452016-02-10 09:53:1221
22namespace webrtc {
23
perkj94c441c2016-03-17 09:35:2324class VideoTrack : public MediaStreamTrack<VideoTrackInterface>,
perkj8dde01d2016-03-23 07:33:5625 public rtc::VideoSourceBase,
26 public ObserverInterface {
Henrik Kjellanderbd0ae452016-02-10 09:53:1227 public:
perkj2a4ff982016-03-08 00:27:4828 static rtc::scoped_refptr<VideoTrack> Create(
29 const std::string& label,
30 VideoTrackSourceInterface* source);
Henrik Kjellanderbd0ae452016-02-10 09:53:1231
nissee8431852016-11-11 11:55:1332 void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
nisse0a70b8d2016-02-26 09:24:5833 const rtc::VideoSinkWants& wants) override;
nissee8431852016-11-11 11:55:1334 void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override;
nisse0a70b8d2016-02-26 09:24:5835
nisse44dc40f2016-04-29 13:09:1536 VideoTrackSourceInterface* GetSource() const override {
Henrik Kjellanderbd0ae452016-02-10 09:53:1237 return video_source_.get();
38 }
pbos37d7b3f2016-12-16 23:39:1139 ContentHint content_hint() const override;
40 void set_content_hint(ContentHint hint) override;
nisse44dc40f2016-04-29 13:09:1541 bool set_enabled(bool enable) override;
42 std::string kind() const override;
Henrik Kjellanderbd0ae452016-02-10 09:53:1243
44 protected:
perkj2a4ff982016-03-08 00:27:4845 VideoTrack(const std::string& id, VideoTrackSourceInterface* video_source);
Henrik Kjellanderbd0ae452016-02-10 09:53:1246 ~VideoTrack();
47
48 private:
perkj8dde01d2016-03-23 07:33:5649 // Implements ObserverInterface. Observes |video_source_| state.
50 void OnChanged() override;
51
nisse0a422d72016-04-07 14:45:5452 rtc::ThreadChecker signaling_thread_checker_;
53 rtc::ThreadChecker worker_thread_checker_;
perkj2a4ff982016-03-08 00:27:4854 rtc::scoped_refptr<VideoTrackSourceInterface> video_source_;
pbos37d7b3f2016-12-16 23:39:1155 ContentHint content_hint_ GUARDED_BY(signaling_thread_checker_);
Henrik Kjellanderbd0ae452016-02-10 09:53:1256};
57
58} // namespace webrtc
59
ossu25e4ac72017-01-23 12:56:2560#endif // WEBRTC_PC_VIDEOTRACK_H_