channelmix: handle more conversion to mono

This commit is contained in:
Wim Taymans 2018-12-05 15:54:07 +01:00
parent bf1c927087
commit e7462c470e

View file

@ -202,7 +202,10 @@ static int make_matrix(struct impl *this,
spa_log_debug(this->log, "unassigned %08lx", unassigned); spa_log_debug(this->log, "unassigned %08lx", unassigned);
if (unassigned & _MASK(FC)){ if (unassigned & _MASK(FC)){
if ((dst_mask & STEREO) == STEREO){ if (dst_mask & _MASK(MONO)) {
matrix[M][FC] += 1.0f;
}
else if ((dst_mask & STEREO) == STEREO){
if(src_mask & STEREO) { if(src_mask & STEREO) {
matrix[FL][FC] += clev; matrix[FL][FC] += clev;
matrix[FR][FC] += clev; matrix[FR][FC] += clev;
@ -210,9 +213,11 @@ static int make_matrix(struct impl *this,
matrix[FL][FC] += SQRT1_2; matrix[FL][FC] += SQRT1_2;
matrix[FR][FC] += SQRT1_2; matrix[FR][FC] += SQRT1_2;
} }
} else } else {
spa_log_error(this->log, "can't assign FC");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & STEREO){ if (unassigned & STEREO){
if (dst_mask & _MASK(MONO)) { if (dst_mask & _MASK(MONO)) {
@ -224,9 +229,11 @@ static int make_matrix(struct impl *this,
matrix[FC][FR] += SQRT1_2; matrix[FC][FR] += SQRT1_2;
if (src_mask & _MASK(FC)) if (src_mask & _MASK(FC))
matrix[FC][FC] = clev * SQRT2; matrix[FC][FC] = clev * SQRT2;
} else } else {
spa_log_error(this->log, "can't assign STEREO");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & _MASK(RC)) { if (unassigned & _MASK(RC)) {
if (dst_mask & _MASK(RL)){ if (dst_mask & _MASK(RL)){
@ -251,9 +258,11 @@ static int make_matrix(struct impl *this,
} }
} else if (dst_mask & _MASK(FC)) { } else if (dst_mask & _MASK(FC)) {
matrix[FC][RC] += slev * SQRT1_2; matrix[FC][RC] += slev * SQRT1_2;
} else } else {
spa_log_error(this->log, "can't assign RC");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & _MASK(RL)) { if (unassigned & _MASK(RL)) {
if (dst_mask & _MASK(RC)) { if (dst_mask & _MASK(RC)) {
@ -285,9 +294,11 @@ static int make_matrix(struct impl *this,
} else if (dst_mask & _MASK(FC)) { } else if (dst_mask & _MASK(FC)) {
matrix[FC][RL]+= slev * SQRT1_2; matrix[FC][RL]+= slev * SQRT1_2;
matrix[FC][RR]+= slev * SQRT1_2; matrix[FC][RR]+= slev * SQRT1_2;
} else } else {
spa_log_error(this->log, "can't assign RL");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & _MASK(SL)) { if (unassigned & _MASK(SL)) {
if (dst_mask & _MASK(RL)) { if (dst_mask & _MASK(RL)) {
@ -319,9 +330,11 @@ static int make_matrix(struct impl *this,
} else if (dst_mask & _MASK(FC)) { } else if (dst_mask & _MASK(FC)) {
matrix[FC][SL] += slev * SQRT1_2; matrix[FC][SL] += slev * SQRT1_2;
matrix[FC][SR] += slev * SQRT1_2; matrix[FC][SR] += slev * SQRT1_2;
} else } else {
spa_log_error(this->log, "can't assign SL");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & _MASK(FLC)) { if (unassigned & _MASK(FLC)) {
if (dst_mask & _MASK(FL)) { if (dst_mask & _MASK(FL)) {
@ -330,18 +343,24 @@ static int make_matrix(struct impl *this,
} else if(dst_mask & _MASK(FC)) { } else if(dst_mask & _MASK(FC)) {
matrix[FC][FLC]+= SQRT1_2; matrix[FC][FLC]+= SQRT1_2;
matrix[FC][FRC]+= SQRT1_2; matrix[FC][FRC]+= SQRT1_2;
} else } else {
spa_log_error(this->log, "can't assign FLC");
return -ENOTSUP; return -ENOTSUP;
} }
}
if (unassigned & _MASK(LFE)) { if (unassigned & _MASK(LFE)) {
if (dst_mask & _MASK(FC)) { if (dst_mask & _MASK(MONO)) {
matrix[M][LFE] += llev;
} else if (dst_mask & _MASK(FC)) {
matrix[FC][LFE] += llev; matrix[FC][LFE] += llev;
} else if (dst_mask & _MASK(FL)) { } else if (dst_mask & _MASK(FL)) {
matrix[FL][LFE] += llev * SQRT1_2; matrix[FL][LFE] += llev * SQRT1_2;
matrix[FR][LFE] += llev * SQRT1_2; matrix[FR][LFE] += llev * SQRT1_2;
} else } else {
spa_log_error(this->log, "can't assign LFE");
return -ENOTSUP; return -ENOTSUP;
} }
}
c = 0; c = 0;
for (i = 0; i < NUM_CHAN; i++) { for (i = 0; i < NUM_CHAN; i++) {