Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: content/browser/renderer_host/media/video_capture_manager.h

Issue 8304017: enable video capture to support sharing across multiple renderer processes (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698