📄 mp3dec_layer2_fp.c
字号:
break;
case 6:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
tmp_sample1 = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k] - (*smpl_rw)[4][j][k];
(*smpl_rw)[2][j][k] = 0.5f * ((*smpl_rw)[0][j][k] + (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - tmp_sample1);
(*smpl_rw)[1][j][k] = tmp_sample;
(*smpl_rw)[0][j][k] = tmp_sample1;
}
}
else {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[4][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[3][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
}
break;
case 7:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
tmp_sample1 = (*smpl_rw)[4][j][k];
(*smpl_rw)[4][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[0][j][k] + (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k] - (*smpl_rw)[4][j][k];
(*smpl_rw)[2][j][k] = 0.5f * ((*smpl_rw)[0][j][k] + (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - tmp_sample1);
(*smpl_rw)[0][j][k] = tmp_sample;
(*smpl_rw)[1][j][k] = tmp_sample1;
}
}
else {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
tmp_sample = (*smpl_rw)[4][j][k];
(*smpl_rw)[4][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[4][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
}
break;
}
}
else if (state_com->mc_header.surround == 1 && state_com->mc_header.center != 0) {
switch(tc_alloc) {
case 0:
if (state_com->mc_header.dematrix_procedure == 2)
for (j=0; j<36; j++) {
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k];
}
else
for (j=0; j<36; j++) {
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
}
break;
case 1:
if (state_com->mc_header.dematrix_procedure == 2)
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
else
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
break;
case 2:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
if (state_com->mc_header.dematrix_procedure == 2)
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k];
else
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
break;
case 3:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[3][j][k];
if (state_com->mc_header.dematrix_procedure == 2)
(*smpl_rw)[3][j][k] = -(*smpl_rw)[0][j][k] + (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k];
else
(*smpl_rw)[3][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
break;
case 4:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
if (state_com->mc_header.dematrix_procedure == 2)
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] + (*smpl_rw)[3][j][k];
else
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
break;
case 5:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
tmp_sample1 = (*smpl_rw)[3][j][k];
(*smpl_rw)[2][j][k] = 0.5f * ((*smpl_rw)[0][j][k] + (*smpl_rw)[1][j][k] - tmp_sample - tmp_sample1);
(*smpl_rw)[3][j][k] = 0.5f * ((*smpl_rw)[1][j][k] - (*smpl_rw)[0][j][k] + tmp_sample - tmp_sample1);
(*smpl_rw)[0][j][k] = tmp_sample;
(*smpl_rw)[1][j][k] = tmp_sample1;
}
break;
}
}
else if (state_com->mc_header.surround == 1 || state_com->mc_header.center != 0) {
switch(tc_alloc) {
case 0:
for (j=0; j<36; j++) {
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k];
}
break;
case 1:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
break;
case 2:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
break;
}
}
else if (state_com->mc_header.surround == 2) {
switch(tc_alloc) {
case 0:
for (j=0; j<36; j++) {
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[3][j][k];
}
break;
case 1:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
break;
case 2:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[3][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
break;
case 3:
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = (*smpl_rw)[1][j][k] - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
break;
}
}
}
}
#if !defined (__INTEL_COMPILER) && defined( _MSC_VER)
#pragma optimize( "", on )
#endif
void mp3dec_mc_denormalizing(MP3Dec *state)
{
MP3Dec_com *state_com = &(state->com);
Ipp32f m1;
Ipp32f m2;
Ipp32f m3;
Ipp32s stereo = state_com->stereo;
Ipp32s channels = stereo + state_com->mc_channel;
samplefloatrw *smpl_rw = state->smpl_rw;
switch (state_com->mc_header.dematrix_procedure) {
case 0:
case 2:
m1 = 1.0f + 1.414213562f;
m2 = m1 * 1.414213562f;
m3 = m1 * 1.414213562f;
break;
case 1:
m1 = 1.5f + 0.5f * 1.414213562f;
m2 = m1 * 1.414213562f;
m3 = m1 * 2.0f;
break;
default:
case 3:
m1 = 1.0f;
m2 = 1.0f;
m3 = 1.0f;
break;
}
if (state_com->mc_header.dematrix_procedure != 3 ) {
ippsMulC_32f_I(m1, &(*smpl_rw)[0][0][0], stereo * 36 * 32);
if (state_com->mc_header.dematrix_procedure != 1)
{
if (state_com->mc_header.surround == 3) {
if (state_com->mc_header.center != 0)
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32);
}
else {
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32 * (channels - 2));
}
}
else
{
if (state_com->mc_header.surround == 3) {
if (state_com->mc_header.center != 0)
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32);
}
else if (state_com->mc_channel == 3) {
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32);
ippsMulC_32f_I(m3, &(*smpl_rw)[3][0][0], 36 * 32 * 2);
}
else if (state_com->mc_channel == 2)
{
if (state_com->mc_header.surround == 2)
ippsMulC_32f_I(m3, &(*smpl_rw)[2][0][0], 36 * 32 * 2);
else {
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32);
ippsMulC_32f_I(m3, &(*smpl_rw)[3][0][0], 36 * 32);
}
}
else
{
if (state_com->mc_header.center == 0)
ippsMulC_32f_I(m3, &(*smpl_rw)[2][0][0], 36 * 32);
else
ippsMulC_32f_I(m2, &(*smpl_rw)[2][0][0], 36 * 32);
}
}
}
}
void mp3dec_mc_lfe_l2(MP3Dec *state, Ipp32f *out)
{
Ipp32s idx = state->com.alloc_table[state->com.mc_lfe_alloc];
Ipp32s x = mp3_numbits[idx];
Ipp32s xor_coef;
Ipp32f scale;
xor_coef = (1 << (x - 1));
scale = mp3dec_C_quant[idx] * mp3dec_scale_values[state->com.mc_lfe_scf];
ippsXorC_32u_I(xor_coef, (Ipp32u *)state->com.mc_lfe_spl, 12);
ippsLShiftC_32s_I(32 - x, state->com.mc_lfe_spl, 12);
ippsConvert_32s32f_Sfs(state->com.mc_lfe_spl, out, 12, 0);
ippsAddC_32f_I(mp3dec_D_quant[idx], out, 12);
ippsMulC_32f_I(scale, out, 12);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -