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// Implementation of a VideoCaptureDeviceFactory class for Mac.
6
7#ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_MAC_H_
8#define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_MAC_H_
9
10#include "media/video/capture/video_capture_device_factory.h"
11
12namespace media {
13
14// Extension of VideoCaptureDeviceFactory to create and manipulate Mac devices.
15class MEDIA_EXPORT VideoCaptureDeviceFactoryMac :
16    public VideoCaptureDeviceFactory {
17 public:
18  static bool PlatformSupportsAVFoundation();
19
20  explicit VideoCaptureDeviceFactoryMac(
21      scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
22  virtual ~VideoCaptureDeviceFactoryMac();
23
24  virtual scoped_ptr<VideoCaptureDevice> Create(
25      const VideoCaptureDevice::Name& device_name) OVERRIDE;
26  virtual void GetDeviceNames(VideoCaptureDevice::Names* device_names) OVERRIDE;
27  virtual void EnumerateDeviceNames(const base::Callback<
28      void(scoped_ptr<media::VideoCaptureDevice::Names>)>& callback) OVERRIDE;
29  virtual void GetDeviceSupportedFormats(
30      const VideoCaptureDevice::Name& device,
31      VideoCaptureFormats* supported_formats) OVERRIDE;
32
33 private:
34  // Cache of |ui_task_runner| for enumerating devices there for QTKit.
35  scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
36
37  DISALLOW_COPY_AND_ASSIGN(VideoCaptureDeviceFactoryMac);
38};
39
40}  // namespace media
41
42#endif  // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_MAC_H_
43