@@ -211,71 +211,93 @@ static int cadence_codec_prepare(struct processing_module *mod,
211211 return ret ;
212212}
213213
214- static int
215- cadence_codec_process (struct processing_module * mod ,
216- struct input_stream_buffer * input_buffers , int num_input_buffers ,
217- struct output_stream_buffer * output_buffers , int num_output_buffers )
214+ static int cadence_codec_process (struct processing_module * mod ,
215+ struct sof_source * * sources , int num_of_sources ,
216+ struct sof_sink * * sinks , int num_of_sinks )
218217{
219- struct comp_buffer * local_buff ;
220218 struct comp_dev * dev = mod -> dev ;
221219 struct module_data * codec = & mod -> priv ;
222- int free_bytes , output_bytes = cadence_codec_get_samples (mod ) *
220+ size_t output_bytes = cadence_codec_get_samples (mod ) *
223221 mod -> stream_params -> sample_container_bytes *
224222 mod -> stream_params -> channels ;
225- uint32_t remaining = input_buffers [0 ].size ;
223+ size_t remaining = source_get_data_available (sources [0 ]);
224+ const void * source_buffer_start , * src_ptr ;
225+ void * sink_ptr , * sink_buffer_start ;
226+ size_t src_bytes , sink_bytes ;
226227 int ret ;
227228
228229 if (!cadence_codec_deep_buff_allowed (mod ))
229230 mod -> deep_buff_bytes = 0 ;
230231
231232 /* Proceed only if we have enough data to fill the module buffer completely */
232- if (input_buffers [ 0 ]. size < codec -> mpd .in_buff_size ) {
233+ if (remaining < codec -> mpd .in_buff_size ) {
233234 comp_dbg (dev , "not enough data to process" );
234235 return - ENODATA ;
235236 }
236237
237238 if (!codec -> mpd .init_done ) {
238- memcpy_s (codec -> mpd .in_buff , codec -> mpd .in_buff_size , input_buffers [0 ].data ,
239- codec -> mpd .in_buff_size );
239+ ret = source_get_data (sources [0 ], codec -> mpd .in_buff_size , & src_ptr ,
240+ & source_buffer_start , & src_bytes );
241+ if (ret ) {
242+ comp_err (dev , "cannot get data from source buffer" );
243+ return ret ;
244+ }
245+
246+ cadence_copy_data_from_buffer (codec -> mpd .in_buff , src_ptr ,
247+ codec -> mpd .in_buff_size , src_bytes ,
248+ source_buffer_start );
240249 codec -> mpd .avail = codec -> mpd .in_buff_size ;
241250
242251 ret = cadence_codec_init_process (mod );
243- if (ret )
252+ if (ret ) {
253+ source_release_data (sources [0 ], 0 );
244254 return ret ;
255+ }
245256
246257 remaining -= codec -> mpd .consumed ;
247- input_buffers [0 ]. consumed = codec -> mpd .consumed ;
258+ source_release_data ( sources [0 ], codec -> mpd .consumed ) ;
248259 }
249260
250- /* do not proceed with processing if not enough free space left in the local buffer */
251- local_buff = list_first_item (& mod -> raw_data_buffers_list , struct comp_buffer , buffers_list );
252- free_bytes = audio_stream_get_free (& local_buff -> stream );
253- if (free_bytes < output_bytes )
261+ /* do not proceed with processing if not enough free space left in the sink buffer */
262+ if (sink_get_free_size (sinks [0 ]) < output_bytes )
254263 return - ENOSPC ;
255264
256265 /* Proceed only if we have enough data to fill the module buffer completely */
257266 if (remaining < codec -> mpd .in_buff_size )
258267 return - ENODATA ;
259268
260- memcpy_s (codec -> mpd .in_buff , codec -> mpd .in_buff_size ,
261- (uint8_t * )input_buffers [0 ].data + input_buffers [0 ].consumed ,
262- codec -> mpd .in_buff_size );
269+ ret = source_get_data (sources [0 ], codec -> mpd .in_buff_size , & src_ptr , & source_buffer_start ,
270+ & src_bytes );
271+ if (ret )
272+ return ret ;
273+
274+ cadence_copy_data_from_buffer (codec -> mpd .in_buff , src_ptr ,
275+ codec -> mpd .in_buff_size , src_bytes ,
276+ source_buffer_start );
263277 codec -> mpd .avail = codec -> mpd .in_buff_size ;
264278
265279 comp_dbg (dev , "cadence_codec_process() start" );
266280
267281 ret = cadence_codec_process_data (mod , NULL );
268- if (ret )
282+ if (ret ) {
283+ source_release_data (sources [0 ], 0 );
269284 return ret ;
285+ }
286+
287+ source_release_data (sources [0 ], codec -> mpd .consumed );
288+
289+ ret = sink_get_buffer (sinks [0 ], codec -> mpd .produced , & sink_ptr , & sink_buffer_start ,
290+ & sink_bytes );
291+ if (ret ) {
292+ comp_err (dev , "cannot get sink buffer" );
293+ return ret ;
294+ }
270295
271- /* update consumed with the number of samples consumed during init */
272- input_buffers [ 0 ]. consumed += codec -> mpd .consumed ;
273- codec -> mpd .consumed = input_buffers [ 0 ]. consumed ;
296+ /* Copy the produced samples into the output buffer */
297+ cadence_copy_data_to_buffer ( sink_ptr , codec -> mpd .produced , sink_bytes ,
298+ sink_buffer_start , codec -> mpd .out_buff ) ;
274299
275- /* copy the produced samples into the output buffer */
276- memcpy_s (output_buffers [0 ].data , codec -> mpd .produced , codec -> mpd .out_buff ,
277- codec -> mpd .produced );
278- output_buffers [0 ].size = codec -> mpd .produced ;
300+ sink_commit_buffer (sinks [0 ], codec -> mpd .produced );
279301
280302 comp_dbg (dev , "cadence_codec_process() done" );
281303
@@ -307,7 +329,7 @@ static int cadence_codec_reset(struct processing_module *mod)
307329static const struct module_interface cadence_codec_interface = {
308330 .init = cadence_codec_init ,
309331 .prepare = cadence_codec_prepare ,
310- .process_raw_data = cadence_codec_process ,
332+ .process = cadence_codec_process ,
311333 .set_configuration = cadence_codec_set_configuration ,
312334 .reset = cadence_codec_reset ,
313335 .free = cadence_codec_free
0 commit comments