Skip to content

Commit f2dbad7

Browse files
committed
module: prepare sink & source in bind & unbind function
Module will update source & sink information when bind & unbind event happen. Remove duplicate source & sink prepare in prepare function. Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com> Signed-off-by: Rander Wang <rander.wang@intel.com>
1 parent a41f26d commit f2dbad7

File tree

3 files changed

+31
-48
lines changed

3 files changed

+31
-48
lines changed

src/audio/module_adapter/module_adapter.c

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -119,39 +119,6 @@ struct comp_dev *module_adapter_new(const struct comp_driver *drv,
119119
return NULL;
120120
}
121121

122-
static int module_adapter_sink_src_prepare(struct comp_dev *dev)
123-
{
124-
struct processing_module *mod = comp_get_drvdata(dev);
125-
struct list_item *blist;
126-
int ret;
127-
int i;
128-
129-
/* acquire all sink and source buffers, get handlers to sink/source API */
130-
i = 0;
131-
list_for_item(blist, &dev->bsink_list) {
132-
struct comp_buffer *sink_buffer =
133-
container_of(blist, struct comp_buffer, source_list);
134-
mod->sinks[i] = audio_stream_get_sink(&sink_buffer->stream);
135-
i++;
136-
}
137-
mod->num_of_sinks = i;
138-
139-
i = 0;
140-
list_for_item(blist, &dev->bsource_list) {
141-
struct comp_buffer *source_buffer =
142-
container_of(blist, struct comp_buffer, sink_list);
143-
144-
mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
145-
i++;
146-
}
147-
mod->num_of_sources = i;
148-
149-
/* Prepare module */
150-
ret = module_prepare(mod, mod->sources, mod->num_of_sources, mod->sinks, mod->num_of_sinks);
151-
152-
return ret;
153-
}
154-
155122
#if CONFIG_ZEPHYR_DP_SCHEDULER
156123
static int module_adapter_dp_queue_prepare(struct comp_dev *dev)
157124
{
@@ -171,7 +138,7 @@ static int module_adapter_dp_queue_prepare(struct comp_dev *dev)
171138
list_init(&mod->dp_queue_ll_to_dp_list);
172139
list_init(&mod->dp_queue_dp_to_ll_list);
173140

174-
ret = module_adapter_sink_src_prepare(dev);
141+
ret = module_prepare(mod, mod->sources, mod->num_of_sources, mod->sinks, mod->num_of_sinks);
175142
if (ret)
176143
return ret;
177144

@@ -198,7 +165,7 @@ static int module_adapter_dp_queue_prepare(struct comp_dev *dev)
198165
goto err;
199166
dp_queue_append_to_list(dp_queue, &mod->dp_queue_ll_to_dp_list);
200167

201-
/* it will override source pointers set by module_adapter_sink_src_prepare
168+
/* it will override source pointers set before
202169
* module will use shadow dpQueue for processing
203170
*/
204171
mod->sources[i] = dp_queue_get_source(dp_queue);
@@ -232,7 +199,7 @@ static int module_adapter_dp_queue_prepare(struct comp_dev *dev)
232199
goto err;
233200

234201
dp_queue_append_to_list(dp_queue, &mod->dp_queue_dp_to_ll_list);
235-
/* it will override sink pointers set by module_adapter_sink_src_prepare
202+
/* it will override sink pointers set before
236203
* module will use shadow dpQueue for processing
237204
*/
238205
mod->sinks[i] = dp_queue_get_sink(dp_queue);
@@ -328,7 +295,8 @@ int module_adapter_prepare(struct comp_dev *dev)
328295

329296
else if (IS_PROCESSING_MODE_SINK_SOURCE(mod) &&
330297
mod->dev->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_LL)
331-
ret = module_adapter_sink_src_prepare(dev);
298+
ret = module_prepare(mod, mod->sources, mod->num_of_sources,
299+
mod->sinks, mod->num_of_sinks);
332300

333301
else if ((IS_PROCESSING_MODE_RAW_DATA(mod) || IS_PROCESSING_MODE_AUDIO_STREAM(mod)) &&
334302
mod->dev->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_LL)

src/audio/module_adapter/module_adapter_ipc4.c

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,22 +155,35 @@ int module_adapter_get_attribute(struct comp_dev *dev, uint32_t type, void *valu
155155
return 0;
156156
}
157157

158-
static bool module_adapter_multi_sink_source_check(struct comp_dev *dev)
158+
static bool module_adapter_multi_sink_source_prepare(struct comp_dev *dev)
159159
{
160160
struct processing_module *mod = comp_get_drvdata(dev);
161161
struct list_item *blist;
162-
int num_sources = 0;
163-
int num_sinks = 0;
162+
int i;
163+
164+
/* acquire all sink and source buffers, get handlers to sink/source API */
165+
i = 0;
166+
list_for_item(blist, &dev->bsink_list) {
167+
struct comp_buffer *sink_buffer =
168+
container_of(blist, struct comp_buffer, source_list);
169+
mod->sinks[i] = audio_stream_get_sink(&sink_buffer->stream);
170+
i++;
171+
}
172+
mod->num_of_sinks = i;
164173

165-
list_for_item(blist, &dev->bsource_list)
166-
num_sources++;
174+
i = 0;
175+
list_for_item(blist, &dev->bsource_list) {
176+
struct comp_buffer *source_buffer =
177+
container_of(blist, struct comp_buffer, sink_list);
167178

168-
list_for_item(blist, &dev->bsink_list)
169-
num_sinks++;
179+
mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
180+
i++;
181+
}
182+
mod->num_of_sources = i;
170183

171-
comp_dbg(dev, "num_sources=%d num_sinks=%d", num_sources, num_sinks);
184+
comp_dbg(dev, "num_sources=%d num_sinks=%d", mod->num_of_sinks, mod->num_of_sinks);
172185

173-
if (num_sources != 1 || num_sinks != 1)
186+
if (mod->num_of_sinks != 1 || mod->num_of_sinks != 1)
174187
return true;
175188

176189
/* re-assign the source/sink modules */
@@ -190,7 +203,7 @@ int module_adapter_bind(struct comp_dev *dev, void *data)
190203
if (ret < 0)
191204
return ret;
192205

193-
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_check(dev);
206+
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_prepare(dev);
194207

195208
return 0;
196209
}
@@ -204,7 +217,7 @@ int module_adapter_unbind(struct comp_dev *dev, void *data)
204217
if (ret < 0)
205218
return ret;
206219

207-
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_check(dev);
220+
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_prepare(dev);
208221

209222
return 0;
210223
}

src/include/sof/audio/module_adapter/module/modules.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ static inline void declare_dynamic_module_adapter(struct comp_driver *drv,
6666
drv->ops.set_large_config = module_set_large_config;
6767
drv->ops.get_large_config = module_get_large_config;
6868
drv->ops.get_attribute = module_adapter_get_attribute;
69+
drv->ops.bind = module_adapter_bind;
70+
drv->ops.unbind = module_adapter_unbind;
6971
}
7072

7173
#endif /* __SOF_AUDIO_MODULES__ */

0 commit comments

Comments
 (0)