📄 ac3_dec_downmixing.c
字号:
ippsZero_32f(samL, 256);
ippsZero_32f(samR, 256);
} else if (state->dualmonomode == DUAL_MIXMONO) {
ippsAdd_32f(samL, samR, samC, 256);
ippsMulC_32f_I(m6dB, samC, 256); /* 0.501187233 = -6dB */
ippsZero_32f(samL, 256);
ippsZero_32f(samR, 256);
}
}
} else if (state->bsi.karaokeMode) {
Ipp32s karaokeCapable = state->karaokeCapable;
downmix = 1;
if (outfront == 1) {
if (karaokeCapable >= 0) {
Ipp32f c0 = karaokeTable[karaokeCapable][0];
Ipp32f c1 = karaokeTable[karaokeCapable][1];
Ipp32f c2 = karaokeTable[karaokeCapable][2];
ippsMulC_32f_I(c0, samC, 256);
ippsAddProductC_32f(karaokeSL, c1, samC, 256);
ippsAddProductC_32f(samSR, c2, samC, 256);
} else {
ippsMulC_32f_I(cmixgain * m3dB * 2, samC, 256);
ippsAddProductC_32f(karaokeSL, m3dB * smixgain, samC, 256);
ippsAddProductC_32f(samSR, m3dB * smixgain, samC, 256);
}
ippsAdd_32f_I(samR, samL, 256);
ippsAddProductC_32f(samL, m3dB, samC, 256);
} else if (outfront == 2) {
if (karaokeCapable >= 0) {
Ipp32f c0 = karaokeTable[karaokeCapable][3];
Ipp32f c1 = karaokeTable[karaokeCapable][4];
Ipp32f c2 = karaokeTable[karaokeCapable][5];
Ipp32f c3 = karaokeTable[karaokeCapable][6];
Ipp32f c4 = karaokeTable[karaokeCapable][7];
Ipp32f c5 = karaokeTable[karaokeCapable][8];
ippsAddProductC_32f(samC, c0, samL, 256);
ippsAddProductC_32f(samC, c1, samR, 256);
ippsAddProductC_32f(karaokeSL, c2, samL, 256);
ippsAddProductC_32f(karaokeSL, c3, samR, 256);
ippsAddProductC_32f(samSR, c4, samL, 256);
ippsAddProductC_32f(samSR, c5, samR, 256);
} else {
ippsAddProductC_32f(samC, cmixgain, samL, 256);
ippsAddProductC_32f(samC, cmixgain, samR, 256);
if (inrear == 1) {
ippsAddProductC_32f(samS, smixgain * m3dB, samL, 256);
ippsAddProductC_32f(samS, smixgain * m3dB, samR, 256);
} else if (inrear == 2) {
ippsAddProductC_32f(samSL, smixgain, samL, 256);
ippsAddProductC_32f(samSR, smixgain, samR, 256);
}
}
} else if (outfront == 3) {
if (karaokeCapable >= 0) {
Ipp32f c0 = karaokeTable[karaokeCapable][9];
Ipp32f c1 = karaokeTable[karaokeCapable][10];
Ipp32f c2 = karaokeTable[karaokeCapable][11];
Ipp32f c3 = karaokeTable[karaokeCapable][12];
Ipp32f c4 = karaokeTable[karaokeCapable][13];
Ipp32f c5 = karaokeTable[karaokeCapable][14];
Ipp32f c6 = karaokeTable[karaokeCapable][15];
Ipp32f c7 = karaokeTable[karaokeCapable][16];
Ipp32f c8 = karaokeTable[karaokeCapable][17];
if (c0 >= 0) {
ippsAddProductC_32f(samC, c3, samL, 256);
}
else ippsAddProductC_32f(samC, c3, samR, 256);
if (c1 >= 0) ippsAddProductC_32f(karaokeSL, c4, samL, 256);
else ippsAddProductC_32f(karaokeSL, c4, samR, 256);
if (c2 >= 0) ippsAddProductC_32f(samSR, c5, samL, 256);
else ippsAddProductC_32f(samSR, c5, samR, 256);
ippsMulC_32f_I(c6, samC, 256);
ippsAddProductC_32f(karaokeSL, c7, samC, 256);
ippsAddProductC_32f(samSR, c8, samC, 256);
} else {
if (inrear == 1) {
ippsAddProductC_32f(samS, smixgain, samC, 256);
} else if (inrear == 2) {
ippsAddProductC_32f(samSL, smixgain, samL, 256);
ippsAddProductC_32f(samSR, smixgain, samR, 256);
}
}
}
ippsZero_32f(karaokeSL, 256);
ippsZero_32f(samSR, 256);
} else {
if (state->out_acmod == ACMOD_0) { /* Dolby Surround compatible */
if (infront != 2) {
ippsMulC_32f_I(m3dB, samC, 256);
ippsAdd_32f_I(samC, samL, 256);
ippsAdd_32f_I(samC, samR, 256);
if (infront != 1) downmix = 1;
}
if (inrear == 1) {
ippsMulC_32f_I(m3dB, samS, 256);
ippsSub_32f_I(samS, samL, 256);
ippsAdd_32f_I(samS, samR, 256);
downmix = 1;
} else if (inrear == 2) {
ippsAdd_32f_I(samSR, samSL, 256);
ippsMulC_32f_I(m3dB, samSL, 256);
ippsSub_32f_I(samSL, samL, 256);
ippsAdd_32f_I(samSL, samR, 256);
downmix = 1;
}
} else if (state->out_acmod == ACMOD_10) { /* center only */
if (infront == 3) {
ippsMulC_32f_I(2 * cmixgain * m3dB, samC, 256);
downmix = 1;
}
if (infront != 1) {
ippsAdd_32f_I(samL, samR, 256);
ippsAddProductC_32f(samR, m3dB, samC, 256);
downmix = 1;
}
if (inrear == 1) {
ippsAddProductC_32f(samS, smixgain * m3dB, samC, 256);
if (smixgain > 0) downmix = 1;
} else if (inrear == 2) {
ippsAdd_32f(samSL, samSR, samSL, 256);
ippsAddProductC_32f(samSL, smixgain * m3dB, samC, 256);
if (smixgain > 0) downmix = 1;
}
} else { /* more than center output requested */
if (outfront == 2) {
if (infront == 1) {
ippsMulC_32f(samC, m3dB, samL, 256);
ippsCopy_32f(samL, samR, 256);
} else if (infront == 3) {
ippsMulC_32f_I(cmixgain, samC, 256);
ippsAdd_32f_I(samC, samL, 256);
ippsAdd_32f_I(samC, samR, 256);
downmix = 1;
}
}
if (inrear == 1) { /* single surround channel coded */
if (outrear == 0) { /* no surround loudspeakers */
ippsMulC_32f_I(smixgain * m3dB, samS, 256);
ippsAdd_32f_I(samS, samL, 256);
ippsAdd_32f_I(samS, samR, 256);
if (smixgain > 0) downmix = 1;
} else if (outrear == 2) { /* two surround loudspeaker channels */
ippsMulC_32f(samS, m3dB, samSL, 256);
ippsCopy_32f(samSL, samSR, 256);
}
} else if (inrear == 2) { /* two surround channels encoded */
if (outrear == 0) {
ippsAddProductC_32f(samSL, smixgain, samL, 256);
ippsAddProductC_32f(samSR, smixgain, samR, 256);
if (smixgain > 0) downmix = 1;
} else if (outrear == 1) {
ippsAdd_32f_I(samSR, samSL, 256);
ippsMulC_32f(samSL, m3dB, samS, 256);
downmix = 1;
}
}
}
}
} else {
if (state->bsi.acmod == ACMOD_10) {
ippsZero_32f(samL, 128);
ippsZero_32f(samL+256, 128);
ippsZero_32f(samR, 128);
ippsZero_32f(samR+256, 128);
}
if ((infront == 2) && (outfront != 2)) {
ippsZero_32f(samC, 128);
ippsZero_32f(samC+256, 128);
}
if (inrear == 0) {
if (outrear == 2) {
ippsZero_32f(samSL, 128);
ippsZero_32f(samSL+256, 128);
ippsZero_32f(samSR, 128);
ippsZero_32f(samSR+256, 128);
} else if (outrear == 1) {
ippsZero_32f(samS, 128);
ippsZero_32f(samS+256, 128);
}
} else if (inrear == 1) {
if (outrear == 2) {
ippsZero_32f(samSL, 128);
ippsZero_32f(samSL+256, 128);
ippsZero_32f(samSR, 128);
ippsZero_32f(samSR+256, 128);
}
}
if (state->bsi.acmod == ACMOD_0) { /* 1+1 mode, dual independent mono channels present */
gain = drc(state->bsi.compre, state->bsi.compr, dynrng, 0,
state->bsi.dialnorm, state);
ippsMulC_32f_I(gain, samL, 128);
ippsMulC_32f_I(gain, samL+256, 128);
gain = drc(state->bsi.compr2e, state->bsi.compr2, dynrng2, 0,
state->bsi.dialnorm2, state);
ippsMulC_32f_I(gain, samR, 128);
ippsMulC_32f_I(gain, samR+256, 128);
if (outfront == 1) { /* 1 front loudspeaker (center) */
if (state->dualmonomode == DUAL_LEFTMONO) {
ippsCopy_32f(samL, samC, 128);
ippsCopy_32f(samL+256, samC+256, 128);
} else if (state->dualmonomode == DUAL_RGHTMONO) {
ippsCopy_32f(samR, samC, 128);
ippsCopy_32f(samR+256, samC+256, 128);
} else {
ippsAdd_32f(samL, samR, samC, 128);
ippsAdd_32f(samL+256, samR+256, samC+256, 128);
ippsMulC_32f_I(m6dB, samC, 128); /* 0.501187233 = -6dB */
ippsMulC_32f_I(m6dB, samC+256, 128); /* 0.501187233 = -6dB */
}
} else if (outfront == 2) {
if (state->dualmonomode == DUAL_LEFTMONO) {
ippsMulC_32f_I(m3dB, samL, 128); /* 0.707945 = -3dB */
ippsMulC_32f_I(m3dB, samL+256, 128); /* 0.707945 = -3dB */
ippsCopy_32f(samL, samR, 128);
ippsCopy_32f(samL+256, samR+256, 128);
} else if (state->dualmonomode == DUAL_RGHTMONO) {
ippsMulC_32f_I(m3dB, samR, 128); /* 0.707945 = -3dB */
ippsMulC_32f_I(m3dB, samR+256, 128); /* 0.707945 = -3dB */
ippsCopy_32f(samR, samL, 128);
ippsCopy_32f(samR+256, samL+256, 128);
} else if (state->dualmonomode == DUAL_MIXMONO) {
ippsAdd_32f_I(samR, samL, 128);
ippsAdd_32f_I(samR+256, samL+256, 128);
ippsMulC_32f_I(m6dB, samL, 128); /* 0.501187233 = -6dB */
ippsMulC_32f_I(m6dB, samL+256, 128); /* 0.501187233 = -6dB */
ippsCopy_32f(samL, samR, 128);
ippsCopy_32f(samL+256, samR+256, 128);
}
} else {
if (state->dualmonomode == DUAL_LEFTMONO) {
ippsCopy_32f(samL, samC, 128);
ippsCopy_32f(samL+256, samC+256, 128);
ippsZero_32f(samL, 128);
ippsZero_32f(samL+256, 128);
ippsZero_32f(samR, 128);
ippsZero_32f(samR+256, 128);
} else if (state->dualmonomode == DUAL_RGHTMONO) {
ippsCopy_32f(samR, samC, 128);
ippsCopy_32f(samR+256, samC+256, 128);
ippsZero_32f(samL, 128);
ippsZero_32f(samL+256, 128);
ippsZero_32f(samR, 128);
ippsZero_32f(samR+256, 128);
} else if (state->dualmonomode == DUAL_MIXMONO) {
ippsAdd_32f(samL, samR, samC, 128);
ippsAdd_32f(samL+256, samR+256, samC+256, 128);
ippsMulC_32f_I(m6dB, samC, 128); /* 0.501187233 = -6dB */
ippsMulC_32f_I(m6dB, samC+256, 128); /* 0.501187233 = -6dB */
ippsZero_32f(samL, 128);
ippsZero_32f(samL+256, 128);
ippsZero_32f(samR, 128);
ippsZero_32f(samR+256, 128);
}
}
} else if (state->bsi.karaokeMode) {
Ipp32s karaokeCapable = state->karaokeCapable;
downmix = 1;
if (outfront == 1) {
if (karaokeCapable >= 0) {
Ipp32f c0 = karaokeTable[karaokeCapable][0];
Ipp32f c1 = karaokeTable[karaokeCapable][1];
Ipp32f c2 = karaokeTable[karaokeCapable][2];
ippsMulC_32f_I(c0, samC, 128);
ippsMulC_32f_I(c0, samC+256, 128);
ippsAddProductC_32f(karaokeSL, c1, samC, 128);
ippsAddProductC_32f(karaokeSL+256, c1, samC+256, 128);
ippsAddProductC_32f(samSR, c2, samC, 128);
ippsAddProductC_32f(samSR+256, c2, samC+256, 128);
} else {
ippsMulC_32f_I(cmixgain * m3dB * 2, samC, 128);
ippsMulC_32f_I(cmixgain * m3dB * 2, samC+256, 128);
ippsAddProductC_32f(karaokeSL, m3dB * smixgain, samC, 128);
ippsAddProductC_32f(karaokeSL+256, m3dB * smixgain, samC+256, 128);
ippsAddProductC_32f(samSR, m3dB * smixgain, samC, 128);
ippsAddProductC_32f(samSR+256, m3dB * smixgain, samC+256, 128);
}
ippsAdd_32f_I(samR, samL, 128);
ippsAdd_32f_I(samR+256, samL+256, 128);
ippsAddProductC_32f(samL, m3dB, samC, 128);
ippsAddProductC_32f(samL+256, m3dB, samC+256, 128);
} else if (outfront == 2) {
if (karaokeCapable >= 0) {
Ipp32f c0 = karaokeTable[karaokeCapable][3];
Ipp32f c1 = karaokeTable[karaokeCapable][4];
Ipp32f c2 = karaokeTable[karaokeCapable][5];
Ipp32f c3 = karaokeTable[karaokeCapable][6];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -