Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions src/audio/kpb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1033,18 +1033,19 @@ static void kpb_micselect_copy16(struct comp_buffer *sink,
{
struct audio_stream *istream = &source->stream;
struct audio_stream *ostream = &sink->stream;
uint16_t ch;
uint32_t ch;
Comment thread
tmleman marked this conversation as resolved.
size_t i;

AE_SETCBEGIN0(audio_stream_get_addr(ostream));
AE_SETCEND0(audio_stream_get_end_addr(ostream));

buffer_stream_invalidate(source, size);
const size_t samples_per_chan = size / (sizeof(ae_int16) * micsel_channels);

buffer_stream_invalidate(source, samples_per_chan * in_channels * sizeof(ae_int16));
const ae_int16 *in_ptr = audio_stream_get_rptr(istream);
ae_int16x4 d16 = AE_ZERO16();
const size_t in_offset = in_channels * sizeof(ae_int16);
const size_t out_offset = micsel_channels * sizeof(ae_int16);
const size_t samples_per_chan = size / (sizeof(uint16_t) * micsel_channels);
ae_int16 *out_ptr;

for (ch = 0; ch < micsel_channels; ch++) {
Expand All @@ -1066,19 +1067,20 @@ static void kpb_micselect_copy32(struct comp_buffer *sink,
{
struct audio_stream *istream = &source->stream;
struct audio_stream *ostream = &sink->stream;
uint16_t ch;
uint32_t ch;
Comment thread
tmleman marked this conversation as resolved.
size_t i;

AE_SETCBEGIN0(audio_stream_get_addr(ostream));
AE_SETCEND0(audio_stream_get_end_addr(ostream));

buffer_stream_invalidate(source, size);
const size_t samples_per_chan = size / (sizeof(ae_int32) * micsel_channels);

buffer_stream_invalidate(source, samples_per_chan * in_channels * sizeof(ae_int32));

const ae_int32 *in_ptr = audio_stream_get_rptr(istream);
ae_int32x2 d32 = AE_ZERO32();
const size_t in_offset = in_channels * sizeof(ae_int32);
const size_t out_offset = micsel_channels * sizeof(ae_int32);
const size_t samples_per_chan = size / (sizeof(uint32_t) * micsel_channels);
ae_int32 *out_ptr;

for (ch = 0; ch < micsel_channels; ch++) {
Expand All @@ -1100,14 +1102,14 @@ static void kpb_micselect_copy16(struct comp_buffer *sink,
{
struct audio_stream *istream = &source->stream;
struct audio_stream *ostream = &sink->stream;

buffer_stream_invalidate(source, size);
size_t out_samples;
uint16_t ch;
uint32_t ch;
Comment thread
tmleman marked this conversation as resolved.

const int16_t *in_data;
int16_t *out_data;
const uint32_t samples_per_chan = size / (sizeof(uint16_t) * micsel_channels);
const size_t samples_per_chan = size / (sizeof(uint16_t) * micsel_channels);

buffer_stream_invalidate(source, samples_per_chan * in_channels * sizeof(uint16_t));

for (ch = 0; ch < micsel_channels; ch++) {
out_samples = 0;
Expand All @@ -1132,13 +1134,13 @@ static void kpb_micselect_copy32(struct comp_buffer *sink,
{
struct audio_stream *istream = &source->stream;
struct audio_stream *ostream = &sink->stream;

buffer_stream_invalidate(source, size);
size_t out_samples;
uint16_t ch;
uint32_t ch;
Comment thread
tmleman marked this conversation as resolved.
const int32_t *in_data;
int32_t *out_data;
const uint32_t samples_per_chan = size / (sizeof(uint32_t) * micsel_channels);
const size_t samples_per_chan = size / (sizeof(uint32_t) * micsel_channels);

buffer_stream_invalidate(source, samples_per_chan * in_channels * sizeof(uint32_t));

for (ch = 0; ch < micsel_channels; ch++) {
out_samples = 0;
Expand Down Expand Up @@ -1607,7 +1609,7 @@ static void kpb_init_draining(struct comp_dev *dev, struct kpb_client *cli)
struct comp_data *kpb = comp_get_drvdata(dev);
bool is_sink_ready = (comp_buffer_get_sink_state(kpb->host_sink) == COMP_STATE_ACTIVE);
size_t sample_width = kpb->config.sampling_width;
size_t drain_req = cli->drain_req * kpb->config.channels *
size_t drain_req = (size_t)cli->drain_req * kpb->config.channels *
(kpb->config.sampling_freq / 1000) *
(KPB_SAMPLE_CONTAINER_SIZE(sample_width) / 8);
struct history_buffer *buff = kpb->hd.c_hb;
Expand All @@ -1616,7 +1618,7 @@ static void kpb_init_draining(struct comp_dev *dev, struct kpb_client *cli)
size_t local_buffered;
size_t drain_interval;
size_t host_period_size = kpb->host_period_size;
size_t bytes_per_ms = KPB_SAMPLES_PER_MS *
size_t bytes_per_ms = (size_t)KPB_SAMPLES_PER_MS *
(KPB_SAMPLE_CONTAINER_SIZE(sample_width) / 8) *
kpb->config.channels;
size_t period_bytes_limit;
Expand Down Expand Up @@ -1788,7 +1790,7 @@ static void adjust_drain_interval(struct comp_data *kpb, struct draining_data *d
/* average drained bytes per second */
actual_pace = (size_t)k_ms_to_cyc_ceil64(1000) / elapsed * drained;

pipeline_period = KPB_SAMPLES_PER_MS *
pipeline_period = (size_t)KPB_SAMPLES_PER_MS *
(KPB_SAMPLE_CONTAINER_SIZE(dd->sample_width) / 8) * kpb->config.channels;
/* desired draining pace in bytes per second */
optimal_pace = pipeline_period * KPB_DRAIN_NUM_OF_PPL_PERIODS_AT_ONCE * 1000;
Expand Down Expand Up @@ -2394,7 +2396,7 @@ static inline bool validate_host_params(struct comp_dev *dev,
*/
struct comp_data *kpb = comp_get_drvdata(dev);
size_t sample_width = kpb->config.sampling_width;
size_t bytes_per_ms = KPB_SAMPLES_PER_MS *
size_t bytes_per_ms = (size_t)KPB_SAMPLES_PER_MS *
(KPB_SAMPLE_CONTAINER_SIZE(sample_width) / 8) *
kpb->config.channels;
size_t pipeline_period_size = (dev->pipeline->period / 1000)
Expand Down
Loading