diff --git a/third_party_mods/libjingle/libjingle.gyp b/third_party_mods/libjingle/libjingle.gyp index 4088890670..abcc15913d 100644 --- a/third_party_mods/libjingle/libjingle.gyp +++ b/third_party_mods/libjingle/libjingle.gyp @@ -112,6 +112,7 @@ ['inside_chromium_build==1', { 'include_dirs': [ '<(overrides)', + '<(libjingle_mods)/source', '<(libjingle_orig)/source', '../..', # the third_party folder for webrtc includes '../../third_party/expat/files', @@ -119,6 +120,7 @@ 'direct_dependent_settings': { 'include_dirs': [ '<(overrides)', + '<(libjingle_mods)/source', '<(libjingle_orig)/source', '../../third_party/expat/files' ], @@ -131,6 +133,7 @@ 'include_dirs': [ # the third_party folder for webrtc/ includes (non-chromium). '../../src', + '<(libjingle_mods)/source', '<(libjingle_orig)/source', '../../third_party/expat/files', ], @@ -338,19 +341,6 @@ '<(libjingle_orig)/source/talk/base/urlencode.h', '<(libjingle_orig)/source/talk/base/worker.cc', '<(libjingle_orig)/source/talk/base/worker.h', - '<(libjingle_orig)/source/talk/sound/automaticallychosensoundsystem.h', - '<(libjingle_orig)/source/talk/sound/platformsoundsystem.cc', - '<(libjingle_orig)/source/talk/sound/platformsoundsystem.h', - '<(libjingle_orig)/source/talk/sound/platformsoundsystemfactory.cc', - '<(libjingle_orig)/source/talk/sound/platformsoundsystemfactory.h', - '<(libjingle_orig)/source/talk/sound/sounddevicelocator.h', - '<(libjingle_orig)/source/talk/sound/soundinputstreaminterface.h', - '<(libjingle_orig)/source/talk/sound/soundoutputstreaminterface.h', - '<(libjingle_orig)/source/talk/sound/soundsystemfactory.h', - '<(libjingle_orig)/source/talk/sound/soundsysteminterface.cc', - '<(libjingle_orig)/source/talk/sound/soundsysteminterface.h', - '<(libjingle_orig)/source/talk/sound/soundsystemproxy.cc', - '<(libjingle_orig)/source/talk/sound/soundsystemproxy.h', '<(libjingle_orig)/source/talk/xmllite/xmlbuilder.cc', '<(libjingle_orig)/source/talk/xmllite/xmlbuilder.h', '<(libjingle_orig)/source/talk/xmllite/xmlconstants.cc', @@ -392,6 +382,39 @@ '<(libjingle_orig)/source/talk/xmpp/xmpptask.h', ], 'conditions': [ + ['inside_chromium_build==0', { + 'sources': [ + '<(libjingle_orig)/source/talk/sound/automaticallychosensoundsystem.h', + '<(libjingle_orig)/source/talk/sound/platformsoundsystem.cc', + '<(libjingle_orig)/source/talk/sound/platformsoundsystem.h', + '<(libjingle_orig)/source/talk/sound/platformsoundsystemfactory.cc', + '<(libjingle_orig)/source/talk/sound/platformsoundsystemfactory.h', + '<(libjingle_orig)/source/talk/sound/sounddevicelocator.h', + '<(libjingle_orig)/source/talk/sound/soundinputstreaminterface.h', + '<(libjingle_orig)/source/talk/sound/soundoutputstreaminterface.h', + '<(libjingle_orig)/source/talk/sound/soundsystemfactory.h', + '<(libjingle_orig)/source/talk/sound/soundsysteminterface.cc', + '<(libjingle_orig)/source/talk/sound/soundsysteminterface.h', + '<(libjingle_orig)/source/talk/sound/soundsystemproxy.cc', + '<(libjingle_orig)/source/talk/sound/soundsystemproxy.h', + ], + 'conditions' : [ + ['OS=="linux"', { + 'sources': [ + '<(libjingle_orig)/source/talk/sound/alsasoundsystem.cc', + '<(libjingle_orig)/source/talk/sound/alsasoundsystem.h', + '<(libjingle_orig)/source/talk/sound/alsasymboltable.cc', + '<(libjingle_orig)/source/talk/sound/alsasymboltable.h', + '<(libjingle_orig)/source/talk/sound/linuxsoundsystem.cc', + '<(libjingle_orig)/source/talk/sound/linuxsoundsystem.h', + '<(libjingle_orig)/source/talk/sound/pulseaudiosoundsystem.cc', + '<(libjingle_orig)/source/talk/sound/pulseaudiosoundsystem.h', + '<(libjingle_orig)/source/talk/sound/pulseaudiosymboltable.cc', + '<(libjingle_orig)/source/talk/sound/pulseaudiosymboltable.h', + ], + }], + ], + }], ['OS=="win"', { 'sources': [ '<(overrides)/talk/base/win32socketinit.cc', @@ -424,16 +447,6 @@ 'sources': [ '<(libjingle_orig)/source/talk/base/linux.cc', '<(libjingle_orig)/source/talk/base/linux.h', - '<(libjingle_orig)/source/talk/sound/alsasoundsystem.cc', - '<(libjingle_orig)/source/talk/sound/alsasoundsystem.h', - '<(libjingle_orig)/source/talk/sound/alsasymboltable.cc', - '<(libjingle_orig)/source/talk/sound/alsasymboltable.h', - '<(libjingle_orig)/source/talk/sound/linuxsoundsystem.cc', - '<(libjingle_orig)/source/talk/sound/linuxsoundsystem.h', - '<(libjingle_orig)/source/talk/sound/pulseaudiosoundsystem.cc', - '<(libjingle_orig)/source/talk/sound/pulseaudiosoundsystem.h', - '<(libjingle_orig)/source/talk/sound/pulseaudiosymboltable.cc', - '<(libjingle_orig)/source/talk/sound/pulseaudiosymboltable.h', ], }], ['OS=="mac"', { @@ -527,7 +540,7 @@ '<(libjingle_orig)/source/talk/session/phone/currentspeakermonitor.cc', '<(libjingle_orig)/source/talk/session/phone/currentspeakermonitor.h', '<(libjingle_mods)/source/talk/session/phone/devicemanager.cc', - '<(libjingle_orig)/source/talk/session/phone/devicemanager.h', + '<(libjingle_mods)/source/talk/session/phone/devicemanager.h', '<(libjingle_orig)/source/talk/session/phone/filemediaengine.cc', '<(libjingle_orig)/source/talk/session/phone/filemediaengine.h', '<(libjingle_orig)/source/talk/session/phone/mediachannel.h', diff --git a/third_party_mods/libjingle/source/talk/session/phone/devicemanager.cc b/third_party_mods/libjingle/source/talk/session/phone/devicemanager.cc index 36a62c96ce..628f0f7d13 100644 --- a/third_party_mods/libjingle/source/talk/session/phone/devicemanager.cc +++ b/third_party_mods/libjingle/source/talk/session/phone/devicemanager.cc @@ -53,11 +53,13 @@ #include "talk/base/stream.h" #include "talk/session/phone/libudevsymboltable.h" #include "talk/session/phone/v4llookup.h" +#if defined(LINUX_SOUND_USED) #include "talk/sound/platformsoundsystem.h" #include "talk/sound/platformsoundsystemfactory.h" #include "talk/sound/sounddevicelocator.h" #include "talk/sound/soundsysteminterface.h" #endif +#endif #include "talk/base/logging.h" #include "talk/base/stringutils.h" @@ -154,7 +156,7 @@ DeviceManager::DeviceManager() need_couninitialize_(false), #endif watcher_(new DeviceWatcher(this)) -#ifdef LINUX +#ifdef LINUX_SOUND_USED , sound_system_(new PlatformSoundSystemFactory()) #endif { @@ -331,7 +333,7 @@ bool DeviceManager::GetAudioDevicesByPlatform(bool input, std::vector* devs) { devs->clear(); -#if defined(LINUX) +#if defined(LINUX_SOUND_USED) if (!sound_system_.get()) { return false; } diff --git a/third_party_mods/libjingle/source/talk/session/phone/devicemanager.h b/third_party_mods/libjingle/source/talk/session/phone/devicemanager.h new file mode 100644 index 0000000000..d2d7db91f1 --- /dev/null +++ b/third_party_mods/libjingle/source/talk/session/phone/devicemanager.h @@ -0,0 +1,138 @@ +/* + * libjingle + * Copyright 2004--2008, Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TALK_SESSION_PHONE_DEVICEMANAGER_H_ +#define TALK_SESSION_PHONE_DEVICEMANAGER_H_ + +#include +#include + +#include "talk/base/sigslot.h" +#include "talk/base/stringencode.h" +#ifdef LINUX_SOUND_USED +#include "talk/sound/soundsystemfactory.h" +#endif + +namespace cricket { + +class DeviceWatcher; + +// Used to represent an audio or video capture or render device. +struct Device { + Device() {} + Device(const std::string& first, int second) + : name(first), + id(talk_base::ToString(second)) { + } + Device(const std::string& first, const std::string& second) + : name(first), id(second) {} + + std::string name; + std::string id; +}; + +// DeviceManagerInterface - interface to manage the audio and +// video devices on the system. +class DeviceManagerInterface { + public: + virtual ~DeviceManagerInterface() { } + + // Initialization + virtual bool Init() = 0; + virtual void Terminate() = 0; + + // Capabilities + virtual int GetCapabilities() = 0; + + // Device enumeration + virtual bool GetAudioInputDevices(std::vector* devices) = 0; + virtual bool GetAudioOutputDevices(std::vector* devices) = 0; + + virtual bool GetAudioInputDevice(const std::string& name, Device* out) = 0; + virtual bool GetAudioOutputDevice(const std::string& name, Device* out) = 0; + + virtual bool GetVideoCaptureDevices(std::vector* devs) = 0; + virtual bool GetVideoCaptureDevice(const std::string& name, Device* out) = 0; + + sigslot::signal0<> SignalDevicesChange; + + static const char kDefaultDeviceName[]; +}; + +class DeviceManagerFactory { + public: + static DeviceManagerInterface* Create(); + private: + DeviceManagerFactory(); +}; + +class DeviceManager : public DeviceManagerInterface { + public: + DeviceManager(); + virtual ~DeviceManager(); + + // Initialization + virtual bool Init(); + virtual void Terminate(); + + // Capabilities + virtual int GetCapabilities(); + + // Device enumeration + virtual bool GetAudioInputDevices(std::vector* devices); + virtual bool GetAudioOutputDevices(std::vector* devices); + + virtual bool GetAudioInputDevice(const std::string& name, Device* out); + virtual bool GetAudioOutputDevice(const std::string& name, Device* out); + + virtual bool GetVideoCaptureDevices(std::vector* devs); + virtual bool GetVideoCaptureDevice(const std::string& name, Device* out); + + bool initialized() const { return initialized_; } + void OnDevicesChange() { SignalDevicesChange(); } + + protected: + virtual bool GetAudioDevice(bool is_input, const std::string& name, + Device* out); + virtual bool GetDefaultVideoCaptureDevice(Device* device); + + private: + bool GetAudioDevicesByPlatform(bool input, std::vector* devs); + + bool initialized_; +#ifdef WIN32 + bool need_couninitialize_; +#endif + DeviceWatcher* watcher_; +#ifdef LINUX_SOUND_USED + SoundSystemHandle sound_system_; +#endif +}; + +} // namespace cricket + +#endif // TALK_SESSION_PHONE_DEVICEMANAGER_H_