From bcf9df29d40d5dee7b6d6c5ba93072d51bd8a47d Mon Sep 17 00:00:00 2001 From: Eddy Hsu Date: Thu, 15 Aug 2024 20:51:42 +0000 Subject: [PATCH] comp: ctc: properly set up and clean component state. Check CTC state is properly inited and cleanup. Signed-off-by: Eddy Hsu --- src/audio/google/google_ctc_audio_processing.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/audio/google/google_ctc_audio_processing.c b/src/audio/google/google_ctc_audio_processing.c index b7c34b59382c..c417303655b6 100644 --- a/src/audio/google/google_ctc_audio_processing.c +++ b/src/audio/google/google_ctc_audio_processing.c @@ -243,6 +243,8 @@ static int ctc_free(struct processing_module *mod) { struct google_ctc_audio_processing_comp_data *cd = module_get_private_data(mod); + comp_info(mod->dev, "ctc_free()"); + if (cd) { rfree(cd->input); rfree(cd->output); @@ -386,6 +388,10 @@ static int ctc_prepare(struct processing_module *mod, audio_stream_get_rate(&source->stream), /*config=*/NULL, /*config_size=*/0); + if (!cd->state) { + comp_err(mod->dev, "ctc_prepare(), failed to create CTC"); + return -ENOMEM; + } cd->config = comp_get_data_blob(cd->tuning_handler, NULL, NULL); return 0; @@ -394,11 +400,17 @@ static int ctc_prepare(struct processing_module *mod, static int ctc_reset(struct processing_module *mod) { struct google_ctc_audio_processing_comp_data *cd = module_get_private_data(mod); + size_t buf_size = cd->chunk_frames * sizeof(cd->input[0]) * kMaxChannels; comp_info(mod->dev, "ctc_reset()"); GoogleCtcAudioProcessingFree(cd->state); + cd->state = NULL; cd->ctc_func = NULL; + cd->input_samples = 0; + cd->next_avail_output_samples = 0; + memset(cd->input, 0, buf_size); + memset(cd->output, 0, buf_size); return 0; }