channelmix: try to handle 1 channel as MONO/FC

This commit is contained in:
Wim Taymans 2019-08-16 15:03:16 +02:00
parent 6f16d6ff8e
commit 954c96632c
2 changed files with 10 additions and 5 deletions

View file

@ -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);

View file

@ -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,