From a1ae8bdcc3febb64069545ee9e7e2cacdd2d2125 Mon Sep 17 00:00:00 2001 From: Michal Bukowski Date: Mon, 8 Jul 2024 23:34:20 +0200 Subject: [PATCH] mic_privacy: IPC timeout fixed on running pipeline IPC timeout fixed and microphone privacy processing function simpified Signed-off-by: Michal Bukowski --- src/audio/copier/copier.c | 2 + src/audio/copier/copier_host.c | 6 +- .../mic_privacy_manager/mic_privacy_manager.c | 56 +++++-------------- src/lib/dma.c | 5 +- 4 files changed, 22 insertions(+), 47 deletions(-) diff --git a/src/audio/copier/copier.c b/src/audio/copier/copier.c index ce0f4b87ed05..4e1b22579d62 100644 --- a/src/audio/copier/copier.c +++ b/src/audio/copier/copier.c @@ -200,6 +200,8 @@ static int copier_init(struct processing_module *mod) comp_info(dev, "mic_privacy notifier registering, update mic state"); notifier_register(cd->mic_priv, NULL, NOTIFIER_ID_MIC_PRIVACY_STATE_CHANGE, mic_privacy_event, 0); + + LOG_INF("MBU cd= 0x%x, dev = 0x%x, mic_priv = 0x%x, mod = 0x%x", cd, dev, cd->mic_priv, md); } break; #if CONFIG_IPC4_GATEWAY diff --git a/src/audio/copier/copier_host.c b/src/audio/copier/copier_host.c index b1e6bfc92b30..ba39f2f95c30 100644 --- a/src/audio/copier/copier_host.c +++ b/src/audio/copier/copier_host.c @@ -271,7 +271,11 @@ void copier_host_dma_cb(struct comp_dev *dev, size_t bytes) buffer_stream_writeback(cd->hd->local_buffer, bytes); } - mic_privacy_process(cd->mic_priv, cd->hd->local_buffer, bytes); + + if(cd->mic_priv) + mic_privacy_process(cd->mic_priv, cd->hd->local_buffer, bytes); + + } static void copier_notifier_cb(void *arg, enum notify_id type, void *data) diff --git a/src/audio/mic_privacy_manager/mic_privacy_manager.c b/src/audio/mic_privacy_manager/mic_privacy_manager.c index 36e48ceabdd9..0277b7eb5fc8 100644 --- a/src/audio/mic_privacy_manager/mic_privacy_manager.c +++ b/src/audio/mic_privacy_manager/mic_privacy_manager.c @@ -203,59 +203,29 @@ void update_gtw_mic_state(struct mic_privacy_data *mic_priv_data, uint32_t hw_mi } } - void mic_privacy_process(struct mic_privacy_data *mic_priv, struct comp_buffer *buffer, uint32_t copy_samples) { - uint32_t sg_size_in_bytes; - sg_size_in_bytes = audio_stream_frame_bytes(&buffer->stream); - uint32_t one_ms_in_bytes = sg_size_in_bytes * (buffer->stream.runtime_stream_params.rate / 1000); - uint32_t copy_bytes = copy_samples * audio_stream_sample_bytes(&buffer->stream); - - if (mic_priv->mic_privacy_state == FADE_IN) { - if (mic_priv->fade_in_out_bytes == 0) { - //start addition - //mic_priv->mic_priv_gain_params.fade_in_sg_count = 0; - //mic_priv->mic_priv_gain_params.gain_env = 0; - - if (mic_privacy_manager_get_policy() == FW_MANAGED) { + if (mic_priv->mic_privacy_state == FADE_IN){ + mic_priv->mic_privacy_state = UNMUTED; - //TODO set hda hw bit - //REGISTER(DGLISxCS)(stream_idx)->part.ddz = 1; - //REGISTER(DGLISxCS)(stream_idx)->part.ddz = 0; - } - } - mic_priv->fade_in_out_bytes += copy_bytes; - if (mic_priv->fade_in_out_bytes > one_ms_in_bytes * mic_priv->max_ramp_time_in_ms) { - mic_priv->mic_privacy_state = UNMUTED; - mic_priv->fade_in_out_bytes = 0; - } - - if (mic_priv->max_ramp_time_in_ms > 0) { - //gain_input(buffer, &mic_priv->mic_priv_gain_params, &mic_priv->mic_priv_gain_coefs_ioctl, copy_bytes); - buffer_zero(buffer); //Gain temporarily disabled - } } else if (mic_priv->mic_privacy_state == FADE_OUT){ - if (mic_priv->fade_in_out_bytes == 0) { - //start subtraction + mic_priv->mic_privacy_state = MUTED; + buffer_zero(buffer); - //mic_priv->mic_priv_gain_params.fade_in_sg_count = 0; - //mic_priv->mic_priv_gain_params.gain_env = MAX_INT64; - } - mic_priv->fade_in_out_bytes += copy_bytes; - if (mic_priv->fade_in_out_bytes > one_ms_in_bytes * mic_priv->max_ramp_time_in_ms) { - mic_priv->mic_privacy_state = MUTED; - mic_priv->fade_in_out_bytes = 0; - } - if (mic_priv->max_ramp_time_in_ms > 0) { - //LOG_INF("FADE_OUT dmic_gain_input ramp time ms = %d", mic_priv->max_ramp_time_in_ms); - //gain_input(buffer, &mic_priv->mic_priv_gain_params, &mic_priv->mic_priv_gain_coefs_ioctl, copy_bytes); - buffer_zero(buffer); //Gain temporarily disabled - } } else if (mic_priv->mic_privacy_state == MUTED) { buffer_zero(buffer); } + else if (mic_priv->mic_privacy_state == UNMUTED) { + + } + else + { + LOG_ERR("mic_privacy_process invalid state 0x%x", mic_priv->mic_privacy_state); + } + } + diff --git a/src/lib/dma.c b/src/lib/dma.c index 4496853f5178..a7aaa08d08bc 100644 --- a/src/lib/dma.c +++ b/src/lib/dma.c @@ -397,13 +397,12 @@ int dma_buffer_copy_from_no_consume(struct comp_dev *dev, struct comp_buffer *so /* process data */ ret = process(istream, 0, &sink->stream, 0, samples); - struct processing_module *mod = comp_get_drvdata(dev); + struct processing_module *mod = comp_mod(dev); struct copier_data *cd = module_get_private_data(mod); - if(cd->mic_priv) { + if(cd->mic_priv) mic_privacy_process(cd->mic_priv, sink, samples); - } buffer_stream_writeback(sink, sink_bytes);