mirror of https://github.com/thesofproject/sof.git
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:
parent
b6eaf11121
commit
9272126dd3
|
@ -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) *
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue