Home | History | Annotate | Download | only in capture
      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 
     11 namespace 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).
     17 class 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