Skip to content

Commit 7107f1e

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 7107f1e

1 file changed

Lines changed: 49 additions & 15 deletions

File tree

  • src/audio/module_adapter/module/waves

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

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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,
899933
static 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

Comments
 (0)