| Index: webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc
|
| diff --git a/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc b/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc
|
| index f7315de2afc7177dabe041a4fe59cdcf572c4f35..492b66463de09b089a238dc0a78b370a4cfc10e9 100644
|
| --- a/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc
|
| +++ b/webrtc/modules/audio_device/linux/audio_device_alsa_linux.cc
|
| @@ -60,52 +60,50 @@ static const unsigned int ALSA_CAPTURE_WAIT_TIMEOUT = 5; // in ms
|
| #define FUNC_GET_DEVICE_NAME 1
|
| #define FUNC_GET_DEVICE_NAME_FOR_AN_ENUM 2
|
|
|
| -AudioDeviceLinuxALSA::AudioDeviceLinuxALSA(const int32_t id) :
|
| - _ptrAudioBuffer(NULL),
|
| - _critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
| - _id(id),
|
| - _mixerManager(id),
|
| - _inputDeviceIndex(0),
|
| - _outputDeviceIndex(0),
|
| - _inputDeviceIsSpecified(false),
|
| - _outputDeviceIsSpecified(false),
|
| - _handleRecord(NULL),
|
| - _handlePlayout(NULL),
|
| - _recordingBuffersizeInFrame(0),
|
| - _recordingPeriodSizeInFrame(0),
|
| - _playoutBufferSizeInFrame(0),
|
| - _playoutPeriodSizeInFrame(0),
|
| - _recordingBufferSizeIn10MS(0),
|
| - _playoutBufferSizeIn10MS(0),
|
| - _recordingFramesIn10MS(0),
|
| - _playoutFramesIn10MS(0),
|
| - _recordingFreq(ALSA_CAPTURE_FREQ),
|
| - _playoutFreq(ALSA_PLAYOUT_FREQ),
|
| - _recChannels(ALSA_CAPTURE_CH),
|
| - _playChannels(ALSA_PLAYOUT_CH),
|
| - _recordingBuffer(NULL),
|
| - _playoutBuffer(NULL),
|
| - _recordingFramesLeft(0),
|
| - _playoutFramesLeft(0),
|
| - _playBufType(AudioDeviceModule::kFixedBufferSize),
|
| - _initialized(false),
|
| - _recording(false),
|
| - _playing(false),
|
| - _recIsInitialized(false),
|
| - _playIsInitialized(false),
|
| - _AGC(false),
|
| - _recordingDelay(0),
|
| - _playoutDelay(0),
|
| - _playWarning(0),
|
| - _playError(0),
|
| - _recWarning(0),
|
| - _recError(0),
|
| - _playBufDelay(80),
|
| - _playBufDelayFixed(80)
|
| -{
|
| - memset(_oldKeyState, 0, sizeof(_oldKeyState));
|
| - WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id,
|
| - "%s created", __FUNCTION__);
|
| +AudioDeviceLinuxALSA::AudioDeviceLinuxALSA(const int32_t id)
|
| + : _ptrAudioBuffer(nullptr),
|
| + _critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
| + _id(id),
|
| + _mixerManager(id),
|
| + _inputDeviceIndex(0),
|
| + _outputDeviceIndex(0),
|
| + _inputDeviceIsSpecified(false),
|
| + _outputDeviceIsSpecified(false),
|
| + _handleRecord(nullptr),
|
| + _handlePlayout(nullptr),
|
| + _recordingBuffersizeInFrame(0),
|
| + _recordingPeriodSizeInFrame(0),
|
| + _playoutBufferSizeInFrame(0),
|
| + _playoutPeriodSizeInFrame(0),
|
| + _recordingBufferSizeIn10MS(0),
|
| + _playoutBufferSizeIn10MS(0),
|
| + _recordingFramesIn10MS(0),
|
| + _playoutFramesIn10MS(0),
|
| + _recordingFreq(ALSA_CAPTURE_FREQ),
|
| + _playoutFreq(ALSA_PLAYOUT_FREQ),
|
| + _recChannels(ALSA_CAPTURE_CH),
|
| + _playChannels(ALSA_PLAYOUT_CH),
|
| + _recordingBuffer(nullptr),
|
| + _playoutBuffer(nullptr),
|
| + _recordingFramesLeft(0),
|
| + _playoutFramesLeft(0),
|
| + _playBufType(AudioDeviceModule::kFixedBufferSize),
|
| + _initialized(false),
|
| + _recording(false),
|
| + _playing(false),
|
| + _recIsInitialized(false),
|
| + _playIsInitialized(false),
|
| + _AGC(false),
|
| + _recordingDelay(0),
|
| + _playoutDelay(0),
|
| + _playWarning(0),
|
| + _playError(0),
|
| + _recWarning(0),
|
| + _recError(0),
|
| + _playBufDelay(80),
|
| + _playBufDelayFixed(80) {
|
| + memset(_oldKeyState, 0, sizeof(_oldKeyState));
|
| + WEBRTC_TRACE(kTraceMemory, kTraceAudioDevice, id, "%s created", __FUNCTION__);
|
| }
|
|
|
| // ----------------------------------------------------------------------------
|
| @@ -123,12 +121,12 @@ AudioDeviceLinuxALSA::~AudioDeviceLinuxALSA()
|
| if (_recordingBuffer)
|
| {
|
| delete [] _recordingBuffer;
|
| - _recordingBuffer = NULL;
|
| + _recordingBuffer = nullptr;
|
| }
|
| if (_playoutBuffer)
|
| {
|
| delete [] _playoutBuffer;
|
| - _playoutBuffer = NULL;
|
| + _playoutBuffer = nullptr;
|
| }
|
| delete &_critSect;
|
| }
|
| @@ -171,10 +169,10 @@ AudioDeviceGeneric::InitStatus AudioDeviceLinuxALSA::Init() {
|
| }
|
| #if defined(USE_X11)
|
| //Get X display handle for typing detection
|
| - _XDisplay = XOpenDisplay(NULL);
|
| - if (!_XDisplay) {
|
| - LOG(LS_WARNING)
|
| - << "failed to open X display, typing detection will not work";
|
| + _XDisplay = XOpenDisplay(nullptr);
|
| + if (!_XDisplay) {
|
| + LOG(LS_WARNING)
|
| + << "failed to open X display, typing detection will not work";
|
| }
|
| #endif
|
| _playWarning = 0;
|
| @@ -225,7 +223,7 @@ int32_t AudioDeviceLinuxALSA::Terminate()
|
| if (_XDisplay)
|
| {
|
| XCloseDisplay(_XDisplay);
|
| - _XDisplay = NULL;
|
| + _XDisplay = nullptr;
|
| }
|
| #endif
|
| _initialized = false;
|
| @@ -861,16 +859,14 @@ int32_t AudioDeviceLinuxALSA::PlayoutDeviceName(
|
|
|
| const uint16_t nDevices(PlayoutDevices());
|
|
|
| - if ((index > (nDevices-1)) || (name == NULL))
|
| - {
|
| - return -1;
|
| + if ((index > (nDevices - 1)) || (name == nullptr)) {
|
| + return -1;
|
| }
|
|
|
| memset(name, 0, kAdmMaxDeviceNameSize);
|
|
|
| - if (guid != NULL)
|
| - {
|
| - memset(guid, 0, kAdmMaxGuidSize);
|
| + if (guid != nullptr) {
|
| + memset(guid, 0, kAdmMaxGuidSize);
|
| }
|
|
|
| return GetDevicesInfo(1, true, index, name, kAdmMaxDeviceNameSize);
|
| @@ -884,16 +880,14 @@ int32_t AudioDeviceLinuxALSA::RecordingDeviceName(
|
|
|
| const uint16_t nDevices(RecordingDevices());
|
|
|
| - if ((index > (nDevices-1)) || (name == NULL))
|
| - {
|
| - return -1;
|
| + if ((index > (nDevices - 1)) || (name == nullptr)) {
|
| + return -1;
|
| }
|
|
|
| memset(name, 0, kAdmMaxDeviceNameSize);
|
|
|
| - if (guid != NULL)
|
| - {
|
| - memset(guid, 0, kAdmMaxGuidSize);
|
| + if (guid != nullptr) {
|
| + memset(guid, 0, kAdmMaxGuidSize);
|
| }
|
|
|
| return GetDevicesInfo(1, false, index, name, kAdmMaxDeviceNameSize);
|
| @@ -1033,17 +1027,16 @@ int32_t AudioDeviceLinuxALSA::InitPlayout()
|
|
|
| // Start by closing any existing wave-output devices
|
| //
|
| - if (_handlePlayout != NULL)
|
| - {
|
| - LATE(snd_pcm_close)(_handlePlayout);
|
| - _handlePlayout = NULL;
|
| - _playIsInitialized = false;
|
| - if (errVal < 0)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| - " Error closing current playout sound device, error:"
|
| - " %s", LATE(snd_strerror)(errVal));
|
| - }
|
| + if (_handlePlayout != nullptr) {
|
| + LATE(snd_pcm_close)(_handlePlayout);
|
| + _handlePlayout = nullptr;
|
| + _playIsInitialized = false;
|
| + if (errVal < 0) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + " Error closing current playout sound device, error:"
|
| + " %s",
|
| + LATE(snd_strerror)(errVal));
|
| + }
|
| }
|
|
|
| // Open PCM device for playout
|
| @@ -1082,7 +1075,7 @@ int32_t AudioDeviceLinuxALSA::InitPlayout()
|
| " unable to open playback device: %s (%d)",
|
| LATE(snd_strerror)(errVal),
|
| errVal);
|
| - _handlePlayout = NULL;
|
| + _handlePlayout = nullptr;
|
| return -1;
|
| }
|
|
|
| @@ -1107,7 +1100,7 @@ int32_t AudioDeviceLinuxALSA::InitPlayout()
|
| errVal);
|
| ErrorRecovery(errVal, _handlePlayout);
|
| errVal = LATE(snd_pcm_close)(_handlePlayout);
|
| - _handlePlayout = NULL;
|
| + _handlePlayout = nullptr;
|
| return -1;
|
| }
|
|
|
| @@ -1144,10 +1137,9 @@ int32_t AudioDeviceLinuxALSA::InitPlayout()
|
| _playWarning = 0;
|
| _playError = 0;
|
|
|
| - if (_handlePlayout != NULL)
|
| - {
|
| - _playIsInitialized = true;
|
| - return 0;
|
| + if (_handlePlayout != nullptr) {
|
| + _playIsInitialized = true;
|
| + return 0;
|
| }
|
| else
|
| {
|
| @@ -1188,18 +1180,16 @@ int32_t AudioDeviceLinuxALSA::InitRecording()
|
|
|
| // Start by closing any existing pcm-input devices
|
| //
|
| - if (_handleRecord != NULL)
|
| - {
|
| - int errVal = LATE(snd_pcm_close)(_handleRecord);
|
| - _handleRecord = NULL;
|
| - _recIsInitialized = false;
|
| - if (errVal < 0)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| - " Error closing current recording sound device,"
|
| - " error: %s",
|
| - LATE(snd_strerror)(errVal));
|
| - }
|
| + if (_handleRecord != nullptr) {
|
| + int errVal = LATE(snd_pcm_close)(_handleRecord);
|
| + _handleRecord = nullptr;
|
| + _recIsInitialized = false;
|
| + if (errVal < 0) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + " Error closing current recording sound device,"
|
| + " error: %s",
|
| + LATE(snd_strerror)(errVal));
|
| + }
|
| }
|
|
|
| // Open PCM device for recording
|
| @@ -1238,7 +1228,7 @@ int32_t AudioDeviceLinuxALSA::InitRecording()
|
| WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| " unable to open record device: %s",
|
| LATE(snd_strerror)(errVal));
|
| - _handleRecord = NULL;
|
| + _handleRecord = nullptr;
|
| return -1;
|
| }
|
|
|
| @@ -1281,7 +1271,7 @@ int32_t AudioDeviceLinuxALSA::InitRecording()
|
| LATE(snd_strerror)(errVal), errVal);
|
| ErrorRecovery(errVal, _handleRecord);
|
| errVal = LATE(snd_pcm_close)(_handleRecord);
|
| - _handleRecord = NULL;
|
| + _handleRecord = nullptr;
|
| return -1;
|
| }
|
| }
|
| @@ -1314,11 +1304,10 @@ int32_t AudioDeviceLinuxALSA::InitRecording()
|
| _recordingBufferSizeIn10MS = LATE(snd_pcm_frames_to_bytes)(
|
| _handleRecord, _recordingFramesIn10MS);
|
|
|
| - if (_handleRecord != NULL)
|
| - {
|
| - // Mark recording side as initialized
|
| - _recIsInitialized = true;
|
| - return 0;
|
| + if (_handleRecord != nullptr) {
|
| + // Mark recording side as initialized
|
| + _recIsInitialized = true;
|
| + return 0;
|
| }
|
| else
|
| {
|
| @@ -1404,9 +1393,8 @@ int32_t AudioDeviceLinuxALSA::StopRecording()
|
| return 0;
|
| }
|
|
|
| - if (_handleRecord == NULL)
|
| - {
|
| - return -1;
|
| + if (_handleRecord == nullptr) {
|
| + return -1;
|
| }
|
|
|
| // Make sure we don't start recording (it's asynchronous).
|
| @@ -1425,7 +1413,7 @@ int32_t AudioDeviceLinuxALSA::StopRecording()
|
| if (_recordingBuffer)
|
| {
|
| delete [] _recordingBuffer;
|
| - _recordingBuffer = NULL;
|
| + _recordingBuffer = nullptr;
|
| }
|
|
|
| // Stop and close pcm recording device.
|
| @@ -1455,8 +1443,8 @@ int32_t AudioDeviceLinuxALSA::StopRecording()
|
| SetMicrophoneMute(false);
|
| }
|
|
|
| - // set the pcm input handle to NULL
|
| - _handleRecord = NULL;
|
| + // set the pcm input handle to null
|
| + _handleRecord = nullptr;
|
| return 0;
|
| }
|
|
|
| @@ -1530,9 +1518,8 @@ int32_t AudioDeviceLinuxALSA::StopPlayout()
|
| return 0;
|
| }
|
|
|
| - if (_handlePlayout == NULL)
|
| - {
|
| - return -1;
|
| + if (_handlePlayout == nullptr) {
|
| + return -1;
|
| }
|
|
|
| _playing = false;
|
| @@ -1549,7 +1536,7 @@ int32_t AudioDeviceLinuxALSA::StopPlayout()
|
|
|
| _playoutFramesLeft = 0;
|
| delete [] _playoutBuffer;
|
| - _playoutBuffer = NULL;
|
| + _playoutBuffer = nullptr;
|
|
|
| // stop and close pcm playout device
|
| int errVal = LATE(snd_pcm_drop)(_handlePlayout);
|
| @@ -1566,11 +1553,11 @@ int32_t AudioDeviceLinuxALSA::StopPlayout()
|
| " Error closing playout sound device, error: %s",
|
| LATE(snd_strerror)(errVal));
|
|
|
| - // set the pcm input handle to NULL
|
| + // set the pcm input handle to null
|
| _playIsInitialized = false;
|
| - _handlePlayout = NULL;
|
| + _handlePlayout = nullptr;
|
| WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
|
| - " handle_playout is now set to NULL");
|
| + " handle_playout is now set to null");
|
|
|
| return 0;
|
| }
|
| @@ -1741,82 +1728,71 @@ int32_t AudioDeviceLinuxALSA::GetDevicesInfo(
|
| return 0;
|
| }
|
|
|
| - for (void **list = hints; *list != NULL; ++list)
|
| - {
|
| - char *actualType = LATE(snd_device_name_get_hint)(*list, "IOID");
|
| - if (actualType)
|
| - { // NULL means it's both.
|
| - bool wrongType = (strcmp(actualType, type) != 0);
|
| - free(actualType);
|
| - if (wrongType)
|
| - {
|
| - // Wrong type of device (i.e., input vs. output).
|
| - continue;
|
| - }
|
| + for (void** list = hints; *list != nullptr; ++list) {
|
| + char* actualType = LATE(snd_device_name_get_hint)(*list, "IOID");
|
| + if (actualType) { // nullptr means it's both.
|
| + bool wrongType = (strcmp(actualType, type) != 0);
|
| + free(actualType);
|
| + if (wrongType) {
|
| + // Wrong type of device (i.e., input vs. output).
|
| + continue;
|
| }
|
| + }
|
|
|
| - char *name = LATE(snd_device_name_get_hint)(*list, "NAME");
|
| - if (!name)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| - "Device has no name");
|
| - // Skip it.
|
| - continue;
|
| + char* name = LATE(snd_device_name_get_hint)(*list, "NAME");
|
| + if (!name) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + "Device has no name");
|
| + // Skip it.
|
| + continue;
|
| + }
|
| +
|
| + // Now check if we actually want to show this device.
|
| + if (strcmp(name, "default") != 0 && strcmp(name, "null") != 0 &&
|
| + strcmp(name, "pulse") != 0 &&
|
| + strncmp(name, ignorePrefix, strlen(ignorePrefix)) != 0) {
|
| + // Yes, we do.
|
| + char* desc = LATE(snd_device_name_get_hint)(*list, "DESC");
|
| + if (!desc) {
|
| + // Virtual devices don't necessarily have descriptions.
|
| + // Use their names instead.
|
| + desc = name;
|
| }
|
|
|
| - // Now check if we actually want to show this device.
|
| - if (strcmp(name, "default") != 0 &&
|
| - strcmp(name, "null") != 0 &&
|
| - strcmp(name, "pulse") != 0 &&
|
| - strncmp(name, ignorePrefix, strlen(ignorePrefix)) != 0)
|
| - {
|
| - // Yes, we do.
|
| - char *desc = LATE(snd_device_name_get_hint)(*list, "DESC");
|
| - if (!desc)
|
| - {
|
| - // Virtual devices don't necessarily have descriptions.
|
| - // Use their names instead.
|
| - desc = name;
|
| - }
|
| -
|
| - if (FUNC_GET_NUM_OF_DEVICE == function)
|
| - {
|
| - WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
|
| - " Enum device %d - %s", enumCount, name);
|
| -
|
| - }
|
| - if ((FUNC_GET_DEVICE_NAME == function) &&
|
| - (enumDeviceNo == enumCount))
|
| - {
|
| - // We have found the enum device, copy the name to buffer.
|
| - strncpy(enumDeviceName, desc, ednLen);
|
| - enumDeviceName[ednLen-1] = '\0';
|
| - keepSearching = false;
|
| - // Replace '\n' with '-'.
|
| - char * pret = strchr(enumDeviceName, '\n'/*0xa*/); //LF
|
| - if (pret)
|
| - *pret = '-';
|
| - }
|
| - if ((FUNC_GET_DEVICE_NAME_FOR_AN_ENUM == function) &&
|
| - (enumDeviceNo == enumCount))
|
| - {
|
| - // We have found the enum device, copy the name to buffer.
|
| - strncpy(enumDeviceName, name, ednLen);
|
| - enumDeviceName[ednLen-1] = '\0';
|
| - keepSearching = false;
|
| - }
|
| + if (FUNC_GET_NUM_OF_DEVICE == function) {
|
| + WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
|
| + " Enum device %d - %s", enumCount, name);
|
| + }
|
| + if ((FUNC_GET_DEVICE_NAME == function) &&
|
| + (enumDeviceNo == enumCount)) {
|
| + // We have found the enum device, copy the name to buffer.
|
| + strncpy(enumDeviceName, desc, ednLen);
|
| + enumDeviceName[ednLen - 1] = '\0';
|
| + keepSearching = false;
|
| + // Replace '\n' with '-'.
|
| + char* pret = strchr(enumDeviceName, '\n' /*0xa*/); // LF
|
| + if (pret)
|
| + *pret = '-';
|
| + }
|
| + if ((FUNC_GET_DEVICE_NAME_FOR_AN_ENUM == function) &&
|
| + (enumDeviceNo == enumCount)) {
|
| + // We have found the enum device, copy the name to buffer.
|
| + strncpy(enumDeviceName, name, ednLen);
|
| + enumDeviceName[ednLen - 1] = '\0';
|
| + keepSearching = false;
|
| + }
|
|
|
| - if (keepSearching)
|
| - ++enumCount;
|
| + if (keepSearching)
|
| + ++enumCount;
|
|
|
| - if (desc != name)
|
| - free(desc);
|
| - }
|
| + if (desc != name)
|
| + free(desc);
|
| + }
|
|
|
| - free(name);
|
| + free(name);
|
|
|
| - if (!keepSearching)
|
| - break;
|
| + if (!keepSearching)
|
| + break;
|
| }
|
|
|
| err = LATE(snd_device_name_free_hint)(hints);
|
| @@ -1850,22 +1826,20 @@ int32_t AudioDeviceLinuxALSA::GetDevicesInfo(
|
|
|
| int32_t AudioDeviceLinuxALSA::InputSanityCheckAfterUnlockedPeriod() const
|
| {
|
| - if (_handleRecord == NULL)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| - " input state has been modified during unlocked period");
|
| - return -1;
|
| + if (_handleRecord == nullptr) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + " input state has been modified during unlocked period");
|
| + return -1;
|
| }
|
| return 0;
|
| }
|
|
|
| int32_t AudioDeviceLinuxALSA::OutputSanityCheckAfterUnlockedPeriod() const
|
| {
|
| - if (_handlePlayout == NULL)
|
| - {
|
| - WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| - " output state has been modified during unlocked period");
|
| - return -1;
|
| + if (_handlePlayout == nullptr) {
|
| + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
| + " output state has been modified during unlocked period");
|
| + return -1;
|
| }
|
| return 0;
|
| }
|
|
|