📄 mp3dec_layer2_fp.c
字号:
}
void mp3dec_mc_dematricing(MP3Dec *state)
{
MP3Dec_com *state_com = &(state->com);
Ipp32s ii, j, k, tc_alloc, sbgr = 0;
Ipp32f tmp_sample, tmp_sample1, surround_sample;
samplefloatrw *smpl_rw = state->smpl_rw; // out of imdct
Ipp32f (*pred_buf)[8][36+9] = state->mc_pred_buf;
if (state->com.mc_prediction_on){
for (k=0; k<2; k++)
for (ii=0; ii<8; ii++) {
for (j = 0; j < 9; j++)
state->mc_pred_buf[k][ii][j] = state->mc_pred_buf[k][ii][j+36];
for (j=0;j<36;j++)
state->mc_pred_buf[k][ii][9+j] = (*smpl_rw)[k][j][ii];
}
}
for(k = 0; k < 32; k ++) {
if (state_com->mc_prediction_on && k < 8 && state_com->mc_prediction[k]) {
if ((state_com->mc_header.surround == 2) && (state_com->mc_header.center != 0)) {
switch (state_com->mc_dyn_cross_mode[k])
{
case 0:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 0, 2, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 3, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 0, 4, (*smpl_rw)[4][j][k]);
ADD_PREDICT(k, j, 1, 5, (*smpl_rw)[4][j][k]);
}
break;
case 1:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 0, 2, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 3, (*smpl_rw)[3][j][k]);
}
break;
case 2:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 0, 2, (*smpl_rw)[4][j][k]);
ADD_PREDICT(k, j, 1, 3, (*smpl_rw)[4][j][k]);
}
break;
case 3:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 0, 2, (*smpl_rw)[4][j][k]);
ADD_PREDICT(k, j, 1, 3, (*smpl_rw)[4][j][k]);
}
break;
case 4:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
}
break;
case 5:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[3][j][k]);
}
break;
case 6:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[4][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[4][j][k]);
}
break;
case 8:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
}
break;
case 9:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[4][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[4][j][k]);
}
break;
case 10:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[3][j][k]);
}
break;
}
}
else if ((state_com->mc_header.surround == 1 && state_com->mc_header.center != 0) ||
(state_com->mc_header.surround == 2 && state_com->mc_header.center == 0))
{
switch(state_com->mc_dyn_cross_mode[k])
{
case 0:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 0, 2, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 3, (*smpl_rw)[3][j][k]);
}
break;
case 1:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
}
break;
case 2:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[3][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[3][j][k]);
}
break;
}
}
else if (((state_com->mc_header.surround == 0 || state_com->mc_header.surround == 3) && state_com->mc_header.center != 0) ||
(state_com->mc_header.surround == 1 && state_com->mc_header.center == 0))
{
switch(state_com->mc_dyn_cross_mode[k])
{
case 0:
for (j=0; j<36; j++) {
ADD_PREDICT(k, j, 0, 0, (*smpl_rw)[2][j][k]);
ADD_PREDICT(k, j, 1, 1, (*smpl_rw)[2][j][k]);
}
break;
}
}
}
}
for(k = 0; k < 32; k ++) {
if(state_com->mc_tc_sbgr_select == 1)
tc_alloc = state_com->mc_tc_allocation;
else {
sbgr = mp3_mc_sb_group[k];
tc_alloc = state_com->mc_tc_alloc[sbgr];
}
if (state_com->mc_header.dematrix_procedure != 3)
if ((state_com->mc_header.surround == 2) && (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++) {
surround_sample = ((*smpl_rw)[3][j][k] + (*smpl_rw)[4][j][k]) * 0.5f;
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] -
(*smpl_rw)[2][j][k] + surround_sample;
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] -
(*smpl_rw)[2][j][k] - surround_sample;
}
}
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)[4][j][k];
}
}
break;
case 1:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
surround_sample = ((*smpl_rw)[3][j][k] + (*smpl_rw)[4][j][k]) * 0.5f;
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[0][j][k] -
(*smpl_rw)[2][j][k] + surround_sample;
(*smpl_rw)[1][j][k] = (*smpl_rw)[1][j][k] -
(*smpl_rw)[2][j][k] - surround_sample;
(*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)[4][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
}
break;
case 2:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
surround_sample = ((*smpl_rw)[3][j][k] + (*smpl_rw)[4][j][k]) * 0.5f;
tmp_sample = (*smpl_rw)[2][j][k];
(*smpl_rw)[2][j][k] = (*smpl_rw)[1][j][k] -
(*smpl_rw)[2][j][k] - surround_sample;
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] -
(*smpl_rw)[2][j][k] + surround_sample;
(*smpl_rw)[1][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)[1][j][k] -
(*smpl_rw)[2][j][k] - (*smpl_rw)[4][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] = tmp_sample;
}
}
break;
case 3:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = -2.0f * ((*smpl_rw)[0][j][k] -
(*smpl_rw)[2][j][k] - (*smpl_rw)[3][j][k]) - (*smpl_rw)[4][j][k];
(*smpl_rw)[1][j][k] = (*smpl_rw)[0][j][k] + (*smpl_rw)[1][j][k] -
2.0f * (*smpl_rw)[2][j][k] - tmp_sample;
(*smpl_rw)[0][j][k] = tmp_sample;
}
}
else {
for (j=0; j<36; j++) {
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)[1][j][k] = (*smpl_rw)[1][j][k] -
(*smpl_rw)[2][j][k] - (*smpl_rw)[4][j][k];
(*smpl_rw)[0][j][k] = tmp_sample;
}
}
break;
case 4:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[4][j][k];
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] + (*smpl_rw)[1][j][k] -
2.0f * (*smpl_rw)[2][j][k] - (*smpl_rw)[4][j][k];
(*smpl_rw)[4][j][k] = 2.0f * (*smpl_rw)[1][j][k] -
2.0f * ((*smpl_rw)[2][j][k] + (*smpl_rw)[4][j][k]) - (*smpl_rw)[3][j][k];
(*smpl_rw)[1][j][k] = tmp_sample;
}
}
else {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[4][j][k];
(*smpl_rw)[0][j][k] = (*smpl_rw)[0][j][k] - (*smpl_rw)[2][j][k] - (*smpl_rw)[3][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;
case 5:
if (state_com->mc_header.dematrix_procedure == 2) {
for (j=0; j<36; j++) {
tmp_sample = (*smpl_rw)[3][j][k];
(*smpl_rw)[3][j][k] = 0.5f * ((*smpl_rw)[1][j][k] -
(*smpl_rw)[0][j][k] + (*smpl_rw)[3][j][k] - (*smpl_rw)[4][j][k]);
(*smpl_rw)[0][j][k] = tmp_sample;
(*smpl_rw)[1][j][k] = (*smpl_rw)[4][j][k];
(*smpl_rw)[4][j][k] = (*smpl_rw)[3][j][k];
}
}
else {
for (j=0; j<36; j++) {
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;
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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -