Skip to content

Commit fb930d2

Browse files
module: mux: preserve const qualifiers for source pointers
Use cir_buf_wrap() for writable sink pointers and source_cir_buf_wrap() for read-only source pointers. Mark lookup source pointers as const to avoid discarding qualifiers during circular buffer wrap handling. Signed-off-by: Piotr Hoppe <piotr.hoppe@intel.com>
1 parent e0386e1 commit fb930d2

2 files changed

Lines changed: 32 additions & 28 deletions

File tree

‎src/audio/mux/mux.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ struct mux_copy_elem {
5050
uint32_t out_ch;
5151

5252
void *dest;
53-
void *src;
53+
const void *src;
5454

5555
uint32_t dest_inc;
5656
uint32_t src_inc;

‎src/audio/mux/mux_generic.c‎

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ static void mux_check_for_wrap(struct cir_buf_sink *sink,
3535
cir_buf_wrap(lookup->copy_elem[elem].dest,
3636
sink->buf_start, sink->buf_end);
3737
lookup->copy_elem[elem].src =
38-
cir_buf_wrap(lookup->copy_elem[elem].src,
39-
(void *)source->buf_start, (void *)source->buf_end);
38+
source_cir_buf_wrap(lookup->copy_elem[elem].src,
39+
source->buf_start, source->buf_end);
4040
}
4141
}
4242

@@ -52,7 +52,7 @@ static void demux_check_for_wrap(struct cir_buf_sink *sink,
5252
cir_buf_wrap(lookup->copy_elem[elem].dest,
5353
sink->buf_start, sink->buf_end);
5454
lookup->copy_elem[elem].src =
55-
cir_buf_wrap(lookup->copy_elem[elem].src,
55+
source_cir_buf_wrap(lookup->copy_elem[elem].src,
5656
source->buf_start, source->buf_end);
5757
}
5858
}
@@ -65,18 +65,18 @@ static uint32_t demux_calc_frames_without_wrap_s16(struct cir_buf_sink *sink,
6565
{
6666
uint32_t frames;
6767
uint32_t min_frames;
68-
void *ptr;
68+
const void *ptr;
6969

7070
/* for demux we process each source buffer separately - dest/src for
7171
* each copy_elem refers to the same sink/source buffer, so min_frames
7272
* calculation based only on lookup table first element is sufficient.
7373
*/
74-
ptr = (int16_t *)lookup->copy_elem[0].dest -
74+
ptr = (const int16_t *)lookup->copy_elem[0].dest -
7575
lookup->copy_elem[0].out_ch;
7676
min_frames = circ_buf_frames_without_wrap(ptr, sink->buf_end, sizeof(int16_t),
7777
lookup->copy_elem[0].dest_inc);
7878

79-
ptr = (int16_t *)lookup->copy_elem[0].src -
79+
ptr = (const int16_t *)lookup->copy_elem[0].src -
8080
lookup->copy_elem[0].in_ch;
8181
frames = circ_buf_frames_without_wrap(ptr, source->buf_end, sizeof(int16_t),
8282
lookup->copy_elem[0].src_inc);
@@ -94,21 +94,21 @@ static uint32_t mux_calc_frames_without_wrap_s16(struct cir_buf_sink *sink,
9494
uint32_t frames;
9595
uint32_t min_frames;
9696
uint32_t elem;
97-
void *ptr;
97+
const void *ptr;
9898

9999
/* dest pointer for all copy_elems in lookup refers to the same
100100
* sink buffer (mux has one sink buffer), so dest min_frames
101101
* calculation based only on lookup table first element is sufficient.
102102
*/
103-
ptr = (int16_t *)lookup->copy_elem[0].dest -
103+
ptr = (const int16_t *)lookup->copy_elem[0].dest -
104104
lookup->copy_elem[0].out_ch;
105105
min_frames = circ_buf_frames_without_wrap(ptr, sink->buf_end, sizeof(int16_t),
106106
lookup->copy_elem[0].dest_inc);
107107

108108
for (elem = 0; elem < lookup->num_elems; elem++) {
109109
source = &source_bufs[lookup->copy_elem[elem].stream_id];
110110

111-
ptr = (int16_t *)lookup->copy_elem[elem].src -
111+
ptr = (const int16_t *)lookup->copy_elem[elem].src -
112112
lookup->copy_elem[elem].in_ch;
113113
frames = circ_buf_frames_without_wrap(ptr, source->buf_end, sizeof(int16_t),
114114
lookup->copy_elem[elem].src_inc);
@@ -132,7 +132,7 @@ static void mux_init_look_up_pointers_s16(struct sof_sink *sink,
132132
for (elem = 0; elem < lookup->num_elems; elem++) {
133133
sid = lookup->copy_elem[elem].stream_id;
134134

135-
lookup->copy_elem[elem].src = (int16_t *)source_bufs[sid].ptr +
135+
lookup->copy_elem[elem].src = (const int16_t *)source_bufs[sid].ptr +
136136
lookup->copy_elem[elem].in_ch;
137137
lookup->copy_elem[elem].src_inc = source_get_channels(sources[sid]);
138138

@@ -152,7 +152,7 @@ static void demux_init_look_up_pointers_s16(struct sof_sink *sink,
152152

153153
/* init pointers */
154154
for (elem = 0; elem < lookup->num_elems; elem++) {
155-
lookup->copy_elem[elem].src = (int16_t *)source_buf->ptr +
155+
lookup->copy_elem[elem].src = (const int16_t *)source_buf->ptr +
156156
lookup->copy_elem[elem].in_ch;
157157
lookup->copy_elem[elem].src_inc = source_get_channels(source);
158158

@@ -198,7 +198,7 @@ static int demux_s16le(struct comp_dev *dev, struct sof_sink *sink,
198198
demux_init_look_up_pointers_s16(sink, &sink_buf, source, &source_buf, lookup);
199199

200200
while (frames) {
201-
int16_t *src = (int16_t *)lookup->copy_elem[0].src -
201+
const int16_t *src = (const int16_t *)lookup->copy_elem[0].src -
202202
lookup->copy_elem[0].in_ch;
203203
int16_t *dst = (int16_t *)lookup->copy_elem[0].dest -
204204
lookup->copy_elem[0].out_ch;
@@ -210,7 +210,7 @@ static int demux_s16le(struct comp_dev *dev, struct sof_sink *sink,
210210

211211
for (i = 0; i < frames_without_wrap; i++) {
212212
for (elem = 0; elem < lookup->num_elems; elem++) {
213-
src = (int16_t *)lookup->copy_elem[elem].src;
213+
src = (const int16_t *)lookup->copy_elem[elem].src;
214214
dst = (int16_t *)lookup->copy_elem[elem].dest;
215215
*dst = *src;
216216
lookup->copy_elem[elem].src = src +
@@ -248,7 +248,7 @@ static void mux_s16le(struct comp_dev *dev, struct sof_sink *sink,
248248
struct mux_look_up *lookup)
249249
{
250250
uint32_t i;
251-
int16_t *src;
251+
const int16_t *src;
252252
int16_t *dst;
253253
uint32_t elem;
254254
uint32_t frames_without_wrap;
@@ -268,7 +268,7 @@ static void mux_s16le(struct comp_dev *dev, struct sof_sink *sink,
268268

269269
for (i = 0; i < frames_without_wrap; i++) {
270270
for (elem = 0; elem < lookup->num_elems; elem++) {
271-
src = (int16_t *)lookup->copy_elem[elem].src;
271+
src = (const int16_t *)lookup->copy_elem[elem].src;
272272
dst = (int16_t *)lookup->copy_elem[elem].dest;
273273
*dst = *src;
274274
lookup->copy_elem[elem].src = src +
@@ -295,20 +295,22 @@ static uint32_t mux_calc_frames_without_wrap_s32(struct cir_buf_sink *sink,
295295
uint32_t frames;
296296
uint32_t min_frames;
297297
uint32_t elem;
298-
void *ptr;
298+
const void *ptr;
299299

300300
/* dest pointer for all copy_elems in lookup refers to the same
301301
* sink buffer (mux has one sink buffer), so dest min_frames
302302
* calculation based only on lookup table first element is sufficient.
303303
*/
304-
ptr = (int32_t *)lookup->copy_elem[0].dest - lookup->copy_elem[0].out_ch;
304+
ptr = (const int32_t *)lookup->copy_elem[0].dest -
305+
lookup->copy_elem[0].out_ch;
305306
min_frames = circ_buf_frames_without_wrap(ptr, sink->buf_end, sizeof(int32_t),
306307
lookup->copy_elem[0].dest_inc);
307308

308309
for (elem = 0; elem < lookup->num_elems; elem++) {
309310
source = &source_bufs[lookup->copy_elem[elem].stream_id];
310311

311-
ptr = (int32_t *)lookup->copy_elem[elem].src - lookup->copy_elem[elem].in_ch;
312+
ptr = (const int32_t *)lookup->copy_elem[elem].src -
313+
lookup->copy_elem[elem].in_ch;
312314
frames = circ_buf_frames_without_wrap(ptr, source->buf_end, sizeof(int32_t),
313315
lookup->copy_elem[elem].src_inc);
314316

@@ -324,17 +326,19 @@ static uint32_t demux_calc_frames_without_wrap_s32(struct cir_buf_sink *sink,
324326
{
325327
uint32_t frames;
326328
uint32_t min_frames;
327-
void *ptr;
329+
const void *ptr;
328330

329331
/* for demux we process each source buffer separately - dest/src for
330332
* each copy_elem refers to the same sink/source buffer, so min_frames
331333
* calculation based only on lookup table first element is sufficient.
332334
*/
333-
ptr = (int32_t *)lookup->copy_elem[0].dest - lookup->copy_elem[0].out_ch;
335+
ptr = (const int32_t *)lookup->copy_elem[0].dest -
336+
lookup->copy_elem[0].out_ch;
334337
min_frames = circ_buf_frames_without_wrap(ptr, sink->buf_end, sizeof(int32_t),
335338
lookup->copy_elem[0].dest_inc);
336339

337-
ptr = (int32_t *)lookup->copy_elem[0].src - lookup->copy_elem[0].in_ch;
340+
ptr = (const int32_t *)lookup->copy_elem[0].src -
341+
lookup->copy_elem[0].in_ch;
338342
frames = circ_buf_frames_without_wrap(ptr, source->buf_end, sizeof(int32_t),
339343
lookup->copy_elem[0].src_inc);
340344

@@ -356,7 +360,7 @@ static void mux_init_look_up_pointers_s32(struct sof_sink *sink,
356360
for (elem = 0; elem < lookup->num_elems; elem++) {
357361
sid = lookup->copy_elem[elem].stream_id;
358362

359-
lookup->copy_elem[elem].src = (int32_t *)source_bufs[sid].ptr +
363+
lookup->copy_elem[elem].src = (const int32_t *)source_bufs[sid].ptr +
360364
lookup->copy_elem[elem].in_ch;
361365
lookup->copy_elem[elem].src_inc = source_get_channels(sources[sid]);
362366

@@ -376,7 +380,7 @@ static void demux_init_look_up_pointers_s32(struct sof_sink *sink,
376380

377381
/* init pointers */
378382
for (elem = 0; elem < lookup->num_elems; elem++) {
379-
lookup->copy_elem[elem].src = (int32_t *)source_buf->ptr +
383+
lookup->copy_elem[elem].src = (const int32_t *)source_buf->ptr +
380384
lookup->copy_elem[elem].in_ch;
381385
lookup->copy_elem[elem].src_inc = source_get_channels(source);
382386

@@ -438,7 +442,7 @@ static int demux_s32le(struct comp_dev *dev, struct sof_sink *sink,
438442
demux_init_look_up_pointers_s32(sink, &sink_buf, source, &source_buf, lookup);
439443

440444
while (frames) {
441-
int32_t *src = (int32_t *)lookup->copy_elem[0].src -
445+
const int32_t *src = (const int32_t *)lookup->copy_elem[0].src -
442446
lookup->copy_elem[0].in_ch;
443447
int32_t *dst = (int32_t *)lookup->copy_elem[0].dest -
444448
lookup->copy_elem[0].out_ch;
@@ -450,7 +454,7 @@ static int demux_s32le(struct comp_dev *dev, struct sof_sink *sink,
450454

451455
for (i = 0; i < frames_without_wrap; i++) {
452456
for (elem = 0; elem < lookup->num_elems; elem++) {
453-
src = (int32_t *)lookup->copy_elem[elem].src;
457+
src = (const int32_t *)lookup->copy_elem[elem].src;
454458
dst = (int32_t *)lookup->copy_elem[elem].dest;
455459
*dst = *src;
456460
lookup->copy_elem[elem].src = src +
@@ -488,7 +492,7 @@ static void mux_s32le(struct comp_dev *dev, struct sof_sink *sink,
488492
struct mux_look_up *lookup)
489493
{
490494
uint32_t i;
491-
int32_t *src;
495+
const int32_t *src;
492496
int32_t *dst;
493497
uint32_t elem;
494498
uint32_t frames_without_wrap;
@@ -508,7 +512,7 @@ static void mux_s32le(struct comp_dev *dev, struct sof_sink *sink,
508512

509513
for (i = 0; i < frames_without_wrap; i++) {
510514
for (elem = 0; elem < lookup->num_elems; elem++) {
511-
src = (int32_t *)lookup->copy_elem[elem].src;
515+
src = (const int32_t *)lookup->copy_elem[elem].src;
512516
dst = (int32_t *)lookup->copy_elem[elem].dest;
513517
*dst = *src;
514518
lookup->copy_elem[elem].src = src +

0 commit comments

Comments
 (0)