dreamsourcelab-dslogic: Fixed deinterleaving when non-contiguous set of channels are enabled

This commit is contained in:
Joel Holdsworth 2017-09-24 22:07:30 -06:00 committed by Uwe Hermann
parent cb17f580b9
commit 55584d38dd
1 changed files with 5 additions and 3 deletions

View File

@ -733,10 +733,12 @@ static void deinterleave_buffer(const uint8_t *src, size_t length,
for (int bit = 0; bit != 64; bit++) { for (int bit = 0; bit != 64; bit++) {
const uint64_t *word_ptr = src_ptr; const uint64_t *word_ptr = src_ptr;
sample = 0; sample = 0;
for (size_t channel = 0; channel != channel_count; for (unsigned int channel = 0; channel != 16;
channel++) { channel++) {
if ((channel_mask & (1 << channel)) && const uint16_t m = channel_mask >> channel;
(*word_ptr++ & (1ULL << bit))) if (!m)
break;
if ((m & 1) && ((*word_ptr++ >> bit) & 1ULL))
sample |= 1 << channel; sample |= 1 << channel;
} }
*dst_ptr++ = sample; *dst_ptr++ = sample;