diff options
| author | Dan Pasanen <dan.pasanen@gmail.com> | 2017-02-23 18:43:00 -0600 |
|---|---|---|
| committer | Dan Pasanen <dan.pasanen@gmail.com> | 2017-02-23 18:43:00 -0600 |
| commit | bc83ef06cf69f04a11f70dd19b326c9329f9e1ae (patch) | |
| tree | 42b40c8bc1a0e16b696ad025dd0a5431f85485d3 | |
| parent | 584bfb872e470e8596e1d7b640e8f5bc6dcaa0fe (diff) | |
| parent | 2692d9d2287dcc6150587a01b4af38f641802e55 (diff) | |
| download | hardware_qcom_audio-cm-14.1_old.tar.gz hardware_qcom_audio-cm-14.1_old.tar.bz2 hardware_qcom_audio-cm-14.1_old.zip | |
Merge tag 'android-7.1.1_r21' into cm-14.1cm-14.1_old
Android 7.1.1 release 21
# gpg: Signature made Wed 01 Feb 2017 04:40:18 PM CST
# gpg: using DSA key E8AD3F819AB10E78
# gpg: Can't check signature: No public key
| -rw-r--r-- | post_proc/volume_listener.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/post_proc/volume_listener.c b/post_proc/volume_listener.c index 4a48a250..1402ae61 100644 --- a/post_proc/volume_listener.c +++ b/post_proc/volume_listener.c @@ -18,6 +18,7 @@ //#define LOG_NDEBUG 0 #include <stdlib.h> #include <dlfcn.h> +#include <math.h> #include <cutils/list.h> #include <cutils/log.h> @@ -229,7 +230,7 @@ static void check_and_set_gain_dep_cal() { // iterate through list and make decision to set new gain dep cal level for speaker device // 1. find all usecase active on speaker - // 2. find average of left and right for each usecase + // 2. find energy sum for each usecase // 3. find the highest of all the active usecase // 4. if new value is different than the current value then load new calibration @@ -243,15 +244,22 @@ static void check_and_set_gain_dep_cal() ALOGV("%s ==> Start ...", __func__); - // select the highest volume on speaker device + float sum_energy = 0.0; + bool sum_energy_used = false; + float temp_vol = 0; + // compute energy sum for the active speaker device (pick loudest of both channels) list_for_each(node, &vol_effect_list) { context = node_to_item(node, struct vol_listener_context_s, effect_list_node); if ((context->state == VOL_LISTENER_STATE_ACTIVE) && - (context->dev_id & AUDIO_DEVICE_OUT_SPEAKER) && - (new_vol < (context->left_vol + context->right_vol) / 2)) { - new_vol = (context->left_vol + context->right_vol) / 2; + (context->dev_id & AUDIO_DEVICE_OUT_SPEAKER)) { + sum_energy_used = true; + temp_vol = fmax(context->left_vol, context->right_vol); + sum_energy += temp_vol * temp_vol; } } + if (sum_energy_used) { + new_vol = fmin(sqrt(sum_energy), 1.0); + } if (new_vol != current_vol) { ALOGV("%s:: Change in decision :: current volume is %f new volume is %f", |
