@@ -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
227232static 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,
327364static 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