hal: Audiosphere SA+ concurrency implementation
Audiosphere effect cannot be used along with any other SA+
effects, and needs handling for such concurrent use cases.
Remove audiosphere controls from audio extention, these controls
are now moved to audio post_proc module, where both audiosphere
and SA+ events are made available providing easy detection and
handling for concurrent use cases.
Extend audio hal's set and get parameter functionality to post_proc
module, this is required to set/get audiosphere params inside
post_proc module.
Change-Id: Ia4b6dcf74b2434f3751cd76e02704b62fc30f822
diff --git a/hal/Android.mk b/hal/Android.mk
index 0edc5a3..ec23dfb 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -227,10 +227,6 @@
LOCAL_SRC_FILES += audio_extn/source_track.c
endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_AUDIOSPHERE)),true)
- LOCAL_CFLAGS += -DAUDIOSPHERE_ENABLED
-endif
-
LOCAL_SHARED_LIBRARIES := \
liblog \
libcutils \
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 34da4fe..061af81 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -81,8 +81,6 @@
/* Query offload playback instances count */
#define AUDIO_PARAMETER_OFFLOAD_NUM_ACTIVE "offload_num_active"
#define AUDIO_PARAMETER_HPX "HPX"
-#define AUDIO_PARAMETER_KEY_ASPHERE_ENABLE "asphere_enable"
-#define AUDIO_PARAMETER_KEY_ASPHERE_STRENGTH "asphere_strength"
#ifndef FM_ENABLED
#define audio_extn_fm_set_parameters(adev, parms) (0)
@@ -558,103 +556,6 @@
return ret;
}
-#ifndef AUDIOSPHERE_ENABLED
-#define audio_extn_asphere_set_parameters(adev, parms) (0)
-#define audio_extn_asphere_get_parameters(adev, query, reply) (0)
-#else
-int32_t audio_extn_asphere_set_parameters(const struct audio_device *adev,
- struct str_parms *parms)
-{
- int ret = 0, val[2];
- char value[32] = {0};
- int set_enable, set_strength;
- int enable = -1, strength = -1;
- struct mixer_ctl *ctl = NULL;
- const char *mixer_ctl_name = "MSM ASphere Set Param";
- char propValue[PROPERTY_VALUE_MAX] = {0};
- bool asphere_prop_enabled = false;
-
- if (property_get("audio.pp.asphere.enabled", propValue, "false")) {
- if (!strncmp("true", propValue, 4))
- asphere_prop_enabled = true;
- }
-
- if (!asphere_prop_enabled) {
- ALOGV("%s: property not set!!! not doing anything", __func__);
- return ret;
- }
-
- set_enable = str_parms_get_str(parms,
- AUDIO_PARAMETER_KEY_ASPHERE_ENABLE,
- value, sizeof(value));
- if (set_enable > 0)
- enable = atoi(value);
-
- set_strength = str_parms_get_str(parms,
- AUDIO_PARAMETER_KEY_ASPHERE_STRENGTH,
- value, sizeof(value));
- if (set_strength > 0)
- strength = atoi(value);
-
- if (set_enable >= 0 || set_strength >= 0) {
- ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
- if (!ctl) {
- ALOGE("%s: could not get ctl for mixer cmd - %s",
- __func__, mixer_ctl_name);
- return -EINVAL;
- }
- ALOGD("%s: set ctl \"%s:%d,%d\"",
- __func__, mixer_ctl_name, enable, strength);
- val[0] = enable;
- val[1] = strength;
- ret = mixer_ctl_set_array(ctl, val, sizeof(val)/sizeof(val[0]));
- if (ret)
- ALOGE("%s: set ctl failed!!!\"%s:%d,%d\"",
- __func__, mixer_ctl_name, enable, strength);
- }
- ALOGV("%s: exit ret %d", __func__, ret);
- return ret;
-}
-
-int32_t audio_extn_asphere_get_parameters(const struct audio_device *adev,
- struct str_parms *query,
- struct str_parms *reply)
-{
- int ret = 0, val[2] = {-1, -1};
- char value[32] = {0};
- int get_enable, get_strength;
- struct mixer_ctl *ctl = NULL;
- const char *mixer_ctl_name = "MSM ASphere Set Param";
-
- get_enable = str_parms_get_str(query,
- AUDIO_PARAMETER_KEY_ASPHERE_ENABLE,
- value, sizeof(value));
- get_strength = str_parms_get_str(query,
- AUDIO_PARAMETER_KEY_ASPHERE_STRENGTH,
- value, sizeof(value));
- if (get_enable > 0 || get_strength > 0) {
- ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
- if (!ctl) {
- ALOGE("%s: could not get ctl for mixer cmd - %s",
- __func__, mixer_ctl_name);
- return -EINVAL;
- }
- ret = mixer_ctl_get_array(ctl, val, sizeof(val)/sizeof(val[0]));
- if (ret)
- ALOGE("%s: got ctl failed!!! \"%s:%d,%d\"",
- __func__, mixer_ctl_name, val[0], val[1]);
- if (get_enable > 0)
- str_parms_add_int(reply,
- AUDIO_PARAMETER_KEY_ASPHERE_ENABLE, val[0]);
- if (get_strength > 0)
- str_parms_add_int(reply,
- AUDIO_PARAMETER_KEY_ASPHERE_STRENGTH, val[1]);
- }
- ALOGV("%s: exit ret %d", __func__, ret);
- return ret;
-}
-#endif
-
void audio_extn_set_parameters(struct audio_device *adev,
struct str_parms *parms)
{
@@ -672,7 +573,8 @@
audio_extn_hpx_set_parameters(adev, parms);
audio_extn_pm_set_parameters(parms);
audio_extn_source_track_set_parameters(adev, parms);
- audio_extn_asphere_set_parameters(adev, parms);
+ if (adev->offload_effects_set_parameters != NULL)
+ adev->offload_effects_set_parameters(parms);
}
void audio_extn_get_parameters(const struct audio_device *adev,
@@ -686,7 +588,8 @@
audio_extn_dts_eagle_get_parameters(adev, query, reply);
audio_extn_hpx_get_parameters(query, reply);
audio_extn_source_track_get_parameters(adev, query, reply);
- audio_extn_asphere_get_parameters(adev, query, reply);
+ if (adev->offload_effects_get_parameters != NULL)
+ adev->offload_effects_get_parameters(query, reply);
kv_pairs = str_parms_to_str(reply);
ALOGD_IF(kv_pairs != NULL, "%s: returns %s", __func__, kv_pairs);
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index e2db95b..33fa0bf 100755
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3738,6 +3738,13 @@
adev->offload_effects_set_hpx_state =
(int (*)(bool))dlsym(adev->offload_effects_lib,
"offload_effects_bundle_set_hpx_state");
+ adev->offload_effects_get_parameters =
+ (void (*)(struct str_parms *, struct str_parms *))
+ dlsym(adev->offload_effects_lib,
+ "offload_effects_bundle_get_parameters");
+ adev->offload_effects_set_parameters =
+ (void (*)(struct str_parms *))dlsym(adev->offload_effects_lib,
+ "offload_effects_bundle_set_parameters");
}
}
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 45e90b7..f01d38d 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -323,6 +323,9 @@
struct sound_card_status snd_card_status;
int (*offload_effects_set_hpx_state)(bool);
+ void (*offload_effects_get_parameters)(struct str_parms *,
+ struct str_parms *);
+ void (*offload_effects_set_parameters)(struct str_parms *);
};
int select_devices(struct audio_device *adev,