⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3dec_layer2_fp.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 4 页
字号:
}

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 + -