/* * 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 WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ #define WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ #include #include "webrtc/api/mediastreaminterface.h" #include "webrtc/api/videotracksource.h" #include "webrtc/base/asyncinvoker.h" #include "webrtc/base/sigslot.h" #include "webrtc/media/base/videocapturer.h" #include "webrtc/media/base/videocommon.h" // VideoCapturerTrackSource implements VideoTrackSourceInterface. It owns a // cricket::VideoCapturer and make sure the camera is started at a resolution // that honors the constraints. // The state is set depending on the result of starting the capturer. // If the constraint can't be met or the capturer fails to start, the state // transition to kEnded, otherwise it transitions to kLive. namespace webrtc { class MediaConstraintsInterface; class VideoCapturerTrackSource : public VideoTrackSource, public sigslot::has_slots<> { public: // Creates an instance of VideoCapturerTrackSource. // VideoCapturerTrackSource take ownership of |capturer|. // |constraints| can be NULL and in that case the camera is opened using a // default resolution. static rtc::scoped_refptr Create( rtc::Thread* worker_thread, cricket::VideoCapturer* capturer, const webrtc::MediaConstraintsInterface* constraints, bool remote); static rtc::scoped_refptr Create( rtc::Thread* worker_thread, cricket::VideoCapturer* capturer, bool remote); bool is_screencast() const override { return video_capturer_->IsScreencast(); } rtc::Optional needs_denoising() const override { return needs_denoising_; } bool GetStats(Stats* stats) override; void Stop() override; void Restart() override; protected: VideoCapturerTrackSource(rtc::Thread* worker_thread, cricket::VideoCapturer* capturer, bool remote); virtual ~VideoCapturerTrackSource(); void Initialize(const webrtc::MediaConstraintsInterface* constraints); private: void OnStateChange(cricket::VideoCapturer* capturer, cricket::CaptureState capture_state); rtc::Thread* signaling_thread_; rtc::Thread* worker_thread_; rtc::AsyncInvoker invoker_; std::unique_ptr video_capturer_; bool started_; cricket::VideoFormat format_; rtc::Optional needs_denoising_; }; } // namespace webrtc #endif // WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_