Skip to content

Commit

Permalink
mic_privacy: IPC timeout fixed on running pipeline
Browse files Browse the repository at this point in the history
IPC timeout fixed and microphone privacy processing
function simpified

Signed-off-by: Michal Bukowski <michal.bukowski@intel.com>
  • Loading branch information
mbukowsk authored and abonislawski committed Jul 9, 2024
1 parent 786626d commit a1ae8bd
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 47 deletions.
2 changes: 2 additions & 0 deletions src/audio/copier/copier.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion src/audio/copier/copier_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
56 changes: 13 additions & 43 deletions src/audio/mic_privacy_manager/mic_privacy_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}


5 changes: 2 additions & 3 deletions src/lib/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit a1ae8bd

Please sign in to comment.