hal: Add support for secure dolby playback
Call audio extension IP handler interface APIs to support
secure dolby decoding in DSP.
Change-Id: I53fbe5cde743fb82f56cc9836afd4c6cec240b91
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 327d328..381651e 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2215,6 +2215,12 @@
if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)
audio_extn_keep_alive_start();
+ if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ ret = audio_extn_ip_hdlr_intf_close(out->ip_hdlr_handle, true, out);
+ if (ret < 0)
+ ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
+ }
+
ALOGV("%s: exit: status(%d)", __func__, ret);
return ret;
}
@@ -2424,6 +2430,12 @@
audio_extn_perf_lock_release(&adev->perf_lock_handle);
ALOGD("%s: exit", __func__);
+ if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ ret = audio_extn_ip_hdlr_intf_open(out->ip_hdlr_handle, true, out);
+ if (ret < 0)
+ ALOGE("%s: audio_extn_ip_hdlr_intf_open failed %d",__func__, ret);
+ }
+
return ret;
error_open:
audio_extn_perf_lock_release(&adev->perf_lock_handle);
@@ -4402,7 +4414,8 @@
popcount(out->channel_mask), out->playback_started);
/* setup a channel for client <--> adsp communication for stream events */
if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
- (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM)) {
+ (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) ||
+ (audio_extn_ip_hdlr_intf_supported(config->format))) {
hdlr_stream_cfg.pcm_device_id = platform_get_pcm_device_id(
out->usecase, PCM_PLAYBACK);
hdlr_stream_cfg.flags = out->flags;
@@ -4414,6 +4427,13 @@
out->adsp_hdlr_stream_handle = NULL;
}
}
+ if (audio_extn_ip_hdlr_intf_supported(config->format)) {
+ ret = audio_extn_ip_hdlr_intf_init(&out->ip_hdlr_handle, NULL, NULL);
+ if (ret < 0) {
+ ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d",__func__, ret);
+ out->ip_hdlr_handle = NULL;
+ }
+ }
ALOGV("%s: exit", __func__);
return 0;
@@ -4443,6 +4463,11 @@
out->adsp_hdlr_stream_handle = NULL;
}
+ if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
+ audio_extn_ip_hdlr_intf_deinit(out->ip_hdlr_handle);
+ out->ip_hdlr_handle = NULL;
+ }
+
if (out->usecase == USECASE_COMPRESS_VOIP_CALL) {
pthread_mutex_lock(&adev->lock);
ret = voice_extn_compress_voip_close_output_stream(&stream->common);