Index: webrtc/api/videocapturertracksource.h |
diff --git a/webrtc/api/videocapturertracksource.h b/webrtc/api/videocapturertracksource.h |
index 15f8bf137ed60734bb8474a60a23aab2eaeb81f1..f086d793e74be98f15151b111bf63726a93ffdf2 100644 |
--- a/webrtc/api/videocapturertracksource.h |
+++ b/webrtc/api/videocapturertracksource.h |
@@ -11,7 +11,88 @@ |
#ifndef WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ |
#define WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ |
-// TODO(perkj): This file is added to prepare for changing name of VideoSource |
-// to VideoCapturerTrackSource. |
+#include <list> |
-#endif // WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ |
+#include "webrtc/api/mediastreaminterface.h" |
+#include "webrtc/api/notifier.h" |
+#include "webrtc/api/videosourceinterface.h" |
+#include "webrtc/api/videotrackrenderers.h" |
+#include "webrtc/base/asyncinvoker.h" |
+#include "webrtc/base/scoped_ptr.h" |
+#include "webrtc/base/sigslot.h" |
+#include "webrtc/media/base/videosinkinterface.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. |
pthatcher1
2016/03/09 20:47:14
make sure => make sure
|
+// 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 Notifier<VideoTrackSourceInterface>, |
+ 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<VideoTrackSourceInterface> Create( |
+ rtc::Thread* worker_thread, |
+ cricket::VideoCapturer* capturer, |
+ const webrtc::MediaConstraintsInterface* constraints, |
+ bool remote); |
+ |
+ static rtc::scoped_refptr<VideoTrackSourceInterface> Create( |
+ rtc::Thread* worker_thread, |
+ cricket::VideoCapturer* capturer, |
+ bool remote); |
+ |
+ SourceState state() const override { return state_; } |
+ bool remote() const override { return remote_; } |
+ |
+ virtual const cricket::VideoOptions* options() const { return &options_; } |
+ |
+ virtual cricket::VideoCapturer* GetVideoCapturer() { |
+ return video_capturer_.get(); |
+ } |
+ |
+ void Stop() override; |
+ void Restart() override; |
+ |
+ void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink, |
+ const rtc::VideoSinkWants& wants) override; |
+ void RemoveSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink) 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); |
+ void SetState(SourceState new_state); |
+ |
+ rtc::Thread* signaling_thread_; |
+ rtc::Thread* worker_thread_; |
+ rtc::AsyncInvoker invoker_; |
+ rtc::scoped_ptr<cricket::VideoCapturer> video_capturer_; |
+ bool started_; |
+ rtc::scoped_ptr<cricket::VideoRenderer> frame_input_; |
+ |
+ cricket::VideoFormat format_; |
+ cricket::VideoOptions options_; |
+ SourceState state_; |
+ const bool remote_; |
+}; |
+ |
+} // namespace webrtc |
+ |
+#endif // WEBRTC_API_VIDEOCAPTURERTRACKSOURCE_H_ |