Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // VideoCaptureManager is used to open/close, start/stop as well as enumerate | |
| 6 // available video capture devices. All functions are expected to be called from | |
| 7 // the Browser::IO thread. VideoCaptureManager will open OS dependent instances | |
| 8 // of VideoCaptureDevice. A device can only be opened once. | |
| 9 | |
| 10 #ifndef CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_ | |
| 11 #define CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_ | |
| 12 #pragma once | |
|
wjia(left Chromium)
2011/05/06 00:11:31
pragma is not needed.
mflodman1
2011/05/06 11:52:38
Done.
| |
| 13 | |
| 14 // TODO(mflodman) Use device type instead of int! | |
| 15 #include <map> | |
| 16 | |
| 17 #include "base/lazy_instance.h" | |
| 18 #include "base/threading/thread.h" | |
| 19 #include "content/browser/media_stream/media_stream_provider.h" | |
| 20 #include "media/video/capture/video_capture_types.h" | |
| 21 #include "media/video/capture/video_capture_device.h" | |
|
mflodman1
2011/05/05 11:11:22
Will change include order or _types.h and device.h
mflodman1
2011/05/06 11:52:38
Done.
| |
| 22 | |
| 23 namespace media_stream { | |
| 24 | |
| 25 class VideoCaptureManager | |
| 26 : public MediaStreamProvider { | |
| 27 public: | |
| 28 // Calling Start of this id will open the first device, even though open has | |
| 29 // not been called. Temporary(?) before MediaStreamManager is submitted. | |
|
wjia(left Chromium)
2011/05/06 00:11:31
Will this enum stay even after MediaStreamManager
mflodman1
2011/05/06 11:52:38
Comment updated, removed last part.
I don't know.
| |
| 30 enum { kStartOpenSessionId = 0 }; | |
| 31 | |
| 32 // Called to get a pointer to the singleton | |
| 33 static VideoCaptureManager* Get(); | |
| 34 | |
| 35 // Implements MediaStreamProvider: | |
| 36 // Register, Unregister, Open, Close, EnumerateDevices | |
|
wjia(left Chromium)
2011/05/06 00:11:31
no need to have comments for each function. These
mflodman1
2011/05/06 11:52:38
Done.
| |
| 37 // Registers a listener to get results from Open, Close and EnumerateDevices. | |
| 38 virtual int Register(MediaStreamType service_type, | |
|
wjia(left Chromium)
2011/05/06 00:11:31
what's the meaning of returned value? If there are
mflodman1
2011/05/06 11:52:38
Done.
| |
| 39 MediaStreamProviderListener* listener); | |
| 40 virtual void Unregister(MediaStreamType stream_type, | |
| 41 MediaStreamProviderListener* listener); | |
| 42 | |
| 43 // Enumerates existing video capture devices and calls the registered | |
| 44 // listener. | |
| 45 virtual void EnumerateDevices(MediaStreamType stream_type); | |
| 46 | |
| 47 // Opens the specified device. The device is not started and it is still | |
| 48 // possible for other applications to open the device before the device is | |
| 49 // started. | |
| 50 virtual MediaCaptureSessionId Open(MediaStreamType stream_type, | |
| 51 const MediaCaptureDeviceInfo& device); | |
| 52 virtual void Close(MediaStreamType stream_type, | |
| 53 MediaCaptureSessionId capture_session_id); | |
|
wjia(left Chromium)
2011/05/06 00:11:31
How many modules will call Open/Close? If there ar
mflodman1
2011/05/06 11:52:38
Only one module will call Open/Close, only one lis
| |
| 54 | |
| 55 // Functions used to start and stop media flow. | |
| 56 // Start allocates the device and no other application can use the device | |
| 57 // before Stop is called. | |
| 58 void Start(const media::VideoCaptureParams& capture_params, | |
| 59 media::VideoCaptureDevice::EventHandler* video_capture_receiver); | |
| 60 | |
| 61 // 'stopped_task' will be called when a device has been stopped and no more | |
|
wjia(left Chromium)
2011/05/06 00:11:31
would it good to rephrase this to:
Stop device cap
mflodman1
2011/05/06 11:52:38
Comment updated.
| |
| 62 // frames will be delivered to the frame receiver. | |
| 63 void Stop(const media::VideoCaptureSessionId capture_session_id, | |
| 64 Task* stopped_task); | |
| 65 | |
| 66 virtual ~VideoCaptureManager(); | |
| 67 | |
| 68 // Used for unit test to make sure a fake device is used instead of a real | |
| 69 // video capture device, due to time requirements. | |
| 70 static void CreateTestManager(); | |
| 71 MessageLoop* GetMessageLoop(); | |
| 72 | |
| 73 protected: | |
| 74 // Used for testing to mock platform dependent device code. | |
| 75 void UseFakeDevice(); | |
| 76 static bool use_fake_device_; | |
| 77 | |
| 78 private: | |
| 79 friend struct base::DefaultLazyInstanceTraits<VideoCaptureManager>; | |
| 80 | |
| 81 VideoCaptureManager(); | |
| 82 | |
| 83 // Called by the public functions, executed on vc_device_thread_. | |
| 84 void OnEnumerateDevices(); | |
| 85 void OnOpen(MediaCaptureSessionId capture_session_id, | |
| 86 const MediaCaptureDeviceInfo device); | |
| 87 void OnClose(MediaCaptureSessionId capture_session_id); | |
| 88 void OnStart(const media::VideoCaptureParams capture_params, | |
| 89 media::VideoCaptureDevice::EventHandler* video_capture_receiver); | |
| 90 void OnStop(const media::VideoCaptureSessionId capture_session_id, | |
| 91 Task* stopped_task); | |
| 92 | |
| 93 | |
| 94 // Executed on Browser::IO thread to call Listener. | |
| 95 void OnOpened(MediaCaptureSessionId capture_session_id); | |
| 96 void OnClosed(MediaCaptureSessionId capture_session_id); | |
| 97 void OnDevicesEnumerated(const MediaCaptureDevices& devices); | |
| 98 void OnError(MediaCaptureSessionId capture_session_id, | |
| 99 MediaStreamProviderError error); | |
| 100 | |
| 101 // Executed on vc_device_thread_ to make sure Listener is called from | |
| 102 // Browser::IO thread. | |
| 103 void PostOnOpened(MediaCaptureSessionId capture_session_id); | |
| 104 void PostOnClosed(MediaCaptureSessionId capture_session_id); | |
| 105 void PostOnDevicesEnumerated( | |
| 106 const MediaCaptureDevices& devices); | |
| 107 void PostOnError(MediaCaptureSessionId capture_session_id, | |
| 108 MediaStreamProviderError error); | |
| 109 | |
| 110 // Called on Browser::IO thread, forwarders to the singleton methods. | |
| 111 // Required to avoid the ownership of the manager object to be managed by both | |
| 112 // RefCountedThreadSafe and LazyInstance. | |
| 113 static void OnOpenedProxy(MediaCaptureSessionId capture_session_id); | |
| 114 static void OnClosedProxy(MediaCaptureSessionId capture_session_id); | |
| 115 static void OnDevicesEnumeratedProxy(const MediaCaptureDevices devices); | |
| 116 static void OnErrorProxy(MediaCaptureSessionId capture_session_id, | |
| 117 MediaStreamProviderError error); | |
| 118 | |
| 119 // Helpers | |
| 120 void GetAvailableDevices(media::VideoCaptureDevice::Names* device_names); | |
| 121 bool DeviceOpened(const media::VideoCaptureDevice::Name& device_name); | |
| 122 bool IsOnCaptureDeviceThread() const; | |
| 123 | |
| 124 // Thread for all calls to VideoCaptureDevice | |
| 125 base::Thread vc_device_thread_; | |
| 126 | |
| 127 // Only accessed on IO thread | |
| 128 MediaStreamProviderListener* listener_; | |
| 129 MediaCaptureSessionId new_capture_session_id_; | |
| 130 | |
| 131 // Only accessed from vc_device_thread_ | |
| 132 typedef std::map<int, media::VideoCaptureDevice*> VideoCaptureDevices; | |
| 133 VideoCaptureDevices devices_; | |
| 134 | |
| 135 DISALLOW_COPY_AND_ASSIGN(VideoCaptureManager); | |
| 136 }; | |
| 137 | |
| 138 } // namespace media_stream | |
| 139 | |
| 140 DISABLE_RUNNABLE_METHOD_REFCOUNT(media_stream::VideoCaptureManager); | |
| 141 | |
| 142 #endif // CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_ | |
|
mflodman1
2011/05/05 11:11:22
Will add newline in next upload.
mflodman1
2011/05/06 11:52:38
Done.
| |
| OLD | NEW |