Index: webrtc/voice_engine/voe_hardware_impl.cc |
diff --git a/webrtc/voice_engine/voe_hardware_impl.cc b/webrtc/voice_engine/voe_hardware_impl.cc |
deleted file mode 100644 |
index db47c730b69f0572330827f3036c78ccc9bd06df..0000000000000000000000000000000000000000 |
--- a/webrtc/voice_engine/voe_hardware_impl.cc |
+++ /dev/null |
@@ -1,502 +0,0 @@ |
-/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/voice_engine/voe_hardware_impl.h" |
- |
-#include <assert.h> |
- |
-#include "webrtc/system_wrappers/include/trace.h" |
-#include "webrtc/voice_engine/include/voe_errors.h" |
-#include "webrtc/voice_engine/voice_engine_impl.h" |
- |
-namespace webrtc { |
- |
-VoEHardware* VoEHardware::GetInterface(VoiceEngine* voiceEngine) { |
- if (NULL == voiceEngine) { |
- return NULL; |
- } |
- VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); |
- s->AddRef(); |
- return s; |
-} |
- |
-VoEHardwareImpl::VoEHardwareImpl(voe::SharedData* shared) : _shared(shared) { |
- WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "VoEHardwareImpl() - ctor"); |
-} |
- |
-VoEHardwareImpl::~VoEHardwareImpl() { |
- WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "~VoEHardwareImpl() - dtor"); |
-} |
- |
-int VoEHardwareImpl::SetAudioDeviceLayer(AudioLayers audioLayer) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetAudioDeviceLayer(audioLayer=%d)", audioLayer); |
- |
- // Don't allow a change if VoE is initialized |
- if (_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_ALREADY_INITED, kTraceError); |
- return -1; |
- } |
- |
- // Map to AudioDeviceModule::AudioLayer |
- AudioDeviceModule::AudioLayer wantedLayer( |
- AudioDeviceModule::kPlatformDefaultAudio); |
- switch (audioLayer) { |
- case kAudioPlatformDefault: |
- // already set above |
- break; |
- case kAudioWindowsCore: |
- wantedLayer = AudioDeviceModule::kWindowsCoreAudio; |
- break; |
- case kAudioLinuxAlsa: |
- wantedLayer = AudioDeviceModule::kLinuxAlsaAudio; |
- break; |
- case kAudioLinuxPulse: |
- wantedLayer = AudioDeviceModule::kLinuxPulseAudio; |
- break; |
- } |
- |
- // Save the audio device layer for Init() |
- _shared->set_audio_device_layer(wantedLayer); |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::GetAudioDeviceLayer(AudioLayers& audioLayer) { |
- // Can always be called regardless of VoE state |
- |
- AudioDeviceModule::AudioLayer activeLayer( |
- AudioDeviceModule::kPlatformDefaultAudio); |
- |
- if (_shared->audio_device()) { |
- // Get active audio layer from ADM |
- if (_shared->audio_device()->ActiveAudioLayer(&activeLayer) != 0) { |
- _shared->SetLastError(VE_UNDEFINED_SC_ERR, kTraceError, |
- " Audio Device error"); |
- return -1; |
- } |
- } else { |
- // Return VoE's internal layer setting |
- activeLayer = _shared->audio_device_layer(); |
- } |
- |
- // Map to AudioLayers |
- switch (activeLayer) { |
- case AudioDeviceModule::kPlatformDefaultAudio: |
- audioLayer = kAudioPlatformDefault; |
- break; |
- case AudioDeviceModule::kWindowsCoreAudio: |
- audioLayer = kAudioWindowsCore; |
- break; |
- case AudioDeviceModule::kLinuxAlsaAudio: |
- audioLayer = kAudioLinuxAlsa; |
- break; |
- case AudioDeviceModule::kLinuxPulseAudio: |
- audioLayer = kAudioLinuxPulse; |
- break; |
- default: |
- _shared->SetLastError(VE_UNDEFINED_SC_ERR, kTraceError, |
- " unknown audio layer"); |
- } |
- |
- return 0; |
-} |
-int VoEHardwareImpl::GetNumOfRecordingDevices(int& devices) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- |
- devices = static_cast<int>(_shared->audio_device()->RecordingDevices()); |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::GetNumOfPlayoutDevices(int& devices) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- |
- devices = static_cast<int>(_shared->audio_device()->PlayoutDevices()); |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::GetRecordingDeviceName(int index, |
- char strNameUTF8[128], |
- char strGuidUTF8[128]) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- if (strNameUTF8 == NULL) { |
- _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, |
- "GetRecordingDeviceName() invalid argument"); |
- return -1; |
- } |
- |
- // Note that strGuidUTF8 is allowed to be NULL |
- |
- // Init len variable to length of supplied vectors |
- const uint16_t strLen = 128; |
- |
- // Check if length has been changed in module |
- static_assert(strLen == kAdmMaxDeviceNameSize, ""); |
- static_assert(strLen == kAdmMaxGuidSize, ""); |
- |
- char name[strLen]; |
- char guid[strLen]; |
- |
- // Get names from module |
- if (_shared->audio_device()->RecordingDeviceName(index, name, guid) != 0) { |
- _shared->SetLastError(VE_CANNOT_RETRIEVE_DEVICE_NAME, kTraceError, |
- "GetRecordingDeviceName() failed to get device name"); |
- return -1; |
- } |
- |
- // Copy to vectors supplied by user |
- strncpy(strNameUTF8, name, strLen); |
- |
- if (strGuidUTF8 != NULL) { |
- strncpy(strGuidUTF8, guid, strLen); |
- } |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::GetPlayoutDeviceName(int index, |
- char strNameUTF8[128], |
- char strGuidUTF8[128]) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- if (strNameUTF8 == NULL) { |
- _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, |
- "GetPlayoutDeviceName() invalid argument"); |
- return -1; |
- } |
- |
- // Note that strGuidUTF8 is allowed to be NULL |
- |
- // Init len variable to length of supplied vectors |
- const uint16_t strLen = 128; |
- |
- // Check if length has been changed in module |
- static_assert(strLen == kAdmMaxDeviceNameSize, ""); |
- static_assert(strLen == kAdmMaxGuidSize, ""); |
- |
- char name[strLen]; |
- char guid[strLen]; |
- |
- // Get names from module |
- if (_shared->audio_device()->PlayoutDeviceName(index, name, guid) != 0) { |
- _shared->SetLastError(VE_CANNOT_RETRIEVE_DEVICE_NAME, kTraceError, |
- "GetPlayoutDeviceName() failed to get device name"); |
- return -1; |
- } |
- |
- // Copy to vectors supplied by user |
- strncpy(strNameUTF8, name, strLen); |
- |
- if (strGuidUTF8 != NULL) { |
- strncpy(strGuidUTF8, guid, strLen); |
- } |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::SetRecordingDevice(int index, |
- StereoChannel recordingChannel) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetRecordingDevice(index=%d, recordingChannel=%d)", index, |
- (int)recordingChannel); |
- rtc::CritScope cs(_shared->crit_sec()); |
- |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- |
- bool isRecording(false); |
- |
- // Store state about activated recording to be able to restore it after the |
- // recording device has been modified. |
- if (_shared->audio_device()->Recording()) { |
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetRecordingDevice() device is modified while recording" |
- " is active..."); |
- isRecording = true; |
- if (_shared->audio_device()->StopRecording() == -1) { |
- _shared->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, |
- "SetRecordingDevice() unable to stop recording"); |
- return -1; |
- } |
- } |
- |
- // We let the module do the index sanity |
- |
- // Set recording channel |
- AudioDeviceModule::ChannelType recCh = AudioDeviceModule::kChannelBoth; |
- switch (recordingChannel) { |
- case kStereoLeft: |
- recCh = AudioDeviceModule::kChannelLeft; |
- break; |
- case kStereoRight: |
- recCh = AudioDeviceModule::kChannelRight; |
- break; |
- case kStereoBoth: |
- // default setting kChannelBoth (<=> mono) |
- break; |
- } |
- |
- if (_shared->audio_device()->SetRecordingChannel(recCh) != 0) { |
- _shared->SetLastError( |
- VE_AUDIO_DEVICE_MODULE_ERROR, kTraceWarning, |
- "SetRecordingChannel() unable to set the recording channel"); |
- } |
- |
- // Map indices to unsigned since underlying functions need that |
- uint16_t indexU = static_cast<uint16_t>(index); |
- |
- int32_t res(0); |
- |
- if (index == -1) { |
- res = _shared->audio_device()->SetRecordingDevice( |
- AudioDeviceModule::kDefaultCommunicationDevice); |
- } else if (index == -2) { |
- res = _shared->audio_device()->SetRecordingDevice( |
- AudioDeviceModule::kDefaultDevice); |
- } else { |
- res = _shared->audio_device()->SetRecordingDevice(indexU); |
- } |
- |
- if (res != 0) { |
- _shared->SetLastError( |
- VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, |
- "SetRecordingDevice() unable to set the recording device"); |
- return -1; |
- } |
- |
- // Init microphone, so user can do volume settings etc |
- if (_shared->audio_device()->InitMicrophone() == -1) { |
- _shared->SetLastError(VE_CANNOT_ACCESS_MIC_VOL, kTraceWarning, |
- "SetRecordingDevice() cannot access microphone"); |
- } |
- |
- // Set number of channels |
- bool available = false; |
- if (_shared->audio_device()->StereoRecordingIsAvailable(&available) != 0) { |
- _shared->SetLastError( |
- VE_SOUNDCARD_ERROR, kTraceWarning, |
- "StereoRecordingIsAvailable() failed to query stereo recording"); |
- } |
- |
- if (_shared->audio_device()->SetStereoRecording(available) != 0) { |
- _shared->SetLastError( |
- VE_SOUNDCARD_ERROR, kTraceWarning, |
- "SetRecordingDevice() failed to set mono recording mode"); |
- } |
- |
- // Restore recording if it was enabled already when calling this function. |
- if (isRecording) { |
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetRecordingDevice() recording is now being restored..."); |
- if (_shared->audio_device()->InitRecording() != 0) { |
- WEBRTC_TRACE(kTraceError, kTraceVoice, |
- VoEId(_shared->instance_id(), -1), |
- "SetRecordingDevice() failed to initialize recording"); |
- return -1; |
- } |
- if (_shared->audio_device()->StartRecording() != 0) { |
- WEBRTC_TRACE(kTraceError, kTraceVoice, |
- VoEId(_shared->instance_id(), -1), |
- "SetRecordingDevice() failed to start recording"); |
- return -1; |
- } |
- } |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::SetPlayoutDevice(int index) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetPlayoutDevice(index=%d)", index); |
- rtc::CritScope cs(_shared->crit_sec()); |
- |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- |
- bool isPlaying(false); |
- |
- // Store state about activated playout to be able to restore it after the |
- // playout device has been modified. |
- if (_shared->audio_device()->Playing()) { |
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetPlayoutDevice() device is modified while playout is " |
- "active..."); |
- isPlaying = true; |
- if (_shared->audio_device()->StopPlayout() == -1) { |
- _shared->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, |
- "SetPlayoutDevice() unable to stop playout"); |
- return -1; |
- } |
- } |
- |
- // We let the module do the index sanity |
- |
- // Map indices to unsigned since underlying functions need that |
- uint16_t indexU = static_cast<uint16_t>(index); |
- |
- int32_t res(0); |
- |
- if (index == -1) { |
- res = _shared->audio_device()->SetPlayoutDevice( |
- AudioDeviceModule::kDefaultCommunicationDevice); |
- } else if (index == -2) { |
- res = _shared->audio_device()->SetPlayoutDevice( |
- AudioDeviceModule::kDefaultDevice); |
- } else { |
- res = _shared->audio_device()->SetPlayoutDevice(indexU); |
- } |
- |
- if (res != 0) { |
- _shared->SetLastError( |
- VE_SOUNDCARD_ERROR, kTraceError, |
- "SetPlayoutDevice() unable to set the playout device"); |
- return -1; |
- } |
- |
- // Init speaker, so user can do volume settings etc |
- if (_shared->audio_device()->InitSpeaker() == -1) { |
- _shared->SetLastError(VE_CANNOT_ACCESS_SPEAKER_VOL, kTraceWarning, |
- "SetPlayoutDevice() cannot access speaker"); |
- } |
- |
- // Set number of channels |
- bool available = false; |
- _shared->audio_device()->StereoPlayoutIsAvailable(&available); |
- if (_shared->audio_device()->SetStereoPlayout(available) != 0) { |
- _shared->SetLastError( |
- VE_SOUNDCARD_ERROR, kTraceWarning, |
- "SetPlayoutDevice() failed to set stereo playout mode"); |
- } |
- |
- // Restore playout if it was enabled already when calling this function. |
- if (isPlaying) { |
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetPlayoutDevice() playout is now being restored..."); |
- if (_shared->audio_device()->InitPlayout() != 0) { |
- WEBRTC_TRACE(kTraceError, kTraceVoice, |
- VoEId(_shared->instance_id(), -1), |
- "SetPlayoutDevice() failed to initialize playout"); |
- return -1; |
- } |
- if (_shared->audio_device()->StartPlayout() != 0) { |
- WEBRTC_TRACE(kTraceError, kTraceVoice, |
- VoEId(_shared->instance_id(), -1), |
- "SetPlayoutDevice() failed to start playout"); |
- return -1; |
- } |
- } |
- |
- return 0; |
-} |
- |
-int VoEHardwareImpl::SetRecordingSampleRate(unsigned int samples_per_sec) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "%s", __FUNCTION__); |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->SetRecordingSampleRate(samples_per_sec); |
-} |
- |
-int VoEHardwareImpl::RecordingSampleRate(unsigned int* samples_per_sec) const { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->RecordingSampleRate(samples_per_sec); |
-} |
- |
-int VoEHardwareImpl::SetPlayoutSampleRate(unsigned int samples_per_sec) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "%s", __FUNCTION__); |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->SetPlayoutSampleRate(samples_per_sec); |
-} |
- |
-int VoEHardwareImpl::PlayoutSampleRate(unsigned int* samples_per_sec) const { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->PlayoutSampleRate(samples_per_sec); |
-} |
- |
-bool VoEHardwareImpl::BuiltInAECIsAvailable() const { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->BuiltInAECIsAvailable(); |
-} |
- |
-int VoEHardwareImpl::EnableBuiltInAEC(bool enable) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- return _shared->audio_device()->EnableBuiltInAEC(enable); |
-} |
- |
-bool VoEHardwareImpl::BuiltInAGCIsAvailable() const { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->BuiltInAGCIsAvailable(); |
-} |
- |
-int VoEHardwareImpl::EnableBuiltInAGC(bool enable) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- return _shared->audio_device()->EnableBuiltInAGC(enable); |
-} |
- |
-bool VoEHardwareImpl::BuiltInNSIsAvailable() const { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return false; |
- } |
- return _shared->audio_device()->BuiltInNSIsAvailable(); |
-} |
- |
-int VoEHardwareImpl::EnableBuiltInNS(bool enable) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- return _shared->audio_device()->EnableBuiltInNS(enable); |
-} |
- |
-} // namespace webrtc |