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