@@ -401,44 +401,53 @@ static int up_down_mixer_init(struct processing_module *mod)
401401
402402static int
403403up_down_mixer_process (struct processing_module * mod ,
404- struct input_stream_buffer * input_buffers , int num_input_buffers ,
405- struct output_stream_buffer * output_buffers , int num_output_buffers )
404+ struct sof_source * * input_buffers , int num_input_buffers ,
405+ struct sof_sink * * output_buffers , int num_output_buffers )
406406{
407407 struct up_down_mixer_data * cd = module_get_private_data (mod );
408408 struct comp_dev * dev = mod -> dev ;
409- uint32_t source_bytes , sink_bytes ;
410- uint32_t mix_frames ;
411409
412- comp_dbg (dev , "up_down_mixer_process()" );
410+ size_t output_frames , input_frames , ret , input_cirbuf_size , output_cirbuf_size ;
411+ const uint8_t * input0_pos , * input0_start ;
412+ uint8_t * output_pos , * output_start ;
413413
414- mix_frames = audio_stream_avail_frames (mod -> input_buffers [0 ].data ,
415- mod -> output_buffers [0 ].data );
414+ comp_dbg (dev , "up_down_mixer_process()" );
416415
417- source_bytes = mix_frames * audio_stream_frame_bytes ( mod -> input_buffers [0 ]. data );
418- sink_bytes = mix_frames * audio_stream_frame_bytes ( mod -> output_buffers [0 ]. data );
416+ output_frames = sink_get_free_frames ( output_buffers [0 ]);
417+ input_frames = source_get_data_frames_available ( input_buffers [0 ]);
419418
420- if (source_bytes ) {
421- uint32_t sink_sample_bytes ;
419+ const size_t output_frame_bytes = sink_get_frame_bytes (output_buffers [0 ]);
422420
423- audio_stream_copy_to_linear (mod -> input_buffers [0 ].data , 0 , cd -> buf_in , 0 ,
424- source_bytes /
425- audio_stream_sample_bytes (mod -> input_buffers [0 ].data ));
421+ ret = sink_get_buffer (output_buffers [0 ], output_frames * output_frame_bytes ,
422+ (void * * )& output_pos , (void * * )& output_start , & output_cirbuf_size );
423+ if (ret )
424+ return - ENODATA ;
426425
427- cd -> mix_routine ( cd , ( uint8_t * ) cd -> buf_in , source_bytes , ( uint8_t * ) cd -> buf_out );
426+ const size_t input0_frame_bytes = source_get_frame_bytes ( input_buffers [ 0 ] );
428427
429- sink_sample_bytes = audio_stream_sample_bytes (mod -> output_buffers [0 ].data );
430- audio_stream_copy_from_linear (cd -> buf_out , 0 , mod -> output_buffers [0 ].data , 0 ,
431- sink_bytes / sink_sample_bytes );
432- mod -> output_buffers [0 ].size = sink_bytes ;
433- mod -> input_buffers [0 ].consumed = source_bytes ;
428+ ret = source_get_data (input_buffers [0 ], input_frames * input0_frame_bytes ,
429+ (const void * * )& input0_pos , (const void * * )& input0_start ,
430+ & input_cirbuf_size );
431+ if (ret ) {
432+ sink_commit_buffer (output_buffers [0 ], 0 );
433+ return - ENODATA ;
434434 }
435435
436+ cd -> mix_routine (cd , (const void * )input0_start , input_cirbuf_size , (void * )output_start );
437+
438+ ret = sink_commit_buffer (output_buffers [0 ], output_frames * output_frame_bytes );
439+ if (ret )
440+ return ret ;
441+
442+ ret = source_release_data (input_buffers [0 ], input_frames * input0_frame_bytes );
443+ if (ret )
444+ return ret ;
436445 return 0 ;
437446}
438447
439448static const struct module_interface up_down_mixer_interface = {
440449 .init = up_down_mixer_init ,
441- .process_audio_stream = up_down_mixer_process ,
450+ .process = up_down_mixer_process ,
442451 .free = up_down_mixer_free
443452};
444453
0 commit comments