Skip to content

Commit cb8bbf9

Browse files
committed
audio: src: only allocate delay lines if size changes
If the delay line size hasn't changed no need to re-allocate the buffer. Also use size_t for some byte-size variables and structure members. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
1 parent 2c33b4d commit cb8bbf9

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

src/audio/src/src_common.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,7 @@ int src_params_general(struct processing_module *mod,
481481
struct comp_data *cd = module_get_private_data(mod);
482482
struct comp_dev *dev = mod->dev;
483483
size_t delay_lines_size;
484+
size_t old_total;
484485
int32_t *buffer_start;
485486
int n;
486487
int err;
@@ -511,6 +512,8 @@ int src_params_general(struct processing_module *mod,
511512
cd->source_frames = dev->frames * cd->source_rate / cd->sink_rate;
512513
cd->sink_frames = dev->frames;
513514

515+
old_total = cd->param.total;
516+
514517
/* Allocate needed memory for delay lines */
515518
err = src_buffer_lengths(dev, cd, cd->channels_count);
516519
if (err < 0) {
@@ -530,14 +533,16 @@ int src_params_general(struct processing_module *mod,
530533
}
531534
delay_lines_size = ALIGN_UP(sizeof(int32_t) * cd->param.total, 8);
532535

533-
/* free any existing delay lines. TODO reuse if same size */
534-
mod_free(mod, cd->delay_lines);
536+
if (!cd->delay_lines || old_total != cd->param.total) {
537+
/* free any existing delay lines */
538+
mod_free(mod, cd->delay_lines);
535539

536-
cd->delay_lines = mod_alloc(mod, delay_lines_size);
537-
if (!cd->delay_lines) {
538-
comp_err(dev, "failed to alloc cd->delay_lines, delay_lines_size = %zu",
539-
delay_lines_size);
540-
return -EINVAL;
540+
cd->delay_lines = mod_alloc(mod, delay_lines_size);
541+
if (!cd->delay_lines) {
542+
comp_err(dev, "failed to alloc cd->delay_lines, delay_lines_size = %zu",
543+
delay_lines_size);
544+
return -EINVAL;
545+
}
541546
}
542547

543548
/* Clear all delay lines here */

src/audio/src/src_common.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,25 @@ struct src_stage {
2121
int idm;
2222
int odm;
2323
int num_of_subfilters;
24-
int subfilter_length;
25-
int filter_length;
26-
int blk_in;
27-
int blk_out;
24+
size_t subfilter_length;
25+
size_t filter_length;
26+
size_t blk_in;
27+
size_t blk_out;
2828
int halfband;
2929
int shift;
3030
const void *coefs; /* Can be int16_t or int32_t depending on config */
3131
};
3232

3333
struct src_param {
34-
int fir_s1;
35-
int fir_s2;
36-
int out_s1;
37-
int out_s2;
38-
int sbuf_length;
39-
int src_multich;
40-
int total;
41-
int blk_in;
42-
int blk_out;
34+
size_t fir_s1;
35+
size_t fir_s2;
36+
size_t out_s1;
37+
size_t out_s2;
38+
size_t sbuf_length;
39+
size_t src_multich;
40+
size_t total;
41+
size_t blk_in;
42+
size_t blk_out;
4343
int stage1_times;
4444
int stage2_times;
4545
int idx_in;

0 commit comments

Comments
 (0)