codec_adapter: move the check for required data into codec implementation

Move the check for required data for each process callback into the
individual codec implementation. This is in preparation for removing
in_buff_size from struct  module_processing_data eventually.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
Ranjani Sridharan 2022-03-02 20:39:30 -08:00 committed by Daniel Baluta
parent b6eaf11121
commit 9272126dd3
6 changed files with 32 additions and 12 deletions

View File

@ -509,6 +509,12 @@ cadence_codec_process(struct processing_module *mod,
struct cadence_codec_data *cd = codec->private;
int ret;
/* Proceed only if we have enough data to fill the module buffer completely */
if (input_buffers[0].size < codec->mpd.in_buff_size) {
comp_dbg(dev, "cadence_codec_process(): not enough data to process");
return -ENODATA;
}
/* do not proceed with processing if not enough free left in the local buffer */
if (codec->mpd.init_done) {
int output_bytes = cadence_codec_get_samples(dev) *

View File

@ -228,6 +228,12 @@ dts_codec_process(struct processing_module *mod,
DtsSofInterfaceResult dts_result;
unsigned int bytes_processed = 0;
/* Proceed only if we have enough data to fill the module buffer completely */
if (input_buffers[0].size < codec->mpd.in_buff_size) {
comp_dbg(dev, "dts_codec_process(): not enough data to process");
return -ENODATA;
}
if (!codec->mpd.init_done)
return dts_codec_init_process(dev);

View File

@ -245,7 +245,7 @@ int module_process(struct processing_module *mod, struct input_stream_buffer *in
ret = md->ops->process(mod, input_buffers, num_input_buffers, output_buffers,
num_output_buffers);
if (ret && ret != -ENOSPC) {
if (ret && ret != -ENOSPC && ret != -ENODATA) {
comp_err(dev, "module_process() error %d: for comp %d",
ret, dev_comp_id(dev));
return ret;

View File

@ -65,6 +65,12 @@ passthrough_codec_process(struct processing_module *mod,
struct comp_dev *dev = mod->dev;
struct module_data *codec = comp_get_module_data(dev);
/* Proceed only if we have enough data to fill the module buffer completely */
if (input_buffers[0].size < codec->mpd.in_buff_size) {
comp_dbg(dev, "passthrough_codec_process(): not enough data to process");
return -ENODATA;
}
if (!codec->mpd.init_done)
return passthrough_codec_init_process(dev);

View File

@ -715,6 +715,12 @@ waves_codec_process(struct processing_module *mod,
struct module_data *codec = comp_get_module_data(dev);
struct waves_codec_data *waves_codec = codec->private;
/* Proceed only if we have enough data to fill the module buffer completely */
if (input_buffers[0].size < codec->mpd.in_buff_size) {
comp_dbg(dev, "waves_codec_process(): not enough data to process");
return -ENODATA;
}
if (!codec->mpd.init_done)
return waves_codec_init_process(dev);

View File

@ -428,15 +428,6 @@ int codec_adapter_copy(struct comp_dev *dev)
source = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list);
bytes_to_process = cl.frames * cl.source_frame_bytes;
/* Proceed only if we have enough data to fill the lib buffer
* completely. If you don't fill whole buffer
* the lib won't process it.
*/
if (bytes_to_process < codec_buff_size) {
comp_dbg(dev, "codec_adapter_copy(): source has less data than codec buffer size - processing terminated.");
goto db_verify;
}
if (!md->mpd.init_done) {
buffer_stream_invalidate(source, codec_buff_size);
ca_copy_from_source_to_module(&source->stream, md->mpd.in_buff,
@ -444,8 +435,13 @@ int codec_adapter_copy(struct comp_dev *dev)
md->mpd.avail = codec_buff_size;
ret = module_process(mod, mod->input_buffers, mod->num_input_buffers,
mod->output_buffers, mod->num_output_buffers);
if (ret)
if (ret < 0) {
if (ret == -ENODATA) {
ret = 0;
goto db_verify;
}
goto out;
}
bytes_to_process -= md->mpd.consumed;
processed += md->mpd.consumed;
@ -461,7 +457,7 @@ int codec_adapter_copy(struct comp_dev *dev)
ret = module_process(mod, mod->input_buffers, mod->num_input_buffers,
mod->output_buffers, mod->num_output_buffers);
if (ret) {
if (ret == -ENOSPC) {
if (ret == -ENOSPC || ret == -ENODATA) {
ret = 0;
goto db_verify;
}