diff --git a/spa/plugins/audioconvert/channelmix-ops.c b/spa/plugins/audioconvert/channelmix-ops.c index d752c6fb1..5ec08a7f8 100644 --- a/spa/plugins/audioconvert/channelmix-ops.c +++ b/spa/plugins/audioconvert/channelmix-ops.c @@ -168,14 +168,19 @@ static int make_matrix(struct channelmix *mix) float llev = 0.5f; float max = 0.0f; + spa_log_debug(mix->log, "src-mask:%08"PRIx64" dst-mask:%08"PRIx64, + src_mask, dst_mask); + + if ((src_mask & _MASK(MONO)) == _MASK(MONO)) + src_mask = _MASK(FC); + if ((dst_mask & _MASK(MONO)) == _MASK(MONO)) + dst_mask = _MASK(FC); + for (i = 0; i < NUM_CHAN; i++) { if (src_mask & dst_mask & (1ULL << (i + 2))) matrix[i][i]= 1.0f; } - if ((dst_mask & _MASK(MONO)) == _MASK(MONO)) - dst_mask = _MASK(FC); - unassigned = src_mask & ~dst_mask; spa_log_debug(mix->log, "unassigned %08" PRIx64, unassigned); diff --git a/spa/plugins/audioconvert/channelmix.c b/spa/plugins/audioconvert/channelmix.c index c79724253..53c09f46d 100644 --- a/spa/plugins/audioconvert/channelmix.c +++ b/spa/plugins/audioconvert/channelmix.c @@ -211,9 +211,9 @@ static int setup_convert(struct impl *this, for (i = 0, dst_mask = 0; i < dst_chan; i++) dst_mask |= 1UL << dst_info->info.raw.position[i]; - if (src_mask & 1) + if (src_mask & 1 || src_chan == 1) src_mask = default_mask(src_chan); - if (dst_mask & 1) + if (dst_mask & 1 || dst_chan == 1) dst_mask = default_mask(dst_chan); spa_log_info(this->log, NAME " %p: %s/%d@%d->%s/%d@%d %08"PRIx64":%08"PRIx64, this,