Chromium Code Reviews| Index: content/renderer/media/video_capture_impl.h |
| diff --git a/content/renderer/media/video_capture_impl.h b/content/renderer/media/video_capture_impl.h |
| index 2215cef4336456920329f98ab0c500decbee8f12..0550766def3e5e495b6067b509305a447d59844b 100644 |
| --- a/content/renderer/media/video_capture_impl.h |
| +++ b/content/renderer/media/video_capture_impl.h |
| @@ -16,16 +16,15 @@ |
| // The |capture_message_loop_proxy_| is the working thread of VideoCaptureImpl. |
| // All non-const members are accessed only on that working thread. |
| // |
| -// Implementation note: tasks are posted bound to Unretained(this) to both the |
| -// I/O and Capture threads and this is safe (even though the I/O thread is |
| -// scoped to the renderer process and the capture_message_loop_proxy_ thread is |
| -// scoped to the VideoCaptureImplManager) because VideoCaptureImplManager only |
| -// triggers deletion of its VideoCaptureImpl's by calling DeInit which detours |
| -// through the capture & I/O threads, so as long as nobody posts tasks after the |
| -// DeInit() call is made, it is guaranteed none of these Unretained posted tasks |
| -// will dangle after the delete goes through. The "as long as" is guaranteed by |
| -// clients of VideoCaptureImplManager not using devices after they've |
| -// RemoveDevice'd them. |
| +// Implementation note: tasks are posted bound to Unretained(this) to the I/O |
| +// thread and this is safe (even though the I/O thread is scoped to the renderer |
| +// process) because VideoCaptureImplManager only triggers deletion of its |
| +// VideoCaptureImpl's by calling DeInit which detours through the capture & I/O |
|
Jói
2013/12/27 13:34:35
This line references the capture thread, I think y
Alpha Left Google
2013/12/27 21:30:01
Done.
|
| +// threads, so as long as nobody posts tasks after the DeInit() call is made, it |
| +// is guaranteed none of these Unretained posted tasks will dangle after the |
| +// delete goes through. The "as long as" is guaranteed by clients of |
| +// VideoCaptureImplManager not using devices after they've released |
| +// VideoCaptureHandle, which is a wrapper of this object. |
| #ifndef CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ |
| #define CONTENT_RENDERER_MEDIA_VIDEO_CAPTURE_IMPL_H_ |
| @@ -49,6 +48,11 @@ namespace content { |
| class CONTENT_EXPORT VideoCaptureImpl |
| : public media::VideoCapture, public VideoCaptureMessageFilter::Delegate { |
| public: |
| + virtual ~VideoCaptureImpl(); |
| + |
| + // Stop/resume delivering video frames to clients, based on flag |suspend|. |
| + void SuspendCapture(bool suspend); |
| + |
| // media::VideoCapture interface. |
| virtual void StartCapture( |
| media::VideoCapture::EventHandler* handler, |
| @@ -57,20 +61,7 @@ class CONTENT_EXPORT VideoCaptureImpl |
| virtual bool CaptureStarted() OVERRIDE; |
| virtual int CaptureFrameRate() OVERRIDE; |
| - // VideoCaptureMessageFilter::Delegate interface. |
| - virtual void OnBufferCreated(base::SharedMemoryHandle handle, |
| - int length, |
| - int buffer_id) OVERRIDE; |
| - virtual void OnBufferDestroyed(int buffer_id) OVERRIDE; |
| - virtual void OnBufferReceived( |
| - int buffer_id, |
| - base::Time timestamp, |
| - const media::VideoCaptureFormat& format) OVERRIDE; |
| - virtual void OnStateChanged(VideoCaptureState state) OVERRIDE; |
| - virtual void OnDelegateAdded(int32 device_id) OVERRIDE; |
| - |
| - // Stop/resume delivering video frames to clients, based on flag |suspend|. |
| - virtual void SuspendCapture(bool suspend); |
| + media::VideoCaptureSessionId session_id() const { return session_id_; } |
| private: |
| friend class VideoCaptureImplManager; |
| @@ -82,38 +73,30 @@ class CONTENT_EXPORT VideoCaptureImpl |
| media::VideoCaptureParams> ClientInfo; |
| VideoCaptureImpl(media::VideoCaptureSessionId session_id, |
| - base::MessageLoopProxy* capture_message_loop_proxy, |
| VideoCaptureMessageFilter* filter); |
| - virtual ~VideoCaptureImpl(); |
| - void DoStartCaptureOnCaptureThread( |
| - media::VideoCapture::EventHandler* handler, |
| - const media::VideoCaptureParams& params); |
| - void DoStopCaptureOnCaptureThread(media::VideoCapture::EventHandler* handler); |
| - void DoBufferCreatedOnCaptureThread(base::SharedMemoryHandle handle, |
| - int length, |
| - int buffer_id); |
| - void DoBufferDestroyedOnCaptureThread(int buffer_id); |
| - void DoBufferReceivedOnCaptureThread( |
| + // VideoCaptureMessageFilter::Delegate interface. |
| + virtual void OnBufferCreated(base::SharedMemoryHandle handle, |
| + int length, |
| + int buffer_id) OVERRIDE; |
| + virtual void OnBufferDestroyed(int buffer_id) OVERRIDE; |
| + virtual void OnBufferReceived( |
| int buffer_id, |
| base::Time timestamp, |
| - const media::VideoCaptureFormat& format); |
| - void DoClientBufferFinishedOnCaptureThread( |
| + const media::VideoCaptureFormat& format) OVERRIDE; |
| + virtual void OnStateChanged(VideoCaptureState state) OVERRIDE; |
| + virtual void OnDelegateAdded(int32 device_id) OVERRIDE; |
| + |
| + // Sends a IPC message to browser all clients are done with the video frame. |
| + void OnClientBufferFinished( |
| int buffer_id, |
| const scoped_refptr<ClientBuffer>& buffer); |
| - void DoStateChangedOnCaptureThread(VideoCaptureState state); |
| - void DoDelegateAddedOnCaptureThread(int32 device_id); |
| - |
| - void DoSuspendCaptureOnCaptureThread(bool suspend); |
| void Init(); |
| void DeInit(base::Closure task); |
| - void DoDeInitOnCaptureThread(base::Closure task); |
| void StopDevice(); |
| void RestartCapture(); |
| void StartCaptureInternal(); |
| - void AddDelegateOnIOThread(); |
| - void RemoveDelegateOnIOThread(base::Closure task); |
| virtual void Send(IPC::Message* message); |
| // Helpers. |
| @@ -121,7 +104,6 @@ class CONTENT_EXPORT VideoCaptureImpl |
| ClientInfo* clients); |
| const scoped_refptr<VideoCaptureMessageFilter> message_filter_; |
| - const scoped_refptr<base::MessageLoopProxy> capture_message_loop_proxy_; |
| const scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; |
| int device_id_; |
| const int session_id_; |
| @@ -135,7 +117,7 @@ class CONTENT_EXPORT VideoCaptureImpl |
| ClientInfo clients_pending_on_restart_; |
| // Member params_ represents the video format requested by the |
| - // client to this class via DoStartCaptureOnCaptureThread. |
| + // client to this class via DoStartCaptureOnIOThread. |
| media::VideoCaptureParams params_; |
| // The device's video capture format sent from browser process side. |