Skip to content

Commit 22277b2

Browse files
committed
module: waves: rework module to use sink/source api
Rework the waves 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 a8fca5a commit 22277b2

1 file changed

Lines changed: 46 additions & 15 deletions

File tree

  • src/audio/module_adapter/module/waves

src/audio/module_adapter/module/waves/waves.c

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -753,28 +753,47 @@ 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+
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+
source_release_data(sources[0], n_bytes);
796+
codec->mpd.avail = n_bytes;
778797

779798
comp_dbg(dev, "start");
780799

@@ -812,12 +831,24 @@ waves_codec_process(struct processing_module *mod,
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+
ret = sink_get_buffer(sinks[0], codec->mpd.produced,
835+
&snk_ptr, &snk_buf_start, &snk_buf_size);
836+
if (!ret) {
837+
/* snk_buf_size is the total ring buffer size; handle wrap */
838+
size_to_wrap = (uint8_t *)snk_buf_start + snk_buf_size -
839+
(uint8_t *)snk_ptr;
840+
if (codec->mpd.produced <= size_to_wrap) {
841+
memcpy_s(snk_ptr, codec->mpd.produced,
842+
codec->mpd.out_buff, codec->mpd.produced);
843+
} else {
844+
memcpy_s(snk_ptr, codec->mpd.produced,
845+
codec->mpd.out_buff, size_to_wrap);
846+
memcpy_s(snk_buf_start, codec->mpd.produced - size_to_wrap,
847+
(const uint8_t *)codec->mpd.out_buff + size_to_wrap,
848+
codec->mpd.produced - size_to_wrap);
849+
}
850+
sink_commit_buffer(sinks[0], codec->mpd.produced);
851+
}
821852
}
822853

823854
if (ret)
@@ -899,7 +930,7 @@ waves_codec_set_configuration(struct processing_module *mod, uint32_t config_id,
899930
static const struct module_interface waves_interface = {
900931
.init = waves_codec_init,
901932
.prepare = waves_codec_prepare,
902-
.process_raw_data = waves_codec_process,
933+
.process = waves_codec_process,
903934
.set_configuration = waves_codec_set_configuration,
904935
.reset = waves_codec_reset,
905936
.free = waves_codec_free

0 commit comments

Comments
 (0)