From a8273f27555239bb35b8acf6c4b358bae1d3a552 Mon Sep 17 00:00:00 2001 From: Shriram Shastry Date: Mon, 24 Jun 2024 10:22:40 +0530 Subject: [PATCH] Audio: Add comments to crossover_s32_default function Add detailed comments to describe the logic in crossover_s32_default. This helps in understanding the function's flow and the purpose of each section. Signed-off-by: Shriram Shastry --- src/audio/crossover/crossover_generic.c | 30 +++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/audio/crossover/crossover_generic.c b/src/audio/crossover/crossover_generic.c index 694588b59f49..adcf193f7d3a 100644 --- a/src/audio/crossover/crossover_generic.c +++ b/src/audio/crossover/crossover_generic.c @@ -225,32 +225,38 @@ static void crossover_s32_default(struct comp_data *cd, int32_t num_sinks, uint32_t frames) { + /* Array to hold active sink streams; initialized to null */ + struct audio_stream *sink_stream[SOF_CROSSOVER_MAX_STREAMS] = { NULL }; struct crossover_state *state; const struct audio_stream *source_stream = bsource->data; - struct audio_stream *sink_stream; int32_t *x, *y; int ch, i, j; int idx; + int active_sinks = 0; /* Counter for active sink streams */ int nch = audio_stream_get_channels(source_stream); int32_t out[num_sinks]; + /* Identify active sinks, avoid processing null sinks later */ + for (j = 0; j < num_sinks; j++) { + if (bsinks[j]) + sink_stream[active_sinks++] = bsinks[j]->data; + } + + /* Process for each channel */ for (ch = 0; ch < nch; ch++) { - idx = ch; + /* Set current crossover state */ state = &cd->state[ch]; - for (i = 0; i < frames; i++) { + /* Iterate over frames */ + for (i = 0, idx = ch; i < frames; i++, idx += nch) { + /* Read source */ x = audio_stream_read_frag_s32(source_stream, idx); cd->crossover_split(*x, out, state); - - for (j = 0; j < num_sinks; j++) { - if (!bsinks[j]) - continue; - sink_stream = bsinks[j]->data; - y = audio_stream_write_frag_s32(sink_stream, - idx); + /* Write output to active sinks */ + for (j = 0; j < active_sinks; j++) { + y = audio_stream_write_frag_s32(sink_stream[j], idx); + /* Copy processed data to sink */ *y = out[j]; } - - idx += nch; } } }