Skip to content

Commit bc8e598

Browse files
committed
module: eap: rework module to use sink/source api
Rework the eap module to only use the sink/source api to prepare sof for the full transition to pipeline 2.0. Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
1 parent 6f92aee commit bc8e598

1 file changed

Lines changed: 66 additions & 29 deletions

File tree

‎src/audio/nxp/eap.c‎

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,20 @@ static int nxp_eap_prepare(struct processing_module *mod,
170170
struct comp_dev *dev = mod->dev;
171171
struct module_data *md = &mod->priv;
172172
struct nxp_eap_data *eap = module_get_private_data(mod);
173-
struct comp_buffer *source = comp_dev_get_first_data_producer(dev);
174-
const struct audio_stream *stream;
173+
struct sof_source *source;
175174

176175
comp_dbg(dev, "entry");
177176

178-
stream = &source->stream;
179-
eap->sample_rate = audio_stream_get_rate(stream);
180-
eap->channels = audio_stream_get_channels(stream);
181-
eap->frame_bytes = audio_stream_frame_bytes(stream);
177+
if (num_of_sources != 1 || num_of_sinks != 1) {
178+
comp_err(dev, "invalid number of sources %d or sinks %d",
179+
num_of_sources, num_of_sinks);
180+
return -EINVAL;
181+
}
182+
183+
source = sources[0];
184+
eap->sample_rate = source_get_rate(source);
185+
eap->channels = source_get_channels(source);
186+
eap->frame_bytes = source_get_frame_bytes(source);
182187
eap->audio_time_ms = 0;
183188

184189
/* total bytes needed to be in the input buffer to be processed
@@ -225,47 +230,79 @@ static int nxp_eap_reset(struct processing_module *mod)
225230
}
226231

227232
static int nxp_eap_process(struct processing_module *mod,
228-
struct input_stream_buffer *input_buffers, int num_input_buffers,
229-
struct output_stream_buffer *output_buffers, int num_output_buffers)
233+
struct sof_source **sources, int num_of_sources,
234+
struct sof_sink **sinks, int num_of_sinks)
230235
{
231236
struct comp_dev *dev = mod->dev;
232237
struct module_data *eap = &mod->priv;
233238
struct nxp_eap_data *eap_data = module_get_private_data(mod);
234239
LVM_INT16 *buffer_table[2];
235-
LVM_ReturnStatus_en ret;
240+
LVM_ReturnStatus_en lvm_ret;
241+
const size_t process_size = eap->mpd.in_buff_size;
242+
int ret;
243+
const void *src_ptr;
244+
const void *src_buf_start;
245+
void *snk_ptr;
246+
void *snk_buf_start;
247+
size_t buf_size;
248+
size_t size_to_wrap;
236249

237250
comp_dbg(dev, "entry");
238251

239-
/* we need to input buffer to be completely full to be able to process it */
240-
if (input_buffers[0].size < eap->mpd.in_buff_size)
252+
/* we need the input buffer to be completely full to be able to process it */
253+
if (source_get_data_available(sources[0]) < process_size)
241254
return -ENODATA;
242255

243-
memcpy_s(eap->mpd.in_buff, eap->mpd.in_buff_size,
244-
(uint8_t *)input_buffers[0].data + input_buffers[0].consumed,
245-
eap->mpd.in_buff_size);
246-
eap->mpd.avail = eap->mpd.in_buff_size;
256+
ret = source_get_data(sources[0], process_size, &src_ptr, &src_buf_start, &buf_size);
257+
if (ret)
258+
return ret;
259+
260+
/* buf_size is the total ring buffer size; handle wrap when copying to in_buff */
261+
size_to_wrap = cir_buf_bytes_without_wrap(src_ptr, (const uint8_t *)src_buf_start +
262+
buf_size);
263+
if (process_size <= size_to_wrap) {
264+
memcpy_s(eap->mpd.in_buff, process_size, src_ptr, process_size);
265+
} else {
266+
memcpy_s(eap->mpd.in_buff, process_size, src_ptr, size_to_wrap);
267+
memcpy_s((uint8_t *)eap->mpd.in_buff + size_to_wrap,
268+
process_size - size_to_wrap,
269+
src_buf_start, process_size - size_to_wrap);
270+
}
271+
272+
ret = sink_get_buffer(sinks[0], process_size, &snk_ptr, &snk_buf_start, &buf_size);
273+
if (ret) {
274+
source_release_data(sources[0], 0);
275+
return ret;
276+
}
247277

248278
buffer_table[0] = eap->mpd.out_buff;
249279
buffer_table[1] = LVM_NULL;
250280

251-
eap_data->audio_time_ms += eap->mpd.avail / (eap_data->sample_rate / 1000);
281+
eap_data->audio_time_ms += process_size / (eap_data->sample_rate / 1000);
252282

253-
ret = LVM_Process(eap_data->instance, (LVM_INT16 *)eap->mpd.in_buff,
254-
(LVM_INT16 **)buffer_table, eap->mpd.avail / eap_data->frame_bytes,
255-
eap_data->audio_time_ms);
256-
if (ret != LVM_SUCCESS) {
257-
comp_err(dev, "failed with error %d", ret);
283+
lvm_ret = LVM_Process(eap_data->instance, (LVM_INT16 *)eap->mpd.in_buff,
284+
(LVM_INT16 **)buffer_table, process_size / eap_data->frame_bytes,
285+
eap_data->audio_time_ms);
286+
if (lvm_ret != LVM_SUCCESS) {
287+
comp_err(dev, "failed with error %d", lvm_ret);
288+
source_release_data(sources[0], 0);
289+
sink_commit_buffer(sinks[0], 0);
258290
return -EIO;
259291
}
260292

261-
eap->mpd.produced = eap->mpd.in_buff_size;
262-
eap->mpd.consumed = eap->mpd.in_buff_size;
263-
264-
input_buffers[0].consumed = eap->mpd.consumed;
293+
source_release_data(sources[0], process_size);
265294

266-
/* copy produced samples to output buffer */
267-
memcpy_s(output_buffers[0].data, eap->mpd.produced, eap->mpd.out_buff, eap->mpd.produced);
268-
output_buffers[0].size = eap->mpd.produced;
295+
/* buf_size is the total ring buffer size; handle wrap when copying from out_buff */
296+
size_to_wrap = cir_buf_bytes_without_wrap(snk_ptr, (uint8_t *)snk_buf_start + buf_size);
297+
if (process_size <= size_to_wrap) {
298+
memcpy_s(snk_ptr, process_size, eap->mpd.out_buff, process_size);
299+
} else {
300+
memcpy_s(snk_ptr, size_to_wrap, eap->mpd.out_buff, size_to_wrap);
301+
memcpy_s(snk_buf_start, process_size - size_to_wrap,
302+
(const uint8_t *)eap->mpd.out_buff + size_to_wrap,
303+
process_size - size_to_wrap);
304+
}
305+
sink_commit_buffer(sinks[0], process_size);
269306

270307
return 0;
271308
}
@@ -327,7 +364,7 @@ static int nxp_eap_get_config(struct processing_module *mod,
327364
static const struct module_interface nxp_eap_interface = {
328365
.init = nxp_eap_init,
329366
.prepare = nxp_eap_prepare,
330-
.process_raw_data = nxp_eap_process,
367+
.process = nxp_eap_process,
331368
.set_configuration = nxp_eap_set_config,
332369
.get_configuration = nxp_eap_get_config,
333370
.reset = nxp_eap_reset,

0 commit comments

Comments
 (0)