channelmix: only produce REAR/SIDE from FC in simple upmix

Only simple upmixing would replicate the FC channel into REAR/SIDE.
The PSD method would take the diff between FL/FR (which would
be 0 if only FC is available) and not generate output.
This commit is contained in:
Wim Taymans 2022-08-11 09:37:43 +02:00
parent da9868594d
commit 3df0fb21a0

View file

@ -441,10 +441,13 @@ static int make_matrix(struct channelmix *mix)
spa_log_debug(mix->log, "produce SIDE from STEREO");
_MATRIX(SL,FL) += slev;
_MATRIX(SR,FR) += slev;
} else if ((src_mask & FRONT) == FRONT) {
} else if ((src_mask & FRONT) == FRONT &&
mix->upmix == CHANNELMIX_UPMIX_SIMPLE) {
spa_log_debug(mix->log, "produce SIDE from FC");
_MATRIX(SL,FC) += clev;
_MATRIX(SR,FC) += clev;
} else {
spa_log_debug(mix->log, "won't produce SIDE");
}
}
if (unassigned & REAR) {
@ -456,10 +459,13 @@ static int make_matrix(struct channelmix *mix)
spa_log_debug(mix->log, "produce REAR from STEREO");
_MATRIX(RL,FL) += slev;
_MATRIX(RR,FR) += slev;
} else if ((src_mask & FRONT) == FRONT) {
} else if ((src_mask & FRONT) == FRONT &&
mix->upmix == CHANNELMIX_UPMIX_SIMPLE) {
spa_log_debug(mix->log, "produce REAR from FC");
_MATRIX(RL,FC) += clev;
_MATRIX(RR,FC) += clev;
} else {
spa_log_debug(mix->log, "won't produce SIDE");
}
}