15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2008 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_FAKEDEVICEMANAGER_H_ 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#define TALK_MEDIA_DEVICES_FAKEDEVICEMANAGER_H_ 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector> 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/window.h" 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/windowpicker.h" 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/fakevideocapturer.h" 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/mediacommon.h" 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/devices/devicemanager.h" 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace cricket { 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass FakeDeviceManager : public DeviceManagerInterface { 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org FakeDeviceManager() {} 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool Init() { 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void Terminate() { 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual int GetCapabilities() { 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<Device> devices; 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int caps = VIDEO_RECV; 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!input_devices_.empty()) { 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org caps |= AUDIO_SEND; 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!output_devices_.empty()) { 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org caps |= AUDIO_RECV; 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!vidcap_devices_.empty()) { 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org caps |= VIDEO_SEND; 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return caps; 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetAudioInputDevices(std::vector<Device>* devs) { 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *devs = input_devices_; 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetAudioOutputDevices(std::vector<Device>* devs) { 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *devs = output_devices_; 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetAudioInputDevice(const std::string& name, Device* out) { 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return GetAudioDevice(true, name, out); 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetAudioOutputDevice(const std::string& name, Device* out) { 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return GetAudioDevice(false, name, out); 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetVideoCaptureDevices(std::vector<Device>* devs) { 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *devs = vidcap_devices_; 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void SetVideoCaptureDeviceMaxFormat(const std::string& usb_id, 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const VideoFormat& max_format) { 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org max_formats_[usb_id] = max_format; 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool IsMaxFormatForDevice(const std::string& usb_id, 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const VideoFormat& max_format) const { 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::map<std::string, VideoFormat>::const_iterator found = 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org max_formats_.find(usb_id); 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return (found != max_formats_.end()) ? 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org max_format == found->second : 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org false; 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void ClearVideoCaptureDeviceMaxFormat(const std::string& usb_id) { 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org max_formats_.erase(usb_id); 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual VideoCapturer* CreateVideoCapturer(const Device& device) const { 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return new FakeVideoCapturer(); 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetWindows( 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<talk_base::WindowDescription>* descriptions) { 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org descriptions->clear(); 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const uint32_t id = 1u; // Note that 0 is not a valid ID. 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const talk_base::WindowId window_id = 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::WindowId::Cast(id); 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string title = "FakeWindow"; 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::WindowDescription window_description(window_id, title); 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org descriptions->push_back(window_description); 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual VideoCapturer* CreateWindowCapturer(talk_base::WindowId window) { 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!window.IsValid()) { 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return new FakeVideoCapturer; 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetDesktops( 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<talk_base::DesktopDescription>* descriptions) { 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org descriptions->clear(); 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const int id = 0; 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const int valid_index = 0; 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const talk_base::DesktopId desktop_id = 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::DesktopId::Cast(id, valid_index); 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::string title = "FakeDesktop"; 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::DesktopDescription desktop_description(desktop_id, title); 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org descriptions->push_back(desktop_description); 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual VideoCapturer* CreateDesktopCapturer(talk_base::DesktopId desktop) { 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!desktop.IsValid()) { 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return new FakeVideoCapturer; 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetDefaultVideoCaptureDevice(Device* device) { 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (vidcap_devices_.empty()) { 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *device = vidcap_devices_[0]; 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifdef OSX 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool QtKitToSgDevice(const std::string& qtkit_name, Device* out) { 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org out->name = qtkit_name; 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org out->id = "sg:" + qtkit_name; 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetAudioInputDevices(const std::vector<std::string>& devices) { 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org input_devices_.clear(); 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t i = 0; i < devices.size(); ++i) { 155b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org input_devices_.push_back(Device(devices[i], 156b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org static_cast<int>(i))); 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalDevicesChange(); 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetAudioOutputDevices(const std::vector<std::string>& devices) { 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org output_devices_.clear(); 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t i = 0; i < devices.size(); ++i) { 163b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org output_devices_.push_back(Device(devices[i], 164b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org static_cast<int>(i))); 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalDevicesChange(); 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void SetVideoCaptureDevices(const std::vector<std::string>& devices) { 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org vidcap_devices_.clear(); 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t i = 0; i < devices.size(); ++i) { 171b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org vidcap_devices_.push_back(Device(devices[i], 172b30f5947ff2af0e3b77751bacec5dc7350c4dcd6sergeyu@chromium.org static_cast<int>(i))); 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org SignalDevicesChange(); 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetVideoCaptureDevice(const std::string& name, 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Device* out) { 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (vidcap_devices_.empty()) 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // If the name is empty, return the default device. 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (name.empty() || name == kDefaultDeviceName) { 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *out = vidcap_devices_[0]; 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return FindDeviceByName(vidcap_devices_, name, out); 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool GetAudioDevice(bool is_input, const std::string& name, 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Device* out) { 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // If the name is empty, return the default device. 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (name.empty() || name == kDefaultDeviceName) { 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *out = Device(name, -1); 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return FindDeviceByName((is_input ? input_devices_ : output_devices_), 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org name, out); 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org static bool FindDeviceByName(const std::vector<Device>& devices, 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string& name, 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Device* out) { 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (std::vector<Device>::const_iterator it = devices.begin(); 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org it != devices.end(); ++it) { 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (name == it->name) { 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *out = *it; 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<Device> input_devices_; 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<Device> output_devices_; 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<Device> vidcap_devices_; 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::map<std::string, VideoFormat> max_formats_; 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace cricket 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif // TALK_MEDIA_DEVICES_FAKEDEVICEMANAGER_H_ 223