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

📄 ac3dec_downmixing.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        ippsCopy_32f(samL, samR, 512);      }    } else {      if (decoder_settings.dualmonomode == DUAL_LEFTMONO) {        ippsCopy_32f(samL, samC, 512);        ippsZero_32f(samL, 512);        ippsZero_32f(samR, 512);      } else if (decoder_settings.dualmonomode == DUAL_RGHTMONO) {        ippsCopy_32f(samR, samC, 512);        ippsZero_32f(samL, 512);        ippsZero_32f(samR, 512);      } else if (decoder_settings.dualmonomode == DUAL_MIXMONO) {        ippsMulC_32f_I(m6dB, samL, 512);        // 0.501187233 = -6dB        ippsMulC_32f_I(m6dB, samR, 512);        // 0.501187233 = -6dB        ippsAdd_32f(samL, samR, samC, 512);        ippsZero_32f(samL, 512);        ippsZero_32f(samR, 512);      }    }  } else if (bsi.karaokeMode) {    int karaokeCapable = decoder_settings.karaokeCapable;    downmix = 1;    if (outfront == 1) {      if (karaokeCapable >= 0) {        float c0 = karaokeTable[karaokeCapable][0];        float c1 = karaokeTable[karaokeCapable][1];        float c2 = karaokeTable[karaokeCapable][2];        ippsMulC_32f_I(c0, samC, 512);        ippsAddProductC_32f(karaokeSL, c1, samC, 512);        ippsAddProductC_32f(samSR, c2, samC, 512);      } else {        ippsMulC_32f_I(cmixgain * m3dB * 2, samC, 512);        ippsAddProductC_32f(karaokeSL, m3dB * smixgain, samC, 512);        ippsAddProductC_32f(samSR, m3dB * smixgain, samC, 512);      }      ippsAdd_32f_I(samR, samL, 512);      ippsAddProductC_32f(samL, m3dB, samC, 512);    } else if (outfront == 2) {      if (karaokeCapable >= 0) {        float c0 = karaokeTable[karaokeCapable][3];        float c1 = karaokeTable[karaokeCapable][4];        float c2 = karaokeTable[karaokeCapable][5];        float c3 = karaokeTable[karaokeCapable][6];        float c4 = karaokeTable[karaokeCapable][7];        float c5 = karaokeTable[karaokeCapable][8];        ippsAddProductC_32f(samC, c0, samL, 512);        ippsAddProductC_32f(samC, c1, samR, 512);        ippsAddProductC_32f(karaokeSL, c2, samL, 512);        ippsAddProductC_32f(karaokeSL, c3, samR, 512);        ippsAddProductC_32f(samSR, c4, samL, 512);        ippsAddProductC_32f(samSR, c5, samR, 512);      } else {        ippsAddProductC_32f(samC, cmixgain, samL, 512);        ippsAddProductC_32f(samC, cmixgain, samR, 512);        if (inrear == 1) {          ippsAddProductC_32f(samS, smixgain * m3dB, samL, 512);          ippsAddProductC_32f(samS, smixgain * m3dB, samR, 512);        } else if (inrear == 2) {          ippsAddProductC_32f(samSL, smixgain, samL, 512);          ippsAddProductC_32f(samSR, smixgain, samR, 512);        }      }    } else if (outfront == 3) {      if (karaokeCapable >= 0) {        float c0 = karaokeTable[karaokeCapable][9];        float c1 = karaokeTable[karaokeCapable][10];        float c2 = karaokeTable[karaokeCapable][11];        float c3 = karaokeTable[karaokeCapable][12];        float c4 = karaokeTable[karaokeCapable][13];        float c5 = karaokeTable[karaokeCapable][14];        float c6 = karaokeTable[karaokeCapable][15];        float c7 = karaokeTable[karaokeCapable][16];        float c8 = karaokeTable[karaokeCapable][17];        if (c0 >= 0) {          ippsAddProductC_32f(samC, c3, samL, 512);        }        else         ippsAddProductC_32f(samC, c3, samR, 512);        if (c1 >= 0) ippsAddProductC_32f(karaokeSL, c4, samL, 512);        else         ippsAddProductC_32f(karaokeSL, c4, samR, 512);        if (c2 >= 0) ippsAddProductC_32f(samSR, c5, samL, 512);        else         ippsAddProductC_32f(samSR, c5, samR, 512);        ippsMulC_32f_I(c6, samC, 512);        ippsAddProductC_32f(karaokeSL, c7, samC, 512);        ippsAddProductC_32f(samSR, c8, samC, 512);      } else {        if (inrear == 1) {          ippsAddProductC_32f(samS, smixgain, samC, 512);        } else if (inrear == 2) {          ippsAddProductC_32f(samSL, smixgain, samL, 512);          ippsAddProductC_32f(samSR, smixgain, samR, 512);        }      }    }    ippsZero_32f(karaokeSL, 512);    ippsZero_32f(samSR, 512);  } else {    if (decoder_settings.out_acmod == ACMOD_0) { // Dolby Surround compatible      if (infront != 2) {        ippsMulC_32f_I(m3dB, samC, 512);        ippsAdd_32f_I(samC, samL, 512);        ippsAdd_32f_I(samC, samR, 512);        if (infront != 1) downmix = 1;      }      if (inrear == 1) {        ippsMulC_32f_I(m3dB, samS, 512);        ippsSub_32f_I(samS, samL, 512);        ippsAdd_32f_I(samS, samR, 512);        downmix = 1;      } else if (inrear == 2) {        ippsAdd_32f_I(samSR, samSL, 512);        ippsMulC_32f_I(m3dB, samSL, 512);        ippsSub_32f_I(samSL, samL, 512);        ippsAdd_32f_I(samSL, samR, 512);        downmix = 1;      }    } else if (decoder_settings.out_acmod == ACMOD_10) { /* center only */      if (infront == 3) {        ippsMulC_32f_I(2 * cmixgain * m3dB, samC, 512);        downmix = 1;      }      if (infront != 1) {        ippsAdd_32f_I(samL, samR, 512);        ippsMulC_32f_I(m3dB, samR, 512);        ippsAdd_32f_I(samR, samC, 512);        downmix = 1;      }      if (inrear == 1) {        ippsMulC_32f_I(smixgain * m3dB, samS, 512);        ippsAdd_32f_I(samS, samC, 512);        if (smixgain > 0) downmix = 1;      } else if (inrear == 2) {        ippsMulC_32f_I(smixgain * m3dB, samSL, 512);        ippsAdd_32f_I(samSL, samC, 512);        ippsMulC_32f_I(smixgain * m3dB, samSR, 512);        ippsAdd_32f_I(samSR, samC, 512);        if (smixgain > 0) downmix = 1;      }    } else {    /* more than center output requested */      if (outfront == 2) {        if (infront == 1) {          ippsMulC_32f_I(m3dB, samC, 512);          ippsCopy_32f(samC, samL, 512);          ippsCopy_32f(samC, samR, 512);        } else if (infront == 3) {          ippsMulC_32f_I(cmixgain, samC, 512);          ippsAdd_32f_I(samC, samL, 512);          ippsAdd_32f_I(samC, samR, 512);          downmix = 1;        }      }      if (inrear == 1) {        /* single surround channel coded */        if (outrear == 0) {     /* no surround loudspeakers */          ippsMulC_32f_I(smixgain * m3dB, samS, 512);          ippsAdd_32f_I(samS, samL, 512);          ippsAdd_32f_I(samS, samR, 512);          if (smixgain > 0) downmix = 1;        } else if (outrear == 2) {      /* two surround loudspeaker channels */          ippsMulC_32f_I(m3dB, samS, 512);          ippsCopy_32f(samS, samSL, 512);          ippsCopy_32f(samS, samSR, 512);        }      } else if (inrear == 2) { /* two surround channels encoded */        if (outrear == 0) {          ippsMulC_32f_I(smixgain, samSL, 512);          ippsAdd_32f_I(samSL, samL, 512);          ippsMulC_32f_I(smixgain, samSR, 512);          ippsAdd_32f_I(samSR, samR, 512);          if (smixgain > 0) downmix = 1;        } else if (outrear == 1) {          ippsAdd_32f_I(samSR, samSL, 512);          ippsMulC_32f_I(m3dB, samSL, 512);          ippsCopy_32f(samSL, samS, 512);          downmix = 1;        }      }    }  } /* write out_channel */  switch (decoder_settings.out_acmod) {  case ACMOD_0:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samR;    if (decoder_settings.outlfeon)      data_vectors.temp[2] = samLFE;    break;  case ACMOD_10:    data_vectors.temp[0] = samC;    if (decoder_settings.outlfeon)      data_vectors.temp[1] = samLFE;    break;// ---  case ACMOD_20:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samR;    if (decoder_settings.outlfeon)      data_vectors.temp[2] = samLFE;    break;// ---  case ACMOD_30:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samC;    data_vectors.temp[2] = samR;    if (decoder_settings.outlfeon)      data_vectors.temp[3] = samLFE;    break;  case ACMOD_21:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samR;    data_vectors.temp[2] = samS;    if (decoder_settings.outlfeon)      data_vectors.temp[3] = samLFE;    break;// ---  case ACMOD_31:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samC;    data_vectors.temp[2] = samR;    data_vectors.temp[3] = samS;    if (decoder_settings.outlfeon)      data_vectors.temp[4] = samLFE;    break;// ---  case ACMOD_22:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samR;    data_vectors.temp[2] = samSL;    data_vectors.temp[3] = samSR;    if (decoder_settings.outlfeon)      data_vectors.temp[4] = samLFE;    break;// ---  case ACMOD_32:    data_vectors.temp[0] = samL;    data_vectors.temp[1] = samC;    data_vectors.temp[2] = samR;    data_vectors.temp[3] = samSL;    data_vectors.temp[4] = samSR;    if (decoder_settings.outlfeon)      data_vectors.temp[5] = samLFE;    break;  default:    break;  }     // switch( out_acmod )  if (bsi.acmod != ACMOD_0) {    int i;    gain = drc(bsi.compre, bsi.compr, dynrng, downmix, bsi.dialnorm);    for (i = 0; i < nChannelOut; i++) {      ippsMulC_32f_I(gain, data_vectors.temp[i], 512);    }  }  return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -