Merge "hal: fix the set_echo_reference call sites"
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index b641bdb..06bcac8 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -56,7 +56,7 @@
struct str_parms *parms);
#endif
#ifndef HFP_ENABLED
-void audio_extn_hfp_set_parameters(adev, parms) (0)
+#define audio_extn_hfp_set_parameters(adev, parms) (0)
#else
void audio_extn_hfp_set_parameters(struct audio_device *adev,
struct str_parms *parms);
diff --git a/hal/audio_extn/spkr_protection.c b/hal/audio_extn/spkr_protection.c
index f89fe86..0c131cd 100644
--- a/hal/audio_extn/spkr_protection.c
+++ b/hal/audio_extn/spkr_protection.c
@@ -468,8 +468,11 @@
}
goahead = true;
}
- if (!list_empty(&adev->usecase_list))
+ if (!list_empty(&adev->usecase_list)) {
+ ALOGD("%s: Usecase active re-try calibration", __func__);
goahead = false;
+ pthread_mutex_unlock(&handle.mutex_spkr_prot);
+ }
if (goahead) {
int status;
status = spkr_calibrate(t0);
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 3c64c93..13dd21c 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -458,7 +458,7 @@
checkA2dpSuspend();
checkOutputForAllStrategies();
updateDevicesAndOutputs();
- for (int i = mOutputs.size() -1; i >= 0; i--) {
+ for (int i = 0; i < mOutputs.size(); i++) {
audio_io_handle_t output = mOutputs.keyAt(i);
audio_devices_t newDevice = getNewDevice(output, true /*fromCache*/);
setOutputDevice(output, newDevice, (newDevice != AUDIO_DEVICE_NONE));
@@ -924,6 +924,17 @@
}
}
+bool AudioPolicyManager::isDirectOutput(audio_io_handle_t output) {
+ for (size_t i = 0; i < mOutputs.size(); i++) {
+ audio_io_handle_t curOutput = mOutputs.keyAt(i);
+ AudioOutputDescriptor *desc = mOutputs.valueAt(i);
+ if ((curOutput == output) && (desc->mFlags & AUDIO_OUTPUT_FLAG_DIRECT)) {
+ return true;
+ }
+ }
+ return false;
+}
+
status_t AudioPolicyManager::checkAndSetVolume(int stream,
int index,
audio_io_handle_t output,
@@ -986,7 +997,8 @@
// Force voice volume to max for bluetooth SCO as volume is managed by the headset
voiceVolume = 1.0;
- if (voiceVolume != mLastVoiceVolume && output == mPrimaryOutput) {
+ if (voiceVolume != mLastVoiceVolume && ((output == mPrimaryOutput) ||
+ isDirectOutput(output))) {
mpClientInterface->setVoiceVolume(voiceVolume, delayMs);
mLastVoiceVolume = voiceVolume;
}
diff --git a/policy_hal/AudioPolicyManager.h b/policy_hal/AudioPolicyManager.h
index 6a2db85..3b80977 100644
--- a/policy_hal/AudioPolicyManager.h
+++ b/policy_hal/AudioPolicyManager.h
@@ -80,6 +80,9 @@
// returns the category the device belongs to with regard to volume curve management
static device_category getDeviceCategory(audio_devices_t device);
+ // returns true if give output is direct output
+ bool isDirectOutput(audio_io_handle_t output);
+
static const char* HDMI_SPKR_STR;
//parameter indicates of HDMI speakers disabled from the Qualcomm settings