alsa_sound: fix for SIP call mute issue.
-Mute VOIP through audio path is not supported by kernel,
so calling setVoipMicMute() to disable ""Voip Tx Mute"" fails
-Mute VOIP by cleanning buffers read if setMicMute is set
-Remove mVoipMicMute and use mMicMute for voice and VOIP
Bug: 7213748
Change-Id: Ie2a200470c16da2e4ae991c0814ec8dfb4666833
Signed-off-by: Iliyan Malchev <malchev@google.com>
diff --git a/alsa_sound/ALSAStreamOps.cpp b/alsa_sound/ALSAStreamOps.cpp
index bb3dfe6..0ce9494 100644
--- a/alsa_sound/ALSAStreamOps.cpp
+++ b/alsa_sound/ALSAStreamOps.cpp
@@ -61,7 +61,6 @@
}
}
mParent->mVoipStreamCount = 0;
- mParent->mVoipMicMute = 0;
mParent->mVoipBitRate = 0;
}
close();
@@ -348,7 +347,6 @@
ALOGD("close");
if((!strncmp(mHandle->useCase, SND_USE_CASE_VERB_IP_VOICECALL, strlen(SND_USE_CASE_VERB_IP_VOICECALL))) ||
(!strncmp(mHandle->useCase, SND_USE_CASE_MOD_PLAY_VOIP, strlen(SND_USE_CASE_MOD_PLAY_VOIP)))) {
- mParent->mVoipMicMute = false;
mParent->mVoipBitRate = 0;
mParent->mVoipStreamCount = 0;
}
diff --git a/alsa_sound/AudioHardwareALSA.cpp b/alsa_sound/AudioHardwareALSA.cpp
index ed82f52..8613cd0 100644
--- a/alsa_sound/AudioHardwareALSA.cpp
+++ b/alsa_sound/AudioHardwareALSA.cpp
@@ -71,7 +71,7 @@
}
AudioHardwareALSA::AudioHardwareALSA() :
- mALSADevice(0),mVoipStreamCount(0),mVoipMicMute(false),mVoipBitRate(0)
+ mALSADevice(0),mVoipStreamCount(0),mVoipBitRate(0)
,mCallState(0),mAcdbHandle(NULL),mCsdHandle(NULL)
{
FILE *fp;
@@ -737,7 +737,6 @@
}
if(voipstream_active == false) {
mVoipStreamCount = 0;
- mVoipMicMute = false;
alsa_handle_t alsa_handle;
unsigned long bufferSize;
if(*sampleRate == VOIP_SAMPLING_RATE_8K) {
@@ -1032,7 +1031,6 @@
}
if(voipstream_active == false) {
mVoipStreamCount = 0;
- mVoipMicMute = false;
alsa_handle_t alsa_handle;
unsigned long bufferSize;
if(*sampleRate == VOIP_SAMPLING_RATE_8K) {
@@ -1291,26 +1289,11 @@
status_t AudioHardwareALSA::setMicMute(bool state)
{
- int newMode = mode();
- ALOGD("setMicMute newMode %d",newMode);
- if(newMode == AudioSystem::MODE_IN_COMMUNICATION) {
- if (mVoipMicMute != state) {
- mVoipMicMute = state;
- ALOGD("setMicMute: mVoipMicMute %d", mVoipMicMute);
- if(mALSADevice) {
- mALSADevice->setVoipMicMute(state);
- }
- }
- } else {
- if (mMicMute != state) {
- mMicMute = state;
- ALOGD("setMicMute: mMicMute %d", mMicMute);
- if(mALSADevice) {
- if(mCSCallActive == CS_ACTIVE)
- mALSADevice->setMicMute(state);
- if(mVolteCallActive == IMS_ACTIVE)
- mALSADevice->setVoLTEMicMute(state);
- }
+ if (mMicMute != state) {
+ mMicMute = state;
+ ALOGD("setMicMute: mMicMute %d", mMicMute);
+ if(mALSADevice) {
+ mALSADevice->setMicMute(state);
}
}
return NO_ERROR;
@@ -1318,12 +1301,7 @@
status_t AudioHardwareALSA::getMicMute(bool *state)
{
- int newMode = mode();
- if(newMode == AudioSystem::MODE_IN_COMMUNICATION) {
- *state = mVoipMicMute;
- } else {
- *state = mMicMute;
- }
+ *state = mMicMute;
return NO_ERROR;
}
diff --git a/alsa_sound/AudioHardwareALSA.h b/alsa_sound/AudioHardwareALSA.h
index 3d952a4..957bf75 100644
--- a/alsa_sound/AudioHardwareALSA.h
+++ b/alsa_sound/AudioHardwareALSA.h
@@ -566,7 +566,6 @@
* Settings and Qualcomm Settings applications */
uint32_t mDevSettingsFlag;
uint32_t mVoipStreamCount;
- bool mVoipMicMute;
uint32_t mVoipBitRate;
uint32_t mIncallMode;
diff --git a/alsa_sound/AudioStreamInALSA.cpp b/alsa_sound/AudioStreamInALSA.cpp
index 30de979..031d477 100644
--- a/alsa_sound/AudioStreamInALSA.cpp
+++ b/alsa_sound/AudioStreamInALSA.cpp
@@ -445,6 +445,10 @@
else {
read += static_cast<ssize_t>((period_size));
read_pending -= period_size;
+ //Set mute by cleanning buffers read
+ if (mParent->mMicMute) {
+ memset(buffer, 0, period_size);
+ }
buffer = ((uint8_t *)buffer) + period_size;
}
@@ -491,7 +495,6 @@
return NO_ERROR;
}
mParent->mVoipStreamCount = 0;
- mParent->mVoipMicMute = 0;
#ifdef QCOM_USBAUDIO_ENABLED
} else {
ALOGD("Deregistering REC bit, musbRecordingState:%d", mParent->musbRecordingState);
diff --git a/alsa_sound/AudioStreamOutALSA.cpp b/alsa_sound/AudioStreamOutALSA.cpp
index be6951e..c9ea6b5 100644
--- a/alsa_sound/AudioStreamOutALSA.cpp
+++ b/alsa_sound/AudioStreamOutALSA.cpp
@@ -299,7 +299,6 @@
return NO_ERROR;
}
mParent->mVoipStreamCount = 0;
- mParent->mVoipMicMute = 0;
}
#ifdef QCOM_USBAUDIO_ENABLED
else if((!strcmp(mHandle->useCase, SND_USE_CASE_VERB_HIFI_LOW_POWER)) ||