Merge "AudioFlinger: mute mic on primary HAL only" into rvc-dev am: a73e0d674d am: 42e0f92ffd
Change-Id: I0b3ac99f73cb00d7187df5f7ce1578ef04d52a85
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 5c891e2..03c16f3 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1185,15 +1185,21 @@
}
AutoMutex lock(mHardwareLock);
+ sp<DeviceHalInterface> primaryDev = mPrimaryHardwareDev->hwDevice();
+ if (primaryDev == nullptr) {
+ ALOGW("%s: no primary HAL device", __func__);
+ return INVALID_OPERATION;
+ }
mHardwareStatus = AUDIO_HW_SET_MIC_MUTE;
+ ret = primaryDev->setMicMute(state);
for (size_t i = 0; i < mAudioHwDevs.size(); i++) {
sp<DeviceHalInterface> dev = mAudioHwDevs.valueAt(i)->hwDevice();
- status_t result = dev->setMicMute(state);
- if (result != NO_ERROR) {
- ret = result;
+ if (dev != primaryDev) {
+ (void)dev->setMicMute(state);
}
}
mHardwareStatus = AUDIO_HW_IDLE;
+ ALOGW_IF(ret != NO_ERROR, "%s: error %d setting state to HAL", __func__, ret);
return ret;
}
@@ -1203,20 +1209,18 @@
if (ret != NO_ERROR) {
return false;
}
- bool mute = true;
- bool state = AUDIO_MODE_INVALID;
AutoMutex lock(mHardwareLock);
- mHardwareStatus = AUDIO_HW_GET_MIC_MUTE;
- for (size_t i = 0; i < mAudioHwDevs.size(); i++) {
- sp<DeviceHalInterface> dev = mAudioHwDevs.valueAt(i)->hwDevice();
- status_t result = dev->getMicMute(&state);
- if (result == NO_ERROR) {
- mute = mute && state;
- }
+ sp<DeviceHalInterface> primaryDev = mPrimaryHardwareDev->hwDevice();
+ if (primaryDev == nullptr) {
+ ALOGW("%s: no primary HAL device", __func__);
+ return false;
}
+ bool state;
+ mHardwareStatus = AUDIO_HW_GET_MIC_MUTE;
+ ret = primaryDev->getMicMute(&state);
mHardwareStatus = AUDIO_HW_IDLE;
-
- return mute;
+ ALOGE_IF(ret != NO_ERROR, "%s: error %d getting state from HAL", __func__, ret);
+ return (ret == NO_ERROR) && state;
}
void AudioFlinger::setRecordSilenced(audio_port_handle_t portId, bool silenced)