Chromium Code Reviews| Index: content/browser/renderer_host/media/video_capture_manager.h |
| =================================================================== |
| --- content/browser/renderer_host/media/video_capture_manager.h (revision 105502) |
| +++ content/browser/renderer_host/media/video_capture_manager.h (working copy) |
| @@ -2,14 +2,16 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -// VideoCaptureManager is used to open/close, start/stop as well as enumerate |
| -// available video capture devices. All functions are expected to be called from |
| -// the Browser::IO thread. VideoCaptureManager will open OS dependent instances |
| -// of VideoCaptureDevice. A device can only be opened once. |
| +// VideoCaptureManager is used to open/close, start/stop, enumerate available |
| +// video capture devices, and manage VideoCaptureController's. |
| +// All functions are expected to be called from Browser::IO thread. |
| +// VideoCaptureManager will open OS dependent instances of VideoCaptureDevice. |
| +// A device can only be opened once. |
| #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_MANAGER_H_ |
| #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_VIDEO_CAPTURE_MANAGER_H_ |
| +#include <list> |
| #include <map> |
| #include "base/threading/thread.h" |
| @@ -19,6 +21,9 @@ |
| #include "media/video/capture/video_capture_device.h" |
| #include "media/video/capture/video_capture_types.h" |
| +class VideoCaptureController; |
| +class VideoCaptureControllerEventHandler; |
| + |
| namespace media_stream { |
| // VideoCaptureManager opens/closes and start/stops video capture devices. |
| @@ -66,7 +71,33 @@ |
| void UseFakeDevice(); |
| MessageLoop* GetMessageLoop(); |
| + // Called by VideoCaptureHost to get a controller for |capture_params|. |
| + // The controller is returned via calling |added_cb|. |
| + void AddController( |
| + const media::VideoCaptureParams& capture_params, |
| + VideoCaptureControllerEventHandler* handler, |
| + base::Callback<void(VideoCaptureController*)> added_cb); |
| + // Called by VideoCaptureHost to remove the |controller|. |
| + void RemoveController( |
| + VideoCaptureController* controller, |
| + VideoCaptureControllerEventHandler* handler); |
| + |
| + // Called by |controller| to signal it's in use or not. |
| + void DeviceStatusFromController(VideoCaptureController* controller, |
| + bool in_use); |
| + |
| private: |
| + typedef std::list<VideoCaptureControllerEventHandler*> Handlers; |
| + struct Controller { |
|
scherkus (not reviewing)
2011/10/19 18:02:21
nit: this can be forward declared and the impl mov
wjia(left Chromium)
2011/10/21 00:56:13
Done.
|
| + Controller(VideoCaptureController* ctrller, |
| + VideoCaptureControllerEventHandler* handler); |
| + ~Controller(); |
| + |
| + scoped_refptr<VideoCaptureController> controller; |
| + bool ready_to_delete; |
| + Handlers handlers; |
| + }; |
| + |
| // Called by the public functions, executed on vc_device_thread_. |
| void OnEnumerateDevices(); |
| void OnOpen(int capture_session_id, const StreamDeviceInfo& device); |
| @@ -75,6 +106,16 @@ |
| media::VideoCaptureDevice::EventHandler* video_capture_receiver); |
| void OnStop(const media::VideoCaptureSessionId capture_session_id, |
| base::Closure stopped_cb); |
| + void DoAddControllerOnDeviceThread( |
| + const media::VideoCaptureParams capture_params, |
| + VideoCaptureControllerEventHandler* handler, |
| + base::Callback<void(VideoCaptureController*)> added_cb); |
| + void DoRemoveControllerOnDeviceThread( |
| + VideoCaptureController* controller, |
| + VideoCaptureControllerEventHandler* handler); |
| + void DoDeviceStatusFromControllerOnDeviceThread( |
| + VideoCaptureController* controller, |
| + bool in_use); |
| // Executed on Browser::IO thread to call Listener. |
| void OnOpened(int capture_session_id); |
| @@ -94,6 +135,7 @@ |
| bool DeviceOpened(const media::VideoCaptureDevice::Name& device_name); |
| bool DeviceOpened(const StreamDeviceInfo& device_info); |
| bool IsOnCaptureDeviceThread() const; |
| + media::VideoCaptureDevice* GetDeviceInternal(int capture_session_id); |
| // Thread for all calls to VideoCaptureDevice. |
| base::Thread vc_device_thread_; |
| @@ -111,6 +153,13 @@ |
| // Set to true if using fake devices for testing, false by default. |
| bool use_fake_device_; |
| + // Only accessed from vc_device_thread_. |
| + // VideoCaptureManager owns all VideoCaptureController's and is responsible |
| + // for deleting the instances when they are not used any longer. |
| + // VideoCaptureDevice is one-to-one mapped to VideoCaptureController. |
| + typedef std::map<media::VideoCaptureDevice*, Controller*> Controllers; |
| + Controllers controllers_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(VideoCaptureManager); |
| }; |