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

📄 mp3dec_layer2_fp.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 4 页
字号:
        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 + -