1// Copyright 2014 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#ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_H_ 6#define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_H_ 7 8#include "base/threading/thread_checker.h" 9#include "media/video/capture/video_capture_device.h" 10 11namespace media { 12 13// VideoCaptureDeviceFactory is the base class for creation of video capture 14// devices in the different platforms. VCDFs are created by MediaStreamManager 15// on IO thread and plugged into VideoCaptureManager, who owns and operates them 16// in Device Thread (a.k.a. Audio Thread). 17class MEDIA_EXPORT VideoCaptureDeviceFactory { 18 public: 19 static scoped_ptr<VideoCaptureDeviceFactory> CreateFactory( 20 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 21 22 VideoCaptureDeviceFactory(); 23 virtual ~VideoCaptureDeviceFactory(); 24 25 // Creates a VideoCaptureDevice object. Returns NULL if something goes wrong. 26 virtual scoped_ptr<VideoCaptureDevice> Create( 27 const VideoCaptureDevice::Name& device_name) = 0; 28 29 // Asynchronous version of GetDeviceNames calling back to |callback|. 30 virtual void EnumerateDeviceNames(const base::Callback< 31 void(scoped_ptr<media::VideoCaptureDevice::Names>)>& callback); 32 33 // Gets the supported formats of a particular device attached to the system. 34 // This method should be called before allocating or starting a device. In 35 // case format enumeration is not supported, or there was a problem, the 36 // formats array will be empty. 37 virtual void GetDeviceSupportedFormats( 38 const VideoCaptureDevice::Name& device, 39 VideoCaptureFormats* supported_formats) = 0; 40 41 protected: 42 // Gets the names of all video capture devices connected to this computer. 43 // Used by the default implementation of EnumerateDeviceNames(). 44 virtual void GetDeviceNames(VideoCaptureDevice::Names* device_names) = 0; 45 46 base::ThreadChecker thread_checker_; 47 48 private: 49 DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceFactory); 50}; 51 52} // namespace media 53 54#endif // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_H_ 55