OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ |
6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ | 6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ |
7 | 7 |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "content/common/media/video_capture.h" | 10 #include "content/common/media/video_capture.h" |
| 11 #include "content/renderer/media/video_capture_impl_manager.h" |
11 #include "media/video/capture/video_capture.h" | 12 #include "media/video/capture/video_capture.h" |
12 | 13 |
13 namespace content { | 14 namespace content { |
14 | 15 |
15 class VideoCaptureHandle; | |
16 | |
17 // Implements a simple reference counted video capturer that guarantees that | 16 // Implements a simple reference counted video capturer that guarantees that |
18 // methods in RtcVideoCaptureDelegateEventHandler is only called from when | 17 // methods in RtcVideoCaptureDelegateEventHandler is only called from when |
19 // StartCapture have been called until after StopCapture have been called. | 18 // StartCapture have been called until after StopCapture have been called. |
20 // It uses VideoCaptureImplManager to start / stop and receive I420 frames | 19 // It uses VideoCaptureImplManager to start / stop and receive I420 frames |
21 // from Chrome's video capture implementation. | 20 // from Chrome's video capture implementation. |
22 class RtcVideoCaptureDelegate | 21 class RtcVideoCaptureDelegate |
23 : public base::RefCountedThreadSafe<RtcVideoCaptureDelegate>, | 22 : public base::RefCountedThreadSafe<RtcVideoCaptureDelegate>, |
24 public media::VideoCapture::EventHandler { | 23 public media::VideoCapture::EventHandler { |
25 public: | 24 public: |
26 enum CaptureState { | 25 enum CaptureState { |
27 CAPTURE_STOPPED, // The capturer has been stopped or hasn't started yet. | 26 CAPTURE_STOPPED, // The capturer has been stopped or hasn't started yet. |
28 CAPTURE_RUNNING, // The capturer has been started successfully and is now | 27 CAPTURE_RUNNING, // The capturer has been started successfully and is now |
29 // capturing. | 28 // capturing. |
30 CAPTURE_FAILED, // The capturer failed to start. | 29 CAPTURE_FAILED, // The capturer failed to start. |
31 }; | 30 }; |
32 | 31 |
33 typedef base::Callback<void(const scoped_refptr<media::VideoFrame>&)> | 32 typedef base::Callback<void(const scoped_refptr<media::VideoFrame>&)> |
34 FrameCapturedCallback; | 33 FrameCapturedCallback; |
35 typedef base::Callback<void(CaptureState)> StateChangeCallback; | 34 typedef base::Callback<void(CaptureState)> StateChangeCallback; |
36 | 35 |
37 RtcVideoCaptureDelegate(const media::VideoCaptureSessionId id); | 36 RtcVideoCaptureDelegate(const media::VideoCaptureSessionId id, |
| 37 VideoCaptureImplManager* vc_manager); |
38 | 38 |
39 void StartCapture(const media::VideoCaptureParams& params, | 39 void StartCapture(const media::VideoCaptureParams& params, |
40 const FrameCapturedCallback& captured_callback, | 40 const FrameCapturedCallback& captured_callback, |
41 const StateChangeCallback& state_callback); | 41 const StateChangeCallback& state_callback); |
42 void StopCapture(); | 42 void StopCapture(); |
43 | 43 |
44 protected: | |
45 // media::VideoCapture::EventHandler implementation. | 44 // media::VideoCapture::EventHandler implementation. |
46 // These functions are called on the IO thread (same as where | 45 // These functions are called from a thread owned by |vc_manager_|. |
47 // |capture_engine_| runs). | |
48 virtual void OnStarted(media::VideoCapture* capture) OVERRIDE; | 46 virtual void OnStarted(media::VideoCapture* capture) OVERRIDE; |
49 virtual void OnStopped(media::VideoCapture* capture) OVERRIDE; | 47 virtual void OnStopped(media::VideoCapture* capture) OVERRIDE; |
50 virtual void OnPaused(media::VideoCapture* capture) OVERRIDE; | 48 virtual void OnPaused(media::VideoCapture* capture) OVERRIDE; |
51 virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE; | 49 virtual void OnError(media::VideoCapture* capture, int error_code) OVERRIDE; |
52 virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE; | 50 virtual void OnRemoved(media::VideoCapture* capture) OVERRIDE; |
53 virtual void OnFrameReady( | 51 virtual void OnFrameReady( |
54 media::VideoCapture* capture, | 52 media::VideoCapture* capture, |
55 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE; | 53 const scoped_refptr<media::VideoFrame>& frame) OVERRIDE; |
56 | 54 |
57 private: | 55 private: |
58 friend class base::RefCountedThreadSafe<RtcVideoCaptureDelegate>; | 56 friend class base::RefCountedThreadSafe<RtcVideoCaptureDelegate>; |
59 | 57 |
60 virtual ~RtcVideoCaptureDelegate(); | 58 virtual ~RtcVideoCaptureDelegate(); |
61 | 59 |
62 void OnFrameReadyOnCaptureThread( | 60 void OnFrameReadyOnCaptureThread( |
63 media::VideoCapture* capture, | 61 media::VideoCapture* capture, |
64 const scoped_refptr<media::VideoFrame>& frame); | 62 const scoped_refptr<media::VideoFrame>& frame); |
65 void OnErrorOnCaptureThread(media::VideoCapture* capture); | 63 void OnErrorOnCaptureThread(media::VideoCapture* capture); |
66 void OnRemovedOnCaptureThread(media::VideoCapture* capture); | 64 void OnRemovedOnCaptureThread(media::VideoCapture* capture); |
67 | 65 |
68 // The id identifies which video capture device is used for this video | 66 // The id identifies which video capture device is used for this video |
69 // capture session. | 67 // capture session. |
70 media::VideoCaptureSessionId session_id_; | 68 media::VideoCaptureSessionId session_id_; |
71 scoped_ptr<VideoCaptureHandle> capture_engine_; | 69 // The video capture manager handles open/close of video capture devices. |
| 70 scoped_refptr<VideoCaptureImplManager> vc_manager_; |
| 71 media::VideoCapture* capture_engine_; |
72 | 72 |
73 // Accessed on the thread where StartCapture is called. | 73 // Accessed on the thread where StartCapture is called. |
74 bool got_first_frame_; | 74 bool got_first_frame_; |
75 bool error_occured_; | 75 bool error_occured_; |
76 | 76 |
77 // |captured_callback_| is provided to this class in StartCapture and must be | 77 // |captured_callback_| is provided to this class in StartCapture and must be |
78 // valid until StopCapture is called. | 78 // valid until StopCapture is called. |
79 FrameCapturedCallback captured_callback_; | 79 FrameCapturedCallback captured_callback_; |
80 // |state_callback_| is provided to this class in StartCapture and must be | 80 // |state_callback_| is provided to this class in StartCapture and must be |
81 // valid until StopCapture is called. | 81 // valid until StopCapture is called. |
82 StateChangeCallback state_callback_; | 82 StateChangeCallback state_callback_; |
83 // Message loop of the caller of StartCapture. | 83 // Message loop of the caller of StartCapture. |
84 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 84 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
85 }; | 85 }; |
86 | 86 |
87 } // namespace content | 87 } // namespace content |
88 | 88 |
89 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ | 89 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_CAPTURE_DELEGATE_H_ |
OLD | NEW |