audio: hal: Check to enable IP handler interface
IP handler interface is disabled for direct
passthrough and enabled for all other usecases.
CRs-Fixed: 2088973
Change-Id: Idd11455777abea504203d632f1abdfb148b51a03
diff --git a/hal/audio_extn/hw_loopback.c b/hal/audio_extn/hw_loopback.c
index 6da9313..180e575 100644
--- a/hal/audio_extn/hw_loopback.c
+++ b/hal/audio_extn/hw_loopback.c
@@ -270,7 +270,7 @@
adev->active_input = get_next_active_input(adev);
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
+ if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) && inout->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_close(inout->ip_hdlr_handle, true, inout);
if (ret < 0)
ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
@@ -284,7 +284,7 @@
inout->adsp_hdlr_stream_handle = NULL;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) &&
+ if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) &&
inout->ip_hdlr_handle) {
audio_extn_ip_hdlr_intf_deinit(inout->ip_hdlr_handle);
inout->ip_hdlr_handle = NULL;
@@ -381,7 +381,7 @@
inout->adsp_hdlr_stream_handle = NULL;
goto exit;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format)) {
+ if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false)) {
ret = audio_extn_ip_hdlr_intf_init(&inout->ip_hdlr_handle, NULL, NULL);
if (ret < 0) {
ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d", __func__, ret);
@@ -467,7 +467,7 @@
ret = -EINVAL;
goto exit;
}
- if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
+ if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) && inout->ip_hdlr_handle) {
ret = audio_extn_ip_hdlr_intf_open(inout->ip_hdlr_handle, true, inout,
USECASE_AUDIO_TRANSCODE_LOOPBACK);
if (ret < 0) {
diff --git a/hal/audio_extn/ip_hdlr_intf.c b/hal/audio_extn/ip_hdlr_intf.c
index 21d4e07..0f31f21 100644
--- a/hal/audio_extn/ip_hdlr_intf.c
+++ b/hal/audio_extn/ip_hdlr_intf.c
@@ -116,10 +116,10 @@
uint8_t payload[0];
};
-bool audio_extn_ip_hdlr_intf_supported(audio_format_t format)
+bool audio_extn_ip_hdlr_intf_supported(audio_format_t format,bool is_direct_passthru)
{
if (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_DOLBY_TRUEHD) ||
- ((!property_get_bool("audio.offload.passthrough", false)) &&
+ ((!is_direct_passthru) &&
(((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_E_AC3) ||
((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AC3))))
return true;
diff --git a/hal/audio_extn/ip_hdlr_intf.h b/hal/audio_extn/ip_hdlr_intf.h
index e8a9166..1f2c304 100644
--- a/hal/audio_extn/ip_hdlr_intf.h
+++ b/hal/audio_extn/ip_hdlr_intf.h
@@ -37,7 +37,7 @@
int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle);
int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle);
int audio_extn_ip_hdlr_intf_deinit(void *handle);
-bool audio_extn_ip_hdlr_intf_supported(audio_format_t format);
+bool audio_extn_ip_hdlr_intf_supported(audio_format_t format, bool is_direct_passthru);
#else
@@ -45,7 +45,7 @@
#define audio_extn_ip_hdlr_intf_close(handle, is_dsp_decode, aud_sess_handle) (0)
#define audio_extn_ip_hdlr_intf_init(handle, lib_path, lib_handle) (0)
#define audio_extn_ip_hdlr_intf_deinit(handle) (0)
-#define audio_extn_ip_hdlr_intf_supported(format) (0)
+#define audio_extn_ip_hdlr_intf_supported(format, is_direct_passthru) (0)
#endif
diff --git a/hal/audio_extn/passthru.c b/hal/audio_extn/passthru.c
index 31c94f6..ee9995c 100644
--- a/hal/audio_extn/passthru.c
+++ b/hal/audio_extn/passthru.c
@@ -417,6 +417,19 @@
}
+bool audio_extn_passthru_is_direct_passthrough(struct stream_out *out)
+{
+ //check passthrough system property
+ if (!property_get_bool("audio.offload.passthrough", false)) {
+ return false;
+ }
+
+ if ((out != NULL) && (out->compr_config.codec->compr_passthr == PASSTHROUGH || out->compr_config.codec->compr_passthr == PASSTHROUGH_IEC61937))
+ return true;
+ else
+ return false;
+}
+
bool audio_extn_passthru_is_passthrough_stream(struct stream_out *out)
{
//check passthrough system property