1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" 12bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_config.h" 13bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_impl.h" 14bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/ref_count.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <assert.h> 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_utility_win.h" 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_wave_win.h" 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_core_win.h" 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #endif 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_ANDROID) 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include <stdlib.h> 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_utility_android.h" 2827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org #include "webrtc/modules/audio_device/android/audio_device_template.h" 2927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org #include "webrtc/modules/audio_device/android/audio_record_jni.h" 3027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org #include "webrtc/modules/audio_device/android/audio_track_jni.h" 3127f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org #include "webrtc/modules/audio_device/android/opensles_input.h" 3227f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org #include "webrtc/modules/audio_device/android/opensles_output.h" 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_LINUX) 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_utility_linux.h" 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #if defined(LINUX_ALSA) 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_alsa_linux.h" 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #endif 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #if defined(LINUX_PULSE) 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_pulse_linux.h" 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #endif 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_IOS) 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_utility_ios.h" 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_ios.h" 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_MAC) 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_utility_mac.h" 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org #include "audio_device_mac.h" 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 483acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org 493acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org#if defined(WEBRTC_DUMMY_FILE_DEVICES) 503acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org#include "webrtc/modules/audio_device/dummy/file_audio_device_factory.h" 513acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org#endif 523acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org 53bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/dummy/audio_device_dummy.h" 54bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/dummy/audio_device_utility_dummy.h" 553acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org#include "webrtc/modules/audio_device/dummy/file_audio_device.h" 56bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/critical_section_wrapper.h" 57bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/system_wrappers/interface/trace.h" 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CHECK_INITIALIZED() \ 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ \ 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_initialized) { \ 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; \ 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; \ 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define CHECK_INITIALIZED_BOOL() \ 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ \ 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_initialized) { \ 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; \ 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; \ 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModule* CreateAudioDeviceModule( 7764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t id, AudioDeviceModule::AudioLayer audioLayer) { 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return AudioDeviceModuleImpl::Create(id, audioLayer); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Static methods 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// AudioDeviceModule::Create() 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgAudioDeviceModule* AudioDeviceModuleImpl::Create(const int32_t id, 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const AudioLayer audioLayer) 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the generic ref counted (platform independent) implementation. 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RefCountImpl<AudioDeviceModuleImpl>* audioDevice = 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org new RefCountImpl<AudioDeviceModuleImpl>(id, audioLayer); 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Ensure that the current platform is supported. 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->CheckPlatform() == -1) 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete audioDevice; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the platform-dependent implementation. 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->CreatePlatformSpecificObjects() == -1) 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete audioDevice; 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Ensure that the generic audio buffer can communicate with the 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // platform-specific parts. 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioDevice->AttachAudioBuffer() == -1) 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete audioDevice; 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WebRtcSpl_Init(); 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return audioDevice; 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Construction & Destruction 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// AudioDeviceModuleImpl - ctor 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgAudioDeviceModuleImpl::AudioDeviceModuleImpl(const int32_t id, const AudioLayer audioLayer) : 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _critSect(*CriticalSectionWrapper::CreateCriticalSection()), 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _critSectEventCb(*CriticalSectionWrapper::CreateCriticalSection()), 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _critSectAudioCb(*CriticalSectionWrapper::CreateCriticalSection()), 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver(NULL), 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDeviceUtility(NULL), 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice(NULL), 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _id(id), 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _platformAudioLayer(audioLayer), 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lastProcessTime(AudioDeviceUtility::GetTimeInMS()), 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _platformType(kPlatformNotSupported), 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _initialized(false), 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lastError(kAdmErrNone) 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "%s created", __FUNCTION__); 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// CheckPlatform 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::CheckPlatform() 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", __FUNCTION__); 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Ensure that the current platform is supported 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org PlatformType platform(kPlatformNotSupported); 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org platform = kPlatformWin32; 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is WIN32"); 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_ANDROID) 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org platform = kPlatformAndroid; 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is ANDROID"); 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_LINUX) 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org platform = kPlatformLinux; 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is LINUX"); 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_IOS) 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org platform = kPlatformIOS; 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is IOS"); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_MAC) 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org platform = kPlatformMac; 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "current platform is MAC"); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (platform == kPlatformNotSupported) 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, "current platform is not supported => this module will self destruct!"); 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Store valid output results 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _platformType = platform; 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// CreatePlatformSpecificObjects 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::CreatePlatformSpecificObjects() 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", __FUNCTION__); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceGeneric* ptrAudioDevice(NULL); 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioDeviceUtility* ptrAudioDeviceUtility(NULL); 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_DUMMY_AUDIO_BUILD) 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceDummy(Id()); 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Dummy Audio APIs will be utilized"); 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityDummy(Id()); 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2123acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org#elif defined(WEBRTC_DUMMY_FILE_DEVICES) 2133acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org ptrAudioDevice = FileAudioDeviceFactory::CreateFileAudioDevice(Id()); 2143acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 2153acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org "Will use file-playing dummy device."); 2163acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org if (ptrAudioDevice != NULL) 2173acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org { 2183acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityDummy(Id()); 2193acaa1f87fbffb413fcddb67d10427132a7ff922phoglund@webrtc.org } 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#else 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const AudioLayer audioLayer(PlatformAudioLayer()); 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *Windows* implementation of the Audio Device 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((audioLayer == kWindowsWaveAudio) 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Wave audio is default if Core audio is not supported in this build 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org || (audioLayer == kPlatformDefaultAudio) 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ) 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create *Windows Wave Audio* implementation 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceWindowsWave(Id()); 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Windows Wave APIs will be utilized"); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((audioLayer == kWindowsCoreAudio) || 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org (audioLayer == kPlatformDefaultAudio) 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ) 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "attempting to use the Windows Core Audio APIs..."); 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (AudioDeviceWindowsCore::CoreAudioIsSupported()) 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create *Windows Core Audio* implementation 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceWindowsCore(Id()); 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Windows Core Audio APIs will be utilized"); 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create *Windows Wave Audio* implementation 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceWindowsWave(Id()); 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Core Audio was not supported => revert to Windows Wave instead 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _platformAudioLayer = kWindowsWaveAudio; // modify the state set at construction 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "Windows Core Audio is *not* supported => Wave APIs will be utilized instead"); 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the Windows implementation of the Device Utility. 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // This class is independent of the selected audio layer 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // for Windows. 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityWindows(Id()); 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // #if defined(_WIN32) 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *Android OpenSLES* implementation of the Audio Device 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 27527f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#if defined(WEBRTC_ANDROID) 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == kPlatformDefaultAudio) 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 27827f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org // AudioRecordJni provides hardware AEC and OpenSlesOutput low latency. 27927f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#if defined(WEBRTC_ANDROID_OPENSLES) 28027f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org ptrAudioDevice = new AudioDeviceTemplate<OpenSlesInput, OpenSlesOutput>(Id()); 28106d45ba43fc2b1cc75c4ff4337f88f306664f181braveyao@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 28206d45ba43fc2b1cc75c4ff4337f88f306664f181braveyao@webrtc.org "Android OpenSLES Audio APIs will be utilized"); 28327f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org#else 28427f08414780932bbd4bd0fa2bbf759787b9c2e03henrike@webrtc.org ptrAudioDevice = new AudioDeviceTemplate<AudioRecordJni, AudioTrackJni>(Id()); 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, 28606d45ba43fc2b1cc75c4ff4337f88f306664f181braveyao@webrtc.org "Android JNI Audio APIs will be utilized"); 28706d45ba43fc2b1cc75c4ff4337f88f306664f181braveyao@webrtc.org#endif 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the Android implementation of the Device Utility. 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityAndroid(Id()); 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // END #if defined(WEBRTC_ANDROID) 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *Linux* implementation of the Audio Device 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_LINUX) 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((audioLayer == kLinuxPulseAudio) || (audioLayer == kPlatformDefaultAudio)) 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(LINUX_PULSE) 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "attempting to use the Linux PulseAudio APIs..."); 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 305b46e68d96f6f528be42fbf64478fa71c0264bc48fischman@webrtc.org // create *Linux PulseAudio* implementation 306b46e68d96f6f528be42fbf64478fa71c0264bc48fischman@webrtc.org AudioDeviceLinuxPulse* pulseDevice = new AudioDeviceLinuxPulse(Id()); 307b46e68d96f6f528be42fbf64478fa71c0264bc48fischman@webrtc.org if (pulseDevice->Init() != -1) 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 309b46e68d96f6f528be42fbf64478fa71c0264bc48fischman@webrtc.org ptrAudioDevice = pulseDevice; 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Linux PulseAudio APIs will be utilized"); 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 314b46e68d96f6f528be42fbf64478fa71c0264bc48fischman@webrtc.org delete pulseDevice; 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(LINUX_ALSA) 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create *Linux ALSA Audio* implementation 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceLinuxALSA(Id()); 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Pulse Audio was not supported => revert to ALSA instead 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _platformAudioLayer = kLinuxAlsaAudio; // modify the state set at construction 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "Linux PulseAudio is *not* supported => ALSA APIs will be utilized instead"); 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(LINUX_PULSE) 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (audioLayer == kLinuxAlsaAudio) 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(LINUX_ALSA) 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // create *Linux ALSA Audio* implementation 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceLinuxALSA(Id()); 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Linux ALSA APIs will be utilized"); 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the Linux implementation of the Device Utility. 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // This class is independent of the selected audio layer 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // for Linux. 344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityLinux(Id()); 346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // #if defined(WEBRTC_LINUX) 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *iPhone* implementation of the Audio Device 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(WEBRTC_IOS) 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == kPlatformDefaultAudio) 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 354a09832591aa31367ffbc260490213f1b6e96e2cetkchin@webrtc.org // Create iOS Audio Device implementation. 355a09832591aa31367ffbc260490213f1b6e96e2cetkchin@webrtc.org ptrAudioDevice = new AudioDeviceIOS(Id()); 356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "iPhone Audio APIs will be utilized"); 357b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 361a09832591aa31367ffbc260490213f1b6e96e2cetkchin@webrtc.org // Create iOS Device Utility implementation. 362a09832591aa31367ffbc260490213f1b6e96e2cetkchin@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityIOS(Id()); 363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // END #if defined(WEBRTC_IOS) 365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *Mac* implementation of the Audio Device 367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_MAC) 369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == kPlatformDefaultAudio) 370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create *Mac Audio* implementation 372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceMac(Id()); 373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Mac OS X Audio APIs will be utilized"); 374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 378b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the Mac implementation of the Device Utility. 379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityMac(Id()); 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MAC 382b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create the *Dummy* implementation of the Audio Device 384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Available for all platforms 385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (audioLayer == kDummyAudio) 387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create *Dummy Audio* implementation 389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(!ptrAudioDevice); 390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDevice = new AudioDeviceDummy(Id()); 391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "Dummy Audio APIs will be utilized"); 392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice != NULL) 394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ptrAudioDeviceUtility = new AudioDeviceUtilityDummy(Id()); 396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // if defined(WEBRTC_DUMMY_AUDIO_BUILD) 399b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDevice == NULL) 401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, "unable to create the platform specific audio device implementation"); 403b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 406b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (ptrAudioDeviceUtility == NULL) 407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id, "unable to create the platform specific audio device utility"); 409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Store valid output pointers 413b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice = ptrAudioDevice; 415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDeviceUtility = ptrAudioDeviceUtility; 416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// AttachAudioBuffer 422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 423b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Install "bridge" between the platform implemetation and the generic 424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// implementation. The "child" shall set the native sampling rate and the 425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// number of channels in this function call. 426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 42864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::AttachAudioBuffer() 429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id, "%s", __FUNCTION__); 431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.SetId(_id); 433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice->AttachAudioBuffer(&_audioDeviceBuffer); 434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ~AudioDeviceModuleImpl - dtor 439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 440b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 441b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModuleImpl::~AudioDeviceModuleImpl() 442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, _id, "%s destroyed", __FUNCTION__); 444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice) 446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _ptrAudioDevice; 448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice = NULL; 449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDeviceUtility) 452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete _ptrAudioDeviceUtility; 454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDeviceUtility = NULL; 455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete &_critSect; 458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete &_critSectEventCb; 459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete &_critSectAudioCb; 460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Module 464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Module::ChangeUniqueId 468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::ChangeUniqueId(const int32_t id) 471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _id = id; 473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 474b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 475b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Module::TimeUntilNextProcess 478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Returns the number of milliseconds until the module want a worker thread 480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// to call Process(). 481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::TimeUntilNextProcess() 484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 48564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t now = AudioDeviceUtility::GetTimeInMS(); 48664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t deltaProcess = kAdmMaxIdleTimeProcess - (now - _lastProcessTime); 487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (deltaProcess); 488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Module::Process 492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Check for posted error and warning reports. Generate callbacks if 494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// new reports exists. 495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 49764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::Process() 498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lastProcessTime = AudioDeviceUtility::GetTimeInMS(); 501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kPlayoutWarning 503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutWarning()) 504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectEventCb); 506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrCbAudioDeviceObserver) 507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 508b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "=> OnWarningIsReported(kPlayoutWarning)"); 509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver->OnWarningIsReported(AudioDeviceObserver::kPlayoutWarning); 510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice->ClearPlayoutWarning(); 512b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kPlayoutError 515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutError()) 516b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectEventCb); 518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrCbAudioDeviceObserver) 519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "=> OnErrorIsReported(kPlayoutError)"); 521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver->OnErrorIsReported(AudioDeviceObserver::kPlayoutError); 522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 523b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice->ClearPlayoutError(); 524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kRecordingWarning 527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingWarning()) 528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectEventCb); 530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrCbAudioDeviceObserver) 531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, "=> OnWarningIsReported(kRecordingWarning)"); 533b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver->OnWarningIsReported(AudioDeviceObserver::kRecordingWarning); 534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice->ClearRecordingWarning(); 536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // kRecordingError 539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingError()) 540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectEventCb); 542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrCbAudioDeviceObserver) 543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "=> OnErrorIsReported(kRecordingError)"); 545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver->OnErrorIsReported(AudioDeviceObserver::kRecordingError); 546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDevice->ClearRecordingError(); 548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 550b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Public API 555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ActiveAudioLayer 559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 56164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::ActiveAudioLayer(AudioLayer* audioLayer) const 562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AudioLayer activeAudio; 565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->ActiveAudioLayer(activeAudio) == -1) 567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *audioLayer = activeAudio; 572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (*audioLayer == AudioDeviceModule::kWindowsWaveAudio) 574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: kWindowsWaveAudio"); 576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (*audioLayer == AudioDeviceModule::kWindowsCoreAudio) 578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: kWindowsCoreAudio"); 580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (*audioLayer == AudioDeviceModule::kLinuxAlsaAudio) 582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: kLinuxAlsaAudio"); 584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: NOT_SUPPORTED"); 588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 592b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// LastError 595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModule::ErrorCode AudioDeviceModuleImpl::LastError() const 598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _lastError; 600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 602b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Init 604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 60664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::Init() 607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_initialized) 610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_ptrAudioDeviceUtility) 613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_ptrAudioDevice) 616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrAudioDeviceUtility->Init(); 619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->Init() == -1) 621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 622b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _initialized = true; 626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Terminate 631b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::Terminate() 634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_initialized) 637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->Terminate() == -1) 640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _initialized = false; 645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Initialized 650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 651b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::Initialized() const 653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: %d", _initialized); 656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_initialized); 657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// InitSpeaker 661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::InitSpeaker() 664b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->InitSpeaker()); 667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// InitMicrophone 671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::InitMicrophone() 674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->InitMicrophone()); 677b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerVolumeIsAvailable 681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 68364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SpeakerVolumeIsAvailable(bool* available) 684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SpeakerVolumeIsAvailable(isAvailable) == -1) 690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 694b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetSpeakerVolume 702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 70464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetSpeakerVolume(uint32_t volume) 705b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetSpeakerVolume(volume)); 708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerVolume 712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SpeakerVolume(uint32_t* volume) const 715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t level(0); 719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SpeakerVolume(level) == -1) 721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 722b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *volume = level; 726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: volume=%u", *volume); 728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetWaveOutVolume 733b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetWaveOutVolume(uint16_t volumeLeft, uint16_t volumeRight) 736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetWaveOutVolume(volumeLeft, volumeRight)); 739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// WaveOutVolume 743b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::WaveOutVolume(uint16_t* volumeLeft, uint16_t* volumeRight) const 746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t volLeft(0); 75064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t volRight(0); 751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->WaveOutVolume(volLeft, volRight) == -1) 753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *volumeLeft = volLeft; 758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *volumeRight = volRight; 759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "outputs: volumeLeft=%u, volumeRight=%u", 761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *volumeLeft, *volumeRight); 762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 766b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerIsInitialized 768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::SpeakerIsInitialized() const 771b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isInitialized = _ptrAudioDevice->SpeakerIsInitialized(); 775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: %d", isInitialized); 777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (isInitialized); 778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneIsInitialized 782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::MicrophoneIsInitialized() const 785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isInitialized = _ptrAudioDevice->MicrophoneIsInitialized(); 789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 790b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: %d", isInitialized); 791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (isInitialized); 792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 795b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MaxSpeakerVolume 796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MaxSpeakerVolume(uint32_t* maxVolume) const 799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 80264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVol(0); 803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MaxSpeakerVolume(maxVol) == -1) 805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *maxVolume = maxVol; 810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 811b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: maxVolume=%d", *maxVolume); 812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 813b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 814b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MinSpeakerVolume 817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 818b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MinSpeakerVolume(uint32_t* minVolume) const 820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 82364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVol(0); 824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MinSpeakerVolume(minVol) == -1) 826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *minVolume = minVol; 831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: minVolume=%u", *minVolume); 833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 836b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerVolumeStepSize 838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SpeakerVolumeStepSize(uint16_t* stepSize) const 841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 84464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t delta(0); 845b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SpeakerVolumeStepSize(delta) == -1) 847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 848b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the speaker-volume step size"); 849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *stepSize = delta; 853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: stepSize=%u", *stepSize); 855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 858b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 859b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerMuteIsAvailable 860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 86264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SpeakerMuteIsAvailable(bool* available) 863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 865b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SpeakerMuteIsAvailable(isAvailable) == -1) 869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 874b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 878b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetSpeakerMute 881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 88364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetSpeakerMute(bool enable) 884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetSpeakerMute(enable)); 887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 888b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 889b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 890b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SpeakerMute 891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 89364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SpeakerMute(bool* enabled) const 894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 896b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool muted(false); 898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SpeakerMute(muted) == -1) 900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 904b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *enabled = muted; 905b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 906b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: enabled=%u", *enabled); 907b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 908b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 911b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneMuteIsAvailable 912b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 91464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneMuteIsAvailable(bool* available) 915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 916b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneMuteIsAvailable(isAvailable) == -1) 921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 925b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 926b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 930b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetMicrophoneMute 933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 934b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 93564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetMicrophoneMute(bool enable) 936b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetMicrophoneMute(enable)); 939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneMute 943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneMute(bool* enabled) const 946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool muted(false); 950b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 951b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneMute(muted) == -1) 952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 955b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *enabled = muted; 957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: enabled=%u", *enabled); 959b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneBoostIsAvailable 964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 96664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneBoostIsAvailable(bool* available) 967b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 969b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneBoostIsAvailable(isAvailable) == -1) 973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 978b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetMicrophoneBoost 985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetMicrophoneBoost(bool enable) 988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetMicrophoneBoost(enable)); 991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneBoost 995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneBoost(bool* enabled) const 998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool onOff(false); 1002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneBoost(onOff) == -1) 1004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1005b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *enabled = onOff; 1009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: enabled=%u", *enabled); 1011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneVolumeIsAvailable 1016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 101864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneVolumeIsAvailable(bool* available) 1019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 1023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneVolumeIsAvailable(isAvailable) == -1) 1025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1026b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 1030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 1032b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetMicrophoneVolume 1037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 103964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetMicrophoneVolume(uint32_t volume) 1040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetMicrophoneVolume(volume)); 1043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1045b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1046b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneVolume 1047b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1048b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 104964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneVolume(uint32_t* volume) const 1050b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1051b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "%s", __FUNCTION__); 1052b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1053b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 105464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t level(0); 1055b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1056b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneVolume(level) == -1) 1057b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1058b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1059b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1060b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1061b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *volume = level; 1062b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1063b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "output: volume=%u", *volume); 1064b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1065b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1066b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1067b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1068b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StereoRecordingIsAvailable 1069b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1070b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 107164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StereoRecordingIsAvailable(bool* available) const 1072b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1073b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1074b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1075b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 1076b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1077b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->StereoRecordingIsAvailable(isAvailable) == -1) 1078b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1079b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1080b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1081b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1082b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 1083b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1084b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 1085b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1086b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1087b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1088b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1089b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetStereoRecording 1090b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1091b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 109264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetStereoRecording(bool enable) 1093b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1094b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1095b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1096b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingIsInitialized()) 1097b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1098b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "recording in stereo is not supported"); 1099b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SetStereoRecording(enable) == -1) 1103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to enable stereo recording"); 1105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 110864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int8_t nChannels(1); 1109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enable) 1110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nChannels = 2; 1112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.SetRecordingChannels(nChannels); 1114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StereoRecording 1120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StereoRecording(bool* enabled) const 1123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool stereo(false); 1127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->StereoRecording(stereo) == -1) 1129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *enabled = stereo; 1134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: enabled=%u", *enabled); 1136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetRecordingChannel 1141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 114364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetRecordingChannel(const ChannelType channel) 1144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (channel == kChannelBoth) 1146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (channel == kChannelLeft) 1149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool stereo(false); 1157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->StereoRecording(stereo) == -1) 1159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "recording in stereo is not supported"); 1161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_audioDeviceBuffer.SetRecordingChannel(channel)); 1165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingChannel 1169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 117164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RecordingChannel(ChannelType* channel) const 1172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ChannelType chType; 1176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_audioDeviceBuffer.RecordingChannel(chType) == -1) 1178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *channel = chType; 1183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (*channel == kChannelBoth) 1185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else if (*channel == kChannelLeft) 1188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StereoPlayoutIsAvailable 1199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StereoPlayoutIsAvailable(bool* available) const 1202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 1206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->StereoPlayoutIsAvailable(isAvailable) == -1) 1208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 1213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 1215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetStereoPlayout 1220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 122264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetStereoPlayout(bool enable) 1223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutIsInitialized()) 1227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "unable to set stereo mode while playing side is initialized"); 1229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SetStereoPlayout(enable)) 1233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "stereo playout is not supported"); 1235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 123864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int8_t nChannels(1); 1239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (enable) 1240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org nChannels = 2; 1242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.SetPlayoutChannels(nChannels); 1244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StereoPlayout 1250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StereoPlayout(bool* enabled) const 1253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool stereo(false); 1257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->StereoPlayout(stereo) == -1) 1259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *enabled = stereo; 1264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: enabled=%u", *enabled); 1266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetAGC 1271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 127364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetAGC(bool enable) 1274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetAGC(enable)); 1277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// AGC 1281b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::AGC() const 1284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->AGC()); 1287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutIsAvailable 1291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 129364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::PlayoutIsAvailable(bool* available) 1294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 1298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutIsAvailable(isAvailable) == -1) 1300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 1305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 1307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingIsAvailable 1312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 131464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RecordingIsAvailable(bool* available) 1315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool isAvailable(0); 1319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingIsAvailable(isAvailable) == -1) 1321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *available = isAvailable; 1326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: available=%d", *available); 1328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1332b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MaxMicrophoneVolume 1333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 133564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MaxMicrophoneVolume(uint32_t* maxVolume) const 1336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "%s", __FUNCTION__); 1338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t maxVol(0); 1341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MaxMicrophoneVolume(maxVol) == -1) 1343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1344b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1345b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1346b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *maxVolume = maxVol; 1348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "output: maxVolume=%d", *maxVolume); 1350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MinMicrophoneVolume 1355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1356b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MinMicrophoneVolume(uint32_t* minVolume) const 1358b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1359b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1360b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 136164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t minVol(0); 1362b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1363b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MinMicrophoneVolume(minVol) == -1) 1364b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1365b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1366b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1367b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1368b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *minVolume = minVol; 1369b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1370b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: minVolume=%u", *minVolume); 1371b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1372b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1373b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1374b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1375b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// MicrophoneVolumeStepSize 1376b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1377b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 137864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::MicrophoneVolumeStepSize(uint16_t* stepSize) const 1379b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1381b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 138264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t delta(0); 1383b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1384b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->MicrophoneVolumeStepSize(delta) == -1) 1385b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1386b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1387b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1388b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1389b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *stepSize = delta; 1390b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1391b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: stepSize=%u", *stepSize); 1392b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1393b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1394b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1395b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1396b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutDevices 1397b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1398b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139964a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint16_t AudioDeviceModuleImpl::PlayoutDevices() 1400b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1401b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1402b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 140364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t nPlayoutDevices = _ptrAudioDevice->PlayoutDevices(); 1404b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1405b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: #playout devices=%d", nPlayoutDevices); 140664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org return ((int16_t)(nPlayoutDevices)); 1407b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1408b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1409b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1410b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetPlayoutDevice I (II) 1411b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1412b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 141364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetPlayoutDevice(uint16_t index) 1414b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1415b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1416b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetPlayoutDevice(index)); 1417b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1418b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1419b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1420b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetPlayoutDevice II (II) 1421b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1422b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetPlayoutDevice(WindowsDeviceType device) 1424b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1425b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (device == kDefaultDevice) 1426b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1427b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1428b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1429b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1430b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1431b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1432b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1433b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetPlayoutDevice(device)); 1434b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1435b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1436b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1437b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutDeviceName 1438b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1439b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 144064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::PlayoutDeviceName( 144164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t index, 1442b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize], 1443b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]) 1444b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1445b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1446b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1447b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (name == NULL) 1448b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1449b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lastError = kAdmErrArgument; 1450b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1451b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1452b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1453b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutDeviceName(index, name, guid) == -1) 1454b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1455b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1456b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1457b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1458b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (name != NULL) 1459b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1460b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: name=%s", name); 1461b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1462b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (guid != NULL) 1463b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1464b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: guid=%s", guid); 1465b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1466b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1467b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1468b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1469b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1470b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1471b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingDeviceName 1472b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1473b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 147464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RecordingDeviceName( 147564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t index, 1476b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char name[kAdmMaxDeviceNameSize], 1477b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org char guid[kAdmMaxGuidSize]) 1478b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1479b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1480b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1481b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (name == NULL) 1482b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1483b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _lastError = kAdmErrArgument; 1484b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1485b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1486b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1487b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingDeviceName(index, name, guid) == -1) 1488b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1489b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1490b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1491b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1492b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (name != NULL) 1493b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1494b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: name=%s", name); 1495b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1496b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (guid != NULL) 1497b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1498b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: guid=%s", guid); 1499b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1500b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1501b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1502b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1503b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1504b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1505b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingDevices 1506b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1507b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 150864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint16_t AudioDeviceModuleImpl::RecordingDevices() 1509b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1510b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1511b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t nRecordingDevices = _ptrAudioDevice->RecordingDevices(); 1513b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1514b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 1515b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: #recording devices=%d", nRecordingDevices); 151664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org return ((int16_t)nRecordingDevices); 1517b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1518b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1519b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1520b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetRecordingDevice I (II) 1521b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1522b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 152364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetRecordingDevice(uint16_t index) 1524b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1525b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1526b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetRecordingDevice(index)); 1527b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1528b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1529b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1530b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetRecordingDevice II (II) 1531b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1532b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 153364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetRecordingDevice(WindowsDeviceType device) 1534b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1535b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (device == kDefaultDevice) 1536b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1537b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1538b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org else 1539b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1540b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1541b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1542b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1543b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->SetRecordingDevice(device)); 1544b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1545b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1546b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1547b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// InitPlayout 1548b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1549b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 155064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::InitPlayout() 1551b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1552b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1553b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.InitPlayout(); 1554b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->InitPlayout()); 1555b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1556b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1557b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1558b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// InitRecording 1559b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1560b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 156164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::InitRecording() 1562b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1563b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1564b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.InitRecording(); 1565b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->InitRecording()); 1566b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1567b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1568b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1569b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutIsInitialized 1570b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1571b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1572b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::PlayoutIsInitialized() const 1573b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1574b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1575b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->PlayoutIsInitialized()); 1576b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1577b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1578b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1579b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingIsInitialized 1580b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1581b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1582b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::RecordingIsInitialized() const 1583b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1584b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1585b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->RecordingIsInitialized()); 1586b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1587b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1588b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1589b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StartPlayout 1590b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1591b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 159264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StartPlayout() 1593b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1594b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1595b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->StartPlayout()); 1596b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1597b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1598b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1599b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StopPlayout 1600b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1601b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 160264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StopPlayout() 1603b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1604b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1605b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->StopPlayout()); 1606b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1607b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1608b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1609b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Playing 1610b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1611b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1612b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::Playing() const 1613b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1614b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1615b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->Playing()); 1616b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1617b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1618b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1619b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StartRecording 1620b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1621b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StartRecording() 1623b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1624b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1625b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->StartRecording()); 1626b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1627b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1628b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StopRecording 1629b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1630b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 163164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StopRecording() 1632b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1633b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1634b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->StopRecording()); 1635b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1636b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1637b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1638b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Recording 1639b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1640b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1641b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::Recording() const 1642b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1643b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1644b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_ptrAudioDevice->Recording()); 1645b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1646b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1647b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1648b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RegisterEventObserver 1649b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1650b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 165164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RegisterEventObserver(AudioDeviceObserver* eventCallback) 1652b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1653b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1654b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectEventCb); 1655b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _ptrCbAudioDeviceObserver = eventCallback; 1656b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1657b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1658b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1659b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1660b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1661b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RegisterAudioCallback 1662b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1663b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RegisterAudioCallback(AudioTransport* audioCallback) 1665b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1666b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1667b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionScoped lock(&_critSectAudioCb); 1668b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _audioDeviceBuffer.RegisterAudioCallback(audioCallback); 1669b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1670b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1671b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1672b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1673b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1674b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StartRawInputFileRecording 1675b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1676b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StartRawInputFileRecording( 1678b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char pcmFileNameUTF8[kAdmMaxFileNameSize]) 1679b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1680b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1681b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1682b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (NULL == pcmFileNameUTF8) 1683b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1684b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1685b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1686b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1687b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_audioDeviceBuffer.StartInputFileRecording(pcmFileNameUTF8)); 1688b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1689b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1690b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1691b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StopRawInputFileRecording 1692b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1693b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 169464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StopRawInputFileRecording() 1695b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1696b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1697b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1698b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_audioDeviceBuffer.StopInputFileRecording()); 1699b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1700b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1701b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1702b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StartRawOutputFileRecording 1703b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1704b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 170564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StartRawOutputFileRecording( 1706b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char pcmFileNameUTF8[kAdmMaxFileNameSize]) 1707b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1708b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1709b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1710b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (NULL == pcmFileNameUTF8) 1711b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1712b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1713b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1714b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1715b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_audioDeviceBuffer.StartOutputFileRecording(pcmFileNameUTF8)); 1716b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1717b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1718b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1719b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// StopRawOutputFileRecording 1720b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1721b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 172264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::StopRawOutputFileRecording() 1723b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1724b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1725b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1726b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (_audioDeviceBuffer.StopOutputFileRecording()); 1727b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1728b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1729b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1730b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetPlayoutBuffer 1731b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1732b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 173364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetPlayoutBuffer(const BufferType type, uint16_t sizeMS) 1734b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1735b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1736b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1737b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutIsInitialized()) 1738b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1739b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "unable to modify the playout buffer while playing side is initialized"); 1740b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1741b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1742b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 174364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t ret(0); 1744b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1745b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (kFixedBufferSize == type) 1746b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1747b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sizeMS < kAdmMinPlayoutBufferSizeMs || sizeMS > kAdmMaxPlayoutBufferSizeMs) 1748b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1749b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "size parameter is out of range"); 1750b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1751b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1752b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1753b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1754b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((ret = _ptrAudioDevice->SetPlayoutBuffer(type, sizeMS)) == -1) 1755b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1756b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to set the playout buffer (error: %d)", LastError()); 1757b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1758b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1759b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return ret; 1760b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1761b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1762b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1763b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutBuffer 1764b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1765b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 176664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::PlayoutBuffer(BufferType* type, uint16_t* sizeMS) const 1767b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1768b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1769b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1770b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BufferType bufType; 177164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t size(0); 1772b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1773b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutBuffer(bufType, size) == -1) 1774b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1775b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the buffer type and size"); 1776b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1777b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1778b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1779b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *type = bufType; 1780b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *sizeMS = size; 1781b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1782b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: type=%u, sizeMS=%u", *type, *sizeMS); 1783b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1784b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1785b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1786b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1787b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutDelay 1788b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1789b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 179064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::PlayoutDelay(uint16_t* delayMS) const 1791b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1792b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "%s", __FUNCTION__); 1793b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1794b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 179564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t delay(0); 1796b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1797b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->PlayoutDelay(delay) == -1) 1798b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1799b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the playout delay"); 1800b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1801b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1802b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1803b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *delayMS = delay; 1804b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1805b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "output: delayMS=%u", *delayMS); 1806b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1807b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1808b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1809b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1810b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingDelay 1811b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1812b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 181364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RecordingDelay(uint16_t* delayMS) const 1814b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1815b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "%s", __FUNCTION__); 1816b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1817b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 181864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t delay(0); 1819b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1820b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->RecordingDelay(delay) == -1) 1821b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1822b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the recording delay"); 1823b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1824b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1825b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1826b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *delayMS = delay; 1827b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1828b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStream, kTraceAudioDevice, _id, "output: delayMS=%u", *delayMS); 1829b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1830b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1831b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1832b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1833b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// CPULoad 1834b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1835b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 183664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::CPULoad(uint16_t* load) const 1837b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1838b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1839b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 184064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint16_t cpuLoad(0); 1841b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1842b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->CPULoad(cpuLoad) == -1) 1843b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1844b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the CPU load"); 1845b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1846b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1847b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1848b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *load = cpuLoad; 1849b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1850b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: load=%u", *load); 1851b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1852b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1853b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1854b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1855b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetRecordingSampleRate 1856b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1857b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetRecordingSampleRate(const uint32_t samplesPerSec) 1859b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1860b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1861b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1862b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SetRecordingSampleRate(samplesPerSec) != 0) 1863b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1864b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1865b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1866b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1867b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1868b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1869b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1870b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1871b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// RecordingSampleRate 1872b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1873b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::RecordingSampleRate(uint32_t* samplesPerSec) const 1875b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1876b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1877b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187864a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t sampleRate = _audioDeviceBuffer.RecordingSampleRate(); 1879b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1880b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sampleRate == -1) 1881b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1882b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the sample rate"); 1883b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1884b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1885b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1886b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *samplesPerSec = sampleRate; 1887b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1888b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: samplesPerSec=%u", *samplesPerSec); 1889b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1890b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1891b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1892b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1893b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetPlayoutSampleRate 1894b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1895b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 189664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetPlayoutSampleRate(const uint32_t samplesPerSec) 1897b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1898b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1899b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1900b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SetPlayoutSampleRate(samplesPerSec) != 0) 1901b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1902b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1903b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1904b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1905b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1906b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1907b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1908b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1909b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlayoutSampleRate 1910b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1911b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::PlayoutSampleRate(uint32_t* samplesPerSec) const 1913b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1914b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1915b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191664a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org int32_t sampleRate = _audioDeviceBuffer.PlayoutSampleRate(); 1917b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1918b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (sampleRate == -1) 1919b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1920b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id, "failed to retrieve the sample rate"); 1921b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1922b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1923b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1924b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *samplesPerSec = sampleRate; 1925b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1926b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, "output: samplesPerSec=%u", *samplesPerSec); 1927b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1928b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1929b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1930b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1931b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ResetAudioDevice 1932b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1933b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 193464a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::ResetAudioDevice() 1935b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1936b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1937b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1938b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1939b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->ResetAudioDevice() == -1) 1940b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1941b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1942b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1943b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1944b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (0); 1945b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1946b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1947b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1948b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// SetLoudspeakerStatus 1949b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1950b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 195164a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::SetLoudspeakerStatus(bool enable) 1952b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1953b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1954b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1955b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->SetLoudspeakerStatus(enable) != 0) 1956b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1957b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1958b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1959b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1960b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1961b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1962b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1963b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1964b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// GetLoudspeakerStatus 1965b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1966b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 196764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orgint32_t AudioDeviceModuleImpl::GetLoudspeakerStatus(bool* enabled) const 1968b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1969b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1970b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1971b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_ptrAudioDevice->GetLoudspeakerStatus(*enabled) != 0) 1972b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 1973b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 1974b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 1975b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1976b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 1977b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1978b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1979b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint32_t AudioDeviceModuleImpl::EnableBuiltInAEC(bool enable) 1980b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1981b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED(); 1982b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1983b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _ptrAudioDevice->EnableBuiltInAEC(enable); 1984b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1985b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1986b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceModuleImpl::BuiltInAECIsEnabled() const 1987b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 1988b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CHECK_INITIALIZED_BOOL(); 1989b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1990b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _ptrAudioDevice->BuiltInAECIsEnabled(); 1991b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 1992b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1993b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 1994b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Private Methods 1995b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 1996b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1997b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 1998b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Platform 1999b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 2000b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2001b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModuleImpl::PlatformType AudioDeviceModuleImpl::Platform() const 2002b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2003b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _platformType; 2004b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2005b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2006b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 2007b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// PlatformAudioLayer 2008b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 2009b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2010b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgAudioDeviceModule::AudioLayer AudioDeviceModuleImpl::PlatformAudioLayer() const 2011b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 2012b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2013b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (_platformAudioLayer) 2014b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 2015b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kPlatformDefaultAudio: 2016b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 2017b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: kPlatformDefaultAudio"); 2018b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2019b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWindowsWaveAudio: 2020b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 2021b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: kWindowsWaveAudio"); 2022b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2023b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kWindowsCoreAudio: 2024b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 2025b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: kWindowsCoreAudio"); 2026b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2027b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kLinuxAlsaAudio: 2028b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 2029b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: kLinuxAlsaAudio"); 2030b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2031b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case kDummyAudio: 2032b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceStateInfo, kTraceAudioDevice, _id, 2033b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: kDummyAudio"); 2034b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2035b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 2036b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id, 2037b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "output: INVALID"); 2038b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 2039b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 2040b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2041b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return _platformAudioLayer; 2042b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2043b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2044b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 2045