mirror of https://github.com/thesofproject/sof.git
module: prepare sink & source in bind & unbind function
Module will update source & sink information when bind & unbind event happen. Signed-off-by: Rander Wang <rander.wang@intel.com>
This commit is contained in:
parent
af3fa413cb
commit
994aec92c1
|
@ -154,22 +154,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;
|
||||
|
||||
list_for_item(blist, &dev->bsource_list)
|
||||
num_sources++;
|
||||
/* 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->bsink_list)
|
||||
num_sinks++;
|
||||
i = 0;
|
||||
list_for_item(blist, &dev->bsource_list) {
|
||||
struct comp_buffer *source_buffer =
|
||||
container_of(blist, struct comp_buffer, sink_list);
|
||||
|
||||
comp_dbg(dev, "num_sources=%d num_sinks=%d", num_sources, num_sinks);
|
||||
mod->sources[i] = audio_stream_get_source(&source_buffer->stream);
|
||||
i++;
|
||||
}
|
||||
mod->num_of_sources = i;
|
||||
|
||||
if (num_sources != 1 || num_sinks != 1)
|
||||
comp_dbg(dev, "num_sources=%d num_sinks=%d", mod->num_of_sinks, mod->num_of_sources);
|
||||
|
||||
if (mod->num_of_sinks != 1 || mod->num_of_sources != 1)
|
||||
return true;
|
||||
|
||||
/* re-assign the source/sink modules */
|
||||
|
@ -189,7 +202,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;
|
||||
}
|
||||
|
@ -203,7 +216,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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
Loading…
Reference in New Issue