format = dshare->shmptr->s.format;
for (chn = 0; chn < channels; chn++) {
dchn = dshare->bindings ? dshare->bindings[chn] : chn;
- snd_pcm_area_silence(&dst_areas[dchn], 0, dshare->shmptr->s.buffer_size, format);
+ if (dchn != UINT_MAX)
+ snd_pcm_area_silence(&dst_areas[dchn], 0,
+ dshare->shmptr->s.buffer_size, format);
}
}
} else {
for (chn = 0; chn < channels; chn++) {
dchn = dshare->bindings ? dshare->bindings[chn] : chn;
- snd_pcm_area_copy(&dst_areas[dchn], dst_ofs, &src_areas[chn], src_ofs, size, format);
+ if (dchn != UINT_MAX)
+ snd_pcm_area_copy(&dst_areas[dchn], dst_ofs,
+ &src_areas[chn], src_ofs, size, format);
}
}
dshare->spcm = spcm;
}
- for (chn = 0; chn < dshare->channels; chn++)
- dshare->u.dshare.chn_mask |= (1ULL<<dshare->bindings[chn]);
+ for (chn = 0; chn < dshare->channels; chn++) {
+ unsigned int dchn = dshare->bindings ? dshare->bindings[chn] : chn;
+ if (dchn != UINT_MAX)
+ dshare->u.dshare.chn_mask |= (1ULL << dchn);
+ }
if (dshare->shmptr->u.dshare.chn_mask & dshare->u.dshare.chn_mask) {
SNDERR("destination channel specified in bindings is already used");
dshare->u.dshare.chn_mask = 0;