15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/*
25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle
35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004 Google Inc.
45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without
65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met:
75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer.
105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     this list of conditions and the following disclaimer in the documentation
125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     and/or other materials provided with the distribution.
135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *  3. The name of the author may not be used to endorse or promote products
145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *     derived from this software without specific prior written permission.
155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *
165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */
275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifndef TALK_MEDIA_DEVICES_DEVICEMANAGER_H_
295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TALK_MEDIA_DEVICES_DEVICEMANAGER_H_
305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <map>
325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string>
335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector>
345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/scoped_ptr.h"
365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/sigslot.h"
375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/stringencode.h"
385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/window.h"
395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/videocommon.h"
405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace talk_base {
425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DesktopDescription;
445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass WindowDescription;
455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass WindowPicker;
465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}
485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace cricket {
495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VideoCapturer;
515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Used to represent an audio or video capture or render device.
535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstruct Device {
545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Device() {}
555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Device(const std::string& first, int second)
565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      : name(first),
575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org        id(talk_base::ToString(second)) {
585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  Device(const std::string& first, const std::string& second)
605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      : name(first), id(second) {}
615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::string name;
635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::string id;
645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass VideoCapturerFactory {
675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  VideoCapturerFactory() {}
695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual ~VideoCapturerFactory() {}
705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* Create(const Device& device) = 0;
725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// DeviceManagerInterface - interface to manage the audio and
755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// video devices on the system.
765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DeviceManagerInterface {
775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual ~DeviceManagerInterface() { }
795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Initialization
815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool Init() = 0;
825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void Terminate() = 0;
835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Capabilities
855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual int GetCapabilities() = 0;
865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Device enumeration
885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioInputDevices(std::vector<Device>* devices) = 0;
895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioOutputDevices(std::vector<Device>* devices) = 0;
905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioInputDevice(const std::string& name, Device* out) = 0;
925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioOutputDevice(const std::string& name, Device* out) = 0;
935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetVideoCaptureDevices(std::vector<Device>* devs) = 0;
955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetVideoCaptureDevice(const std::string& name, Device* out) = 0;
965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Caps the capture format according to max format for capturers created
985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // by CreateVideoCapturer(). See ConstrainSupportedFormats() in
995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // videocapturer.h for more detail.
1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Note that once a VideoCapturer has been created, calling this API will
1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // not affect it.
1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void SetVideoCaptureDeviceMaxFormat(
1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      const std::string& usb_id,
1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      const VideoFormat& max_format) = 0;
1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void ClearVideoCaptureDeviceMaxFormat(const std::string& usb_id) = 0;
1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Device creation
1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateVideoCapturer(const Device& device) const = 0;
1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetWindows(
1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      std::vector<talk_base::WindowDescription>* descriptions) = 0;
1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateWindowCapturer(talk_base::WindowId window) = 0;
1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetDesktops(
1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      std::vector<talk_base::DesktopDescription>* descriptions) = 0;
1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateDesktopCapturer(
1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      talk_base::DesktopId desktop) = 0;
1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  sigslot::signal0<> SignalDevicesChange;
1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  static const char kDefaultDeviceName[];
1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DeviceWatcher {
1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  explicit DeviceWatcher(DeviceManagerInterface* dm) {}
1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual ~DeviceWatcher() {}
1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool Start() { return true; }
1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void Stop() {}
1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DeviceManagerFactory {
1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  static DeviceManagerInterface* Create();
1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private:
1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  DeviceManagerFactory() {}
1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass DeviceManager : public DeviceManagerInterface {
1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public:
1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  DeviceManager();
1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual ~DeviceManager();
1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void set_device_video_capturer_factory(
1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      VideoCapturerFactory* device_video_capturer_factory) {
1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org    device_video_capturer_factory_.reset(device_video_capturer_factory);
1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  }
1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Initialization
1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool Init();
1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void Terminate();
1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Capabilities
1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual int GetCapabilities();
1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // Device enumeration
1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioInputDevices(std::vector<Device>* devices);
1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioOutputDevices(std::vector<Device>* devices);
1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioInputDevice(const std::string& name, Device* out);
1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioOutputDevice(const std::string& name, Device* out);
1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetVideoCaptureDevices(std::vector<Device>* devs);
1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetVideoCaptureDevice(const std::string& name, Device* out);
1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void SetVideoCaptureDeviceMaxFormat(const std::string& usb_id,
1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                                              const VideoFormat& max_format);
1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual void ClearVideoCaptureDeviceMaxFormat(const std::string& usb_id);
1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateVideoCapturer(const Device& device) const;
1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetWindows(
1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      std::vector<talk_base::WindowDescription>* descriptions);
1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateWindowCapturer(talk_base::WindowId window);
1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetDesktops(
1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      std::vector<talk_base::DesktopDescription>* descriptions);
1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual VideoCapturer* CreateDesktopCapturer(talk_base::DesktopId desktop);
1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // The exclusion_list MUST be a NULL terminated list.
1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  static bool FilterDevices(std::vector<Device>* devices,
1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      const char* const exclusion_list[]);
1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool initialized() const { return initialized_; }
1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org protected:
1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioDevices(bool input, std::vector<Device>* devs);
1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetAudioDevice(bool is_input, const std::string& name,
1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                              Device* out);
1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetDefaultVideoCaptureDevice(Device* device);
1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool IsInWhitelist(const std::string& key, VideoFormat* video_format) const;
1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  virtual bool GetMaxFormat(const Device& device,
1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org                            VideoFormat* video_format) const;
1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void set_initialized(bool initialized) { initialized_ = initialized; }
1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  void set_watcher(DeviceWatcher* watcher) { watcher_.reset(watcher); }
1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  DeviceWatcher* watcher() { return watcher_.get(); }
1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private:
2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  // The exclusion_list MUST be a NULL terminated list.
2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  static bool ShouldDeviceBeIgnored(const std::string& device_name,
2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org      const char* const exclusion_list[]);
2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  bool initialized_;
2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::scoped_ptr<VideoCapturerFactory> device_video_capturer_factory_;
2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  std::map<std::string, VideoFormat> max_formats_;
2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::scoped_ptr<DeviceWatcher> watcher_;
2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org  talk_base::scoped_ptr<talk_base::WindowPicker> window_picker_;
2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org};
2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}  // namespace cricket
2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org
2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif  // TALK_MEDIA_DEVICES_DEVICEMANAGER_H_
215