module_adapter: Add a new helper to update input/output stream buffers

Add a new helper to update the consumed bytes in the input stream
buffer and the produces bytes in the output stream buffer.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This commit is contained in:
Ranjani Sridharan 2022-06-16 13:46:12 -07:00 committed by Liam Girdwood
parent 2583398d45
commit ea72e3e97e
4 changed files with 57 additions and 33 deletions

View File

@ -80,8 +80,8 @@ static void eq_iir_s16_default(struct processing_module *mod, struct input_strea
const int samples = frames * nch; const int samples = frames * nch;
int processed = 0; int processed = 0;
bsource->consumed += samples << 1; module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S16_LE,
bsink->size += samples << 1; SOF_IPC_FRAME_S16_LE, samples);
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
@ -131,8 +131,8 @@ static void eq_iir_s24_default(struct processing_module *mod, struct input_strea
const int samples = frames * nch; const int samples = frames * nch;
int processed = 0; int processed = 0;
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S32_LE, samples);
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
@ -182,8 +182,8 @@ static void eq_iir_s32_default(struct processing_module *mod, struct input_strea
const int samples = frames * nch; const int samples = frames * nch;
int processed = 0; int processed = 0;
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S32_LE, samples);
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
@ -233,8 +233,8 @@ static void eq_iir_s32_16_default(struct processing_module *mod,
const int samples = frames * nch; const int samples = frames * nch;
int processed = 0; int processed = 0;
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S16_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S16_LE, samples);
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
@ -284,8 +284,8 @@ static void eq_iir_s32_24_default(struct processing_module *mod,
const int samples = frames * nch; const int samples = frames * nch;
int processed = 0; int processed = 0;
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S32_LE, samples);
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
@ -318,13 +318,12 @@ static void eq_iir_pass(struct processing_module *mod, struct input_stream_buffe
struct audio_stream __sparse_cache *source = bsource->data; struct audio_stream __sparse_cache *source = bsource->data;
struct audio_stream __sparse_cache *sink = bsink->data; struct audio_stream __sparse_cache *sink = bsink->data;
if (source->frame_fmt == SOF_IPC_FRAME_S16_LE) { if (source->frame_fmt == SOF_IPC_FRAME_S16_LE)
bsource->consumed += S16_SAMPLES_TO_BYTES(frames * source->channels); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S16_LE,
bsink->size += S16_SAMPLES_TO_BYTES(frames * source->channels); SOF_IPC_FRAME_S16_LE, frames * source->channels);
} else { else
bsource->consumed += S32_SAMPLES_TO_BYTES(frames * source->channels); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(frames * source->channels); SOF_IPC_FRAME_S32_LE, frames * source->channels);
}
audio_stream_copy(source, 0, sink, 0, frames * source->channels); audio_stream_copy(source, 0, sink, 0, frames * source->channels);
} }
@ -342,8 +341,8 @@ static void eq_iir_s32_s16_pass(struct processing_module *mod, struct input_stre
int i; int i;
int remaining_samples = frames * source->channels; int remaining_samples = frames * source->channels;
bsource->consumed += S32_SAMPLES_TO_BYTES(remaining_samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S16_SAMPLES_TO_BYTES(remaining_samples); SOF_IPC_FRAME_S16_LE, remaining_samples);
while (remaining_samples) { while (remaining_samples) {
nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x)); nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x));
@ -375,8 +374,8 @@ static void eq_iir_s32_s24_pass(struct processing_module *mod, struct input_stre
int i; int i;
int remaining_samples = frames * source->channels; int remaining_samples = frames * source->channels;
bsource->consumed += S32_SAMPLES_TO_BYTES(remaining_samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(remaining_samples); SOF_IPC_FRAME_S32_LE, remaining_samples);
while (remaining_samples) { while (remaining_samples) {
nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x)); nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x));

View File

@ -71,8 +71,8 @@ static void vol_s24_to_s24(struct processing_module *mod, struct input_stream_bu
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
bsource->consumed += S32_SAMPLES_TO_BYTES(remaining_samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(remaining_samples); SOF_IPC_FRAME_S32_LE, remaining_samples);
while (remaining_samples) { while (remaining_samples) {
nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x)); nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x));
n = MIN(remaining_samples, nmax); n = MIN(remaining_samples, nmax);
@ -133,8 +133,8 @@ static void vol_s32_to_s32(struct processing_module *mod, struct input_stream_bu
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
bsource->consumed += S32_SAMPLES_TO_BYTES(remaining_samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(remaining_samples); SOF_IPC_FRAME_S32_LE, remaining_samples);
while (remaining_samples) { while (remaining_samples) {
nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x)); nmax = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, x));
n = MIN(remaining_samples, nmax); n = MIN(remaining_samples, nmax);
@ -201,8 +201,8 @@ static void vol_s16_to_s16(struct processing_module *mod, struct input_stream_bu
x = source->r_ptr; x = source->r_ptr;
y = sink->w_ptr; y = sink->w_ptr;
bsource->consumed += S16_SAMPLES_TO_BYTES(remaining_samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S16_LE,
bsink->size += S16_SAMPLES_TO_BYTES(remaining_samples); SOF_IPC_FRAME_S16_LE, remaining_samples);
while (remaining_samples) { while (remaining_samples) {
nmax = BYTES_TO_S16_SAMPLES(audio_stream_bytes_without_wrap(source, x)); nmax = BYTES_TO_S16_SAMPLES(audio_stream_bytes_without_wrap(source, x));
n = MIN(remaining_samples, nmax); n = MIN(remaining_samples, nmax);

View File

@ -92,8 +92,8 @@ static void vol_s24_to_s24_s32(struct processing_module *mod, struct input_strea
AE_SETCBEGIN0(buf); AE_SETCBEGIN0(buf);
AE_SETCEND0(buf_end); AE_SETCEND0(buf_end);
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S32_LE, samples);
while (samples) { while (samples) {
m = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, in)); m = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, in));
@ -183,8 +183,8 @@ static void vol_s32_to_s24_s32(struct processing_module *mod, struct input_strea
AE_SETCBEGIN0(buf); AE_SETCBEGIN0(buf);
AE_SETCEND0(buf_end); AE_SETCEND0(buf_end);
bsource->consumed += S32_SAMPLES_TO_BYTES(samples); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S32_LE,
bsink->size += S32_SAMPLES_TO_BYTES(samples); SOF_IPC_FRAME_S32_LE, samples);
while (samples) { while (samples) {
m = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, in)); m = BYTES_TO_S32_SAMPLES(audio_stream_bytes_without_wrap(source, in));
@ -324,8 +324,8 @@ static void vol_s16_to_s16(struct processing_module *mod, struct input_stream_bu
} }
AE_SA64POS_FP(outu, out); AE_SA64POS_FP(outu, out);
samples -= n; samples -= n;
bsource->consumed += S16_SAMPLES_TO_BYTES(n); module_update_processing_position(bsource, bsink, SOF_IPC_FRAME_S16_LE,
bsink->size += S16_SAMPLES_TO_BYTES(n); SOF_IPC_FRAME_S16_LE, n);
in = audio_stream_wrap(source, in); in = audio_stream_wrap(source, in);
out = audio_stream_wrap(sink, out); out = audio_stream_wrap(sink, out);
} }

View File

@ -334,4 +334,29 @@ int module_set_large_config(struct comp_dev *dev, uint32_t param_id, bool first_
int module_get_large_config(struct comp_dev *dev, uint32_t param_id, bool first_block, int module_get_large_config(struct comp_dev *dev, uint32_t param_id, bool first_block,
bool last_block, uint32_t *data_offset, char *data); bool last_block, uint32_t *data_offset, char *data);
static inline void
module_update_processing_position(struct input_stream_buffer *input,
struct output_stream_buffer *output,
enum sof_ipc_frame input_frame_fmt,
enum sof_ipc_frame output_frame_fmt, int samples)
{
switch (input_frame_fmt) {
case SOF_IPC_FRAME_S16_LE:
input->consumed += S16_SAMPLES_TO_BYTES(samples);
break;
default:
input->consumed += S32_SAMPLES_TO_BYTES(samples);
break;
}
switch (output_frame_fmt) {
case SOF_IPC_FRAME_S16_LE:
output->size += S16_SAMPLES_TO_BYTES(samples);
break;
default:
output->size += S32_SAMPLES_TO_BYTES(samples);
break;
}
}
#endif /* __SOF_AUDIO_MODULE_GENERIC__ */ #endif /* __SOF_AUDIO_MODULE_GENERIC__ */