@@ -753,28 +753,46 @@ static int waves_codec_init_process(struct processing_module *mod)
753753 return 0 ;
754754}
755755
756- static int
757- waves_codec_process (struct processing_module * mod ,
758- struct input_stream_buffer * input_buffers , int num_input_buffers ,
759- struct output_stream_buffer * output_buffers , int num_output_buffers )
756+ static int waves_codec_process (struct processing_module * mod ,
757+ struct sof_source * * sources , int num_of_sources ,
758+ struct sof_sink * * sinks , int num_of_sinks )
760759{
761760 int ret ;
762761 struct comp_dev * dev = mod -> dev ;
763762 struct module_data * codec = & mod -> priv ;
764763 struct waves_codec_data * waves_codec = codec -> private ;
764+ const void * src_ptr ;
765+ const void * src_buf_start ;
766+ size_t src_buf_size ;
767+ void * snk_ptr ;
768+ void * snk_buf_start ;
769+ size_t snk_buf_size ;
770+ size_t n_bytes = codec -> mpd .in_buff_size ;
771+ size_t size_to_wrap ;
765772
766773 /* Proceed only if we have enough data to fill the module buffer completely */
767- if (input_buffers [0 ]. size < codec -> mpd . in_buff_size ) {
774+ if (source_get_data_available ( sources [0 ]) < n_bytes ) {
768775 comp_dbg (dev , "not enough data to process" );
769776 return - ENODATA ;
770777 }
771778
772779 if (!codec -> mpd .init_done )
773780 waves_codec_init_process (mod );
774781
775- memcpy_s (codec -> mpd .in_buff , codec -> mpd .in_buff_size ,
776- input_buffers [0 ].data , codec -> mpd .in_buff_size );
777- codec -> mpd .avail = codec -> mpd .in_buff_size ;
782+ ret = source_get_data (sources [0 ], n_bytes , & src_ptr , & src_buf_start , & src_buf_size );
783+ if (ret )
784+ return ret ;
785+
786+ /* src_buf_size is the total ring buffer size; handle wrap when copying to in_buff */
787+ size_to_wrap = (const uint8_t * )src_buf_start + src_buf_size - (const uint8_t * )src_ptr ;
788+ if (n_bytes <= size_to_wrap ) {
789+ memcpy_s (codec -> mpd .in_buff , n_bytes , src_ptr , n_bytes );
790+ } else {
791+ memcpy_s (codec -> mpd .in_buff , n_bytes , src_ptr , size_to_wrap );
792+ memcpy_s ((uint8_t * )codec -> mpd .in_buff + size_to_wrap , n_bytes - size_to_wrap ,
793+ src_buf_start , n_bytes - size_to_wrap );
794+ }
795+ codec -> mpd .avail = n_bytes ;
778796
779797 comp_dbg (dev , "start" );
780798
@@ -806,18 +824,34 @@ waves_codec_process(struct processing_module *mod,
806824
807825 status = MaxxEffect_Process (waves_codec -> effect , i_streams , o_streams );
808826 if (status ) {
827+ source_release_data (sources [0 ], 0 );
809828 comp_err (dev , "MaxxEffect_Process returned %d" , status );
810829 ret = - EINVAL ;
811830 } else {
812831 codec -> mpd .produced = waves_codec -> o_stream .numAvailableSamples *
813832 waves_codec -> o_format .numChannels * waves_codec -> sample_size_in_bytes ;
814833 codec -> mpd .consumed = codec -> mpd .produced ;
815- input_buffers [0 ].consumed = codec -> mpd .consumed ;
816- ret = 0 ;
817- /* copy the produced samples into the output buffer */
818- memcpy_s (output_buffers [0 ].data , codec -> mpd .produced , codec -> mpd .out_buff ,
819- codec -> mpd .produced );
820- output_buffers [0 ].size = codec -> mpd .produced ;
834+
835+ source_release_data (sources [0 ], codec -> mpd .consumed );
836+
837+ ret = sink_get_buffer (sinks [0 ], codec -> mpd .produced ,
838+ & snk_ptr , & snk_buf_start , & snk_buf_size );
839+ if (!ret ) {
840+ /* snk_buf_size is the total ring buffer size; handle wrap */
841+ size_to_wrap = (uint8_t * )snk_buf_start + snk_buf_size -
842+ (uint8_t * )snk_ptr ;
843+ if (codec -> mpd .produced <= size_to_wrap ) {
844+ memcpy_s (snk_ptr , codec -> mpd .produced ,
845+ codec -> mpd .out_buff , codec -> mpd .produced );
846+ } else {
847+ memcpy_s (snk_ptr , codec -> mpd .produced ,
848+ codec -> mpd .out_buff , size_to_wrap );
849+ memcpy_s (snk_buf_start , codec -> mpd .produced - size_to_wrap ,
850+ (const uint8_t * )codec -> mpd .out_buff + size_to_wrap ,
851+ codec -> mpd .produced - size_to_wrap );
852+ }
853+ sink_commit_buffer (sinks [0 ], codec -> mpd .produced );
854+ }
821855 }
822856
823857 if (ret )
@@ -899,7 +933,7 @@ waves_codec_set_configuration(struct processing_module *mod, uint32_t config_id,
899933static const struct module_interface waves_interface = {
900934 .init = waves_codec_init ,
901935 .prepare = waves_codec_prepare ,
902- .process_raw_data = waves_codec_process ,
936+ .process = waves_codec_process ,
903937 .set_configuration = waves_codec_set_configuration ,
904938 .reset = waves_codec_reset ,
905939 .free = waves_codec_free
0 commit comments