Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 0 additions & 33 deletions src/audio/module_adapter/module_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,39 +119,6 @@ struct comp_dev *module_adapter_new(const struct comp_driver *drv,
return NULL;
}

static int module_adapter_sink_src_prepare(struct comp_dev *dev)
{
struct processing_module *mod = comp_get_drvdata(dev);
struct list_item *blist;
int ret;
int i;

/* acquire all sink and source buffers, get handlers to sink/source API */
i = 0;
list_for_item(blist, &dev->bsink_list) {
struct comp_buffer *sink_buffer =
container_of(blist, struct comp_buffer, source_list);
mod->sinks[i] = audio_stream_get_sink(&sink_buffer->stream);
i++;
}
mod->num_of_sinks = i;

i = 0;
list_for_item(blist, &dev->bsource_list) {
struct comp_buffer *source_buffer =
container_of(blist, struct comp_buffer, sink_list);

mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
i++;
}
mod->num_of_sources = i;

/* Prepare module */
ret = module_prepare(mod, mod->sources, mod->num_of_sources, mod->sinks, mod->num_of_sinks);

return ret;
}

#if CONFIG_ZEPHYR_DP_SCHEDULER
static int module_adapter_dp_queue_prepare(struct comp_dev *dev)
{
Expand Down
33 changes: 33 additions & 0 deletions src/audio/module_adapter/module_adapter_ipc3.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,3 +287,36 @@ int module_adapter_cmd(struct comp_dev *dev, int cmd, void *data, int max_data_s
comp_dbg(dev, "module_adapter_cmd() done");
return ret;
}

int module_adapter_sink_src_prepare(struct comp_dev *dev)
{
struct processing_module *mod = comp_get_drvdata(dev);
struct list_item *blist;
int ret;
int i;

/* acquire all sink and source buffers, get handlers to sink/source API */
i = 0;
list_for_item(blist, &dev->bsink_list) {
struct comp_buffer *sink_buffer =
container_of(blist, struct comp_buffer, source_list);
mod->sinks[i] = audio_stream_get_sink(&sink_buffer->stream);
i++;
}
mod->num_of_sinks = i;

i = 0;
list_for_item(blist, &dev->bsource_list) {
struct comp_buffer *source_buffer =
container_of(blist, struct comp_buffer, sink_list);

mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
i++;
}
mod->num_of_sources = i;

/* Prepare module */
ret = module_prepare(mod, mod->sources, mod->num_of_sources, mod->sinks, mod->num_of_sinks);

return ret;
}
43 changes: 32 additions & 11 deletions src/audio/module_adapter/module_adapter_ipc4.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,22 +155,35 @@ int module_adapter_get_attribute(struct comp_dev *dev, uint32_t type, void *valu
return 0;
}

static bool module_adapter_multi_sink_source_check(struct comp_dev *dev)
static bool module_adapter_multi_sink_source_prepare(struct comp_dev *dev)
{
struct processing_module *mod = comp_get_drvdata(dev);
struct list_item *blist;
int num_sources = 0;
int num_sinks = 0;
int i;

/* acquire all sink and source buffers, get handlers to sink/source API */
i = 0;
list_for_item(blist, &dev->bsink_list) {
struct comp_buffer *sink_buffer =
container_of(blist, struct comp_buffer, source_list);
mod->sinks[i] = audio_stream_get_sink(&sink_buffer->stream);
i++;
}
mod->num_of_sinks = i;

list_for_item(blist, &dev->bsource_list)
num_sources++;
i = 0;
list_for_item(blist, &dev->bsource_list) {
struct comp_buffer *source_buffer =
container_of(blist, struct comp_buffer, sink_list);

list_for_item(blist, &dev->bsink_list)
num_sinks++;
mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
i++;
}
mod->num_of_sources = i;

comp_dbg(dev, "num_sources=%d num_sinks=%d", num_sources, num_sinks);
comp_dbg(dev, "num_sources=%d num_sinks=%d", mod->num_of_sinks, mod->num_of_sources);

if (num_sources != 1 || num_sinks != 1)
if (mod->num_of_sinks != 1 || mod->num_of_sources != 1)
return true;

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

mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_check(dev);
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_prepare(dev);

return 0;
}
Expand All @@ -204,7 +217,7 @@ int module_adapter_unbind(struct comp_dev *dev, void *data)
if (ret < 0)
return ret;

mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_check(dev);
mod->stream_copy_single_to_single = !module_adapter_multi_sink_source_prepare(dev);

return 0;
}
Expand All @@ -224,3 +237,11 @@ uint64_t module_adapter_get_total_data_processed(struct comp_dev *dev,
return mod->total_data_consumed;
}

int module_adapter_sink_src_prepare(struct comp_dev *dev)
{
struct processing_module *mod = comp_get_drvdata(dev);

/* Prepare module */
return module_prepare(mod, mod->sources, mod->num_of_sources,
mod->sinks, mod->num_of_sinks);
}
1 change: 1 addition & 0 deletions src/include/sof/audio/module_adapter/module/generic.h
Original file line number Diff line number Diff line change
Expand Up @@ -325,4 +325,5 @@ void module_adapter_check_data(struct processing_module *mod, struct comp_dev *d
void module_adapter_set_params(struct processing_module *mod, struct sof_ipc_stream_params *params);
int module_adapter_set_state(struct processing_module *mod, struct comp_dev *dev,
int cmd);
int module_adapter_sink_src_prepare(struct comp_dev *dev);
#endif /* __SOF_AUDIO_MODULE_GENERIC__ */
2 changes: 2 additions & 0 deletions src/include/sof/audio/module_adapter/module/modules.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ static inline void declare_dynamic_module_adapter(struct comp_driver *drv,
drv->ops.set_large_config = module_set_large_config;
drv->ops.get_large_config = module_get_large_config;
drv->ops.get_attribute = module_adapter_get_attribute;
drv->ops.bind = module_adapter_bind;
drv->ops.unbind = module_adapter_unbind;
}

#endif /* __SOF_AUDIO_MODULES__ */