| Index: content/browser/media_stream/video_capture_manager.h
|
| ===================================================================
|
| --- content/browser/media_stream/video_capture_manager.h (revision 0)
|
| +++ content/browser/media_stream/video_capture_manager.h (revision 0)
|
| @@ -0,0 +1,125 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// 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.
|
| +
|
| +#ifndef CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_
|
| +#define CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_
|
| +
|
| +#include <map>
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "base/threading/thread.h"
|
| +#include "content/browser/media_stream/media_stream_provider.h"
|
| +#include "media/video/capture/video_capture_device.h"
|
| +#include "media/video/capture/video_capture_types.h"
|
| +
|
| +namespace media_stream {
|
| +
|
| +// VideoCaptureManager opens/closes and start/stops video capture devices.
|
| +class VideoCaptureManager : public MediaStreamProvider {
|
| + public:
|
| + // Calling |Start| of this id will open the first device, even though open has
|
| + // not been called. This is used to be able to use video capture devices
|
| + // before MediaStream is implemented in Chrome and WebKit.
|
| + enum { kStartOpenSessionId = 1 };
|
| +
|
| + // Called to get a pointer to the singleton
|
| + static VideoCaptureManager* Get();
|
| +
|
| + // Implements MediaStreamProvider.
|
| + virtual bool Register(MediaStreamProviderListener* listener);
|
| +
|
| + virtual void Unregister();
|
| +
|
| + virtual void EnumerateDevices();
|
| +
|
| + virtual MediaCaptureSessionId Open(const MediaCaptureDeviceInfo& device);
|
| +
|
| + virtual void Close(MediaCaptureSessionId capture_session_id);
|
| +
|
| + // Functions used to start and stop media flow.
|
| + // Start allocates the device and no other application can use the device
|
| + // before Stop is called. Captured video frames will be delivered to
|
| + // video_capture_receiver.
|
| + void Start(const media::VideoCaptureParams& capture_params,
|
| + media::VideoCaptureDevice::EventHandler* video_capture_receiver);
|
| +
|
| + // Stops capture device referenced by |capture_session_id|. No more frames
|
| + // will be delivered to the frame receiver, and |stopped_task| will be called.
|
| + void Stop(const media::VideoCaptureSessionId capture_session_id,
|
| + Task* stopped_task);
|
| +
|
| + virtual ~VideoCaptureManager();
|
| +
|
| + // Used by unit test to make sure a fake device is used instead of a real
|
| + // video capture device. Due to timing requirements, the function must be
|
| + // called before EnumerateDevices and Open.
|
| + void UseFakeDevice();
|
| + MessageLoop* GetMessageLoop();
|
| +
|
| + private:
|
| + friend struct base::DefaultLazyInstanceTraits<VideoCaptureManager>;
|
| +
|
| + VideoCaptureManager();
|
| +
|
| + // Called by the public functions, executed on vc_device_thread_.
|
| + void OnEnumerateDevices();
|
| + void OnOpen(MediaCaptureSessionId capture_session_id,
|
| + const MediaCaptureDeviceInfo device);
|
| + void OnClose(MediaCaptureSessionId capture_session_id);
|
| + void OnStart(const media::VideoCaptureParams capture_params,
|
| + media::VideoCaptureDevice::EventHandler* video_capture_receiver);
|
| + void OnStop(const media::VideoCaptureSessionId capture_session_id,
|
| + Task* stopped_task);
|
| +
|
| +
|
| + // Executed on Browser::IO thread to call Listener.
|
| + void OnOpened(MediaCaptureSessionId capture_session_id);
|
| + void OnClosed(MediaCaptureSessionId capture_session_id);
|
| + void OnDevicesEnumerated(const MediaCaptureDevices& devices);
|
| + void OnError(MediaCaptureSessionId capture_session_id,
|
| + MediaStreamProviderError error);
|
| +
|
| + // Executed on vc_device_thread_ to make sure Listener is called from
|
| + // Browser::IO thread.
|
| + void PostOnOpened(MediaCaptureSessionId capture_session_id);
|
| + void PostOnClosed(MediaCaptureSessionId capture_session_id);
|
| + void PostOnDevicesEnumerated(MediaCaptureDevices devices);
|
| + void PostOnError(MediaCaptureSessionId capture_session_id,
|
| + MediaStreamProviderError error);
|
| +
|
| + // Helpers
|
| + void GetAvailableDevices(media::VideoCaptureDevice::Names* device_names);
|
| + bool DeviceOpened(const media::VideoCaptureDevice::Name& device_name);
|
| + bool DeviceOpened(const MediaCaptureDeviceInfo& device_info);
|
| + bool IsOnCaptureDeviceThread() const;
|
| +
|
| + // Thread for all calls to VideoCaptureDevice
|
| + base::Thread vc_device_thread_;
|
| +
|
| + // Only accessed on Browser::IO thread
|
| + MediaStreamProviderListener* listener_;
|
| + MediaCaptureSessionId new_capture_session_id_;
|
| +
|
| + // Only accessed from vc_device_thread_
|
| + // TODO(mflodman) Change map key type when changing typedef for
|
| + // MediaCaptureSessionId.
|
| + typedef std::map<int, media::VideoCaptureDevice*> VideoCaptureDevices;
|
| + VideoCaptureDevices devices_;
|
| +
|
| + // Set to true if using fake devices for testing, false by default.
|
| + bool use_fake_device_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(VideoCaptureManager);
|
| +};
|
| +
|
| +} // namespace media_stream
|
| +
|
| +DISABLE_RUNNABLE_METHOD_REFCOUNT(media_stream::VideoCaptureManager);
|
| +
|
| +#endif // CONTENT_BROWSER_MEDIA_STREAM_VIDEO_CAPTURE_MANAGER_H_
|
|
|