Index: content/browser/renderer_host/media/video_capture_manager.h |
=================================================================== |
--- content/browser/renderer_host/media/video_capture_manager.h (revision 107671) |
+++ 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,21 @@ |
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); |
+ |
private: |
+ typedef std::list<VideoCaptureControllerEventHandler*> Handlers; |
+ struct Controller; |
+ |
// Called by the public functions, executed on vc_device_thread_. |
void OnEnumerateDevices(); |
void OnOpen(int capture_session_id, const StreamDeviceInfo& device); |
@@ -75,6 +94,13 @@ |
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); |
// Executed on Browser::IO thread to call Listener. |
void OnOpened(int capture_session_id); |
@@ -94,6 +120,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 +138,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); |
}; |