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

📄 ac3_dec_downmixing.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 3 页
字号:
          ippsZero_32f(samL, 256);
          ippsZero_32f(samR, 256);
        } else if (state->dualmonomode == DUAL_MIXMONO) {
          ippsAdd_32f(samL, samR, samC, 256);
          ippsMulC_32f_I(m6dB, samC, 256);        /* 0.501187233 = -6dB */
          ippsZero_32f(samL, 256);
          ippsZero_32f(samR, 256);
        }
      }
    } else if (state->bsi.karaokeMode) {
      Ipp32s karaokeCapable = state->karaokeCapable;
      downmix = 1;

      if (outfront == 1) {
        if (karaokeCapable >= 0) {
          Ipp32f c0 = karaokeTable[karaokeCapable][0];
          Ipp32f c1 = karaokeTable[karaokeCapable][1];
          Ipp32f c2 = karaokeTable[karaokeCapable][2];

          ippsMulC_32f_I(c0, samC, 256);
          ippsAddProductC_32f(karaokeSL, c1, samC, 256);
          ippsAddProductC_32f(samSR, c2, samC, 256);
        } else {
          ippsMulC_32f_I(cmixgain * m3dB * 2, samC, 256);
          ippsAddProductC_32f(karaokeSL, m3dB * smixgain, samC, 256);
          ippsAddProductC_32f(samSR, m3dB * smixgain, samC, 256);
        }
        ippsAdd_32f_I(samR, samL, 256);
        ippsAddProductC_32f(samL, m3dB, samC, 256);
      } else if (outfront == 2) {
        if (karaokeCapable >= 0) {
          Ipp32f c0 = karaokeTable[karaokeCapable][3];
          Ipp32f c1 = karaokeTable[karaokeCapable][4];
          Ipp32f c2 = karaokeTable[karaokeCapable][5];
          Ipp32f c3 = karaokeTable[karaokeCapable][6];
          Ipp32f c4 = karaokeTable[karaokeCapable][7];
          Ipp32f c5 = karaokeTable[karaokeCapable][8];

          ippsAddProductC_32f(samC, c0, samL, 256);
          ippsAddProductC_32f(samC, c1, samR, 256);

          ippsAddProductC_32f(karaokeSL, c2, samL, 256);
          ippsAddProductC_32f(karaokeSL, c3, samR, 256);

          ippsAddProductC_32f(samSR, c4, samL, 256);
          ippsAddProductC_32f(samSR, c5, samR, 256);

        } else {
          ippsAddProductC_32f(samC, cmixgain, samL, 256);
          ippsAddProductC_32f(samC, cmixgain, samR, 256);
          if (inrear == 1) {
            ippsAddProductC_32f(samS, smixgain * m3dB, samL, 256);
            ippsAddProductC_32f(samS, smixgain * m3dB, samR, 256);
          } else if (inrear == 2) {
            ippsAddProductC_32f(samSL, smixgain, samL, 256);
            ippsAddProductC_32f(samSR, smixgain, samR, 256);
          }
        }
      } else if (outfront == 3) {
        if (karaokeCapable >= 0) {
          Ipp32f c0 = karaokeTable[karaokeCapable][9];
          Ipp32f c1 = karaokeTable[karaokeCapable][10];
          Ipp32f c2 = karaokeTable[karaokeCapable][11];
          Ipp32f c3 = karaokeTable[karaokeCapable][12];
          Ipp32f c4 = karaokeTable[karaokeCapable][13];
          Ipp32f c5 = karaokeTable[karaokeCapable][14];
          Ipp32f c6 = karaokeTable[karaokeCapable][15];
          Ipp32f c7 = karaokeTable[karaokeCapable][16];
          Ipp32f c8 = karaokeTable[karaokeCapable][17];

          if (c0 >= 0) {
            ippsAddProductC_32f(samC, c3, samL, 256);
          }
          else         ippsAddProductC_32f(samC, c3, samR, 256);

          if (c1 >= 0) ippsAddProductC_32f(karaokeSL, c4, samL, 256);
          else         ippsAddProductC_32f(karaokeSL, c4, samR, 256);

          if (c2 >= 0) ippsAddProductC_32f(samSR, c5, samL, 256);
          else         ippsAddProductC_32f(samSR, c5, samR, 256);

          ippsMulC_32f_I(c6, samC, 256);
          ippsAddProductC_32f(karaokeSL, c7, samC, 256);
          ippsAddProductC_32f(samSR, c8, samC, 256);
        } else {
          if (inrear == 1) {
            ippsAddProductC_32f(samS, smixgain, samC, 256);
          } else if (inrear == 2) {
            ippsAddProductC_32f(samSL, smixgain, samL, 256);
            ippsAddProductC_32f(samSR, smixgain, samR, 256);
          }
        }
      }
      ippsZero_32f(karaokeSL, 256);
      ippsZero_32f(samSR, 256);
    } else {
      if (state->out_acmod == ACMOD_0) { /* Dolby Surround compatible */
        if (infront != 2) {
          ippsMulC_32f_I(m3dB, samC, 256);
          ippsAdd_32f_I(samC, samL, 256);
          ippsAdd_32f_I(samC, samR, 256);
          if (infront != 1) downmix = 1;
        }
        if (inrear == 1) {
          ippsMulC_32f_I(m3dB, samS, 256);
          ippsSub_32f_I(samS, samL, 256);
          ippsAdd_32f_I(samS, samR, 256);
          downmix = 1;
        } else if (inrear == 2) {
          ippsAdd_32f_I(samSR, samSL, 256);
          ippsMulC_32f_I(m3dB, samSL, 256);
          ippsSub_32f_I(samSL, samL, 256);
          ippsAdd_32f_I(samSL, samR, 256);
          downmix = 1;
        }
      } else if (state->out_acmod == ACMOD_10) { /* center only */
        if (infront == 3) {
          ippsMulC_32f_I(2 * cmixgain * m3dB, samC, 256);
          downmix = 1;
        }
        if (infront != 1) {
          ippsAdd_32f_I(samL, samR, 256);
          ippsAddProductC_32f(samR, m3dB, samC, 256);
          downmix = 1;
        }
        if (inrear == 1) {
          ippsAddProductC_32f(samS, smixgain * m3dB, samC, 256);
          if (smixgain > 0) downmix = 1;
        } else if (inrear == 2) {
          ippsAdd_32f(samSL, samSR, samSL, 256);
          ippsAddProductC_32f(samSL, smixgain * m3dB, samC, 256);
          if (smixgain > 0) downmix = 1;
        }
      } else {    /* more than center output requested */
        if (outfront == 2) {
          if (infront == 1) {
            ippsMulC_32f(samC, m3dB, samL, 256);
            ippsCopy_32f(samL, samR, 256);
          } else if (infront == 3) {
            ippsMulC_32f_I(cmixgain, samC, 256);
            ippsAdd_32f_I(samC, samL, 256);
            ippsAdd_32f_I(samC, samR, 256);
            downmix = 1;
          }
        }
        if (inrear == 1) {        /* single surround channel coded */
          if (outrear == 0) {     /* no surround loudspeakers */
            ippsMulC_32f_I(smixgain * m3dB, samS, 256);
            ippsAdd_32f_I(samS, samL, 256);
            ippsAdd_32f_I(samS, samR, 256);
            if (smixgain > 0) downmix = 1;
          } else if (outrear == 2) {      /* two surround loudspeaker channels */
            ippsMulC_32f(samS, m3dB, samSL, 256);
            ippsCopy_32f(samSL, samSR, 256);
          }
        } else if (inrear == 2) { /* two surround channels encoded */
          if (outrear == 0) {
            ippsAddProductC_32f(samSL, smixgain, samL, 256);
            ippsAddProductC_32f(samSR, smixgain, samR, 256);
            if (smixgain > 0) downmix = 1;
          } else if (outrear == 1) {
            ippsAdd_32f_I(samSR, samSL, 256);
            ippsMulC_32f(samSL, m3dB, samS, 256);
            downmix = 1;
          }
        }
      }
    }
  } else {
    if (state->bsi.acmod == ACMOD_10) {
      ippsZero_32f(samL, 128);
      ippsZero_32f(samL+256, 128);
      ippsZero_32f(samR, 128);
      ippsZero_32f(samR+256, 128);
    }

    if ((infront == 2) && (outfront != 2)) {
      ippsZero_32f(samC, 128);
      ippsZero_32f(samC+256, 128);
    }

    if (inrear == 0) {
      if (outrear == 2) {
        ippsZero_32f(samSL, 128);
        ippsZero_32f(samSL+256, 128);
        ippsZero_32f(samSR, 128);
        ippsZero_32f(samSR+256, 128);
      } else if (outrear == 1) {
        ippsZero_32f(samS, 128);
        ippsZero_32f(samS+256, 128);
      }
    } else if (inrear == 1) {
      if (outrear == 2) {
        ippsZero_32f(samSL, 128);
        ippsZero_32f(samSL+256, 128);
        ippsZero_32f(samSR, 128);
        ippsZero_32f(samSR+256, 128);
      }
    }

    if (state->bsi.acmod == ACMOD_0) {   /* 1+1 mode, dual independent mono channels present */
      gain = drc(state->bsi.compre, state->bsi.compr, dynrng, 0,
                state->bsi.dialnorm, state);
      ippsMulC_32f_I(gain, samL, 128);
      ippsMulC_32f_I(gain, samL+256, 128);
      gain = drc(state->bsi.compr2e, state->bsi.compr2, dynrng2, 0,
                state->bsi.dialnorm2, state);
      ippsMulC_32f_I(gain, samR, 128);
      ippsMulC_32f_I(gain, samR+256, 128);

      if (outfront == 1) {        /* 1 front loudspeaker (center) */
        if (state->dualmonomode == DUAL_LEFTMONO) {
          ippsCopy_32f(samL, samC, 128);
          ippsCopy_32f(samL+256, samC+256, 128);
        } else if (state->dualmonomode == DUAL_RGHTMONO) {
          ippsCopy_32f(samR, samC, 128);
          ippsCopy_32f(samR+256, samC+256, 128);
        } else {
          ippsAdd_32f(samL, samR, samC, 128);
          ippsAdd_32f(samL+256, samR+256, samC+256, 128);
          ippsMulC_32f_I(m6dB, samC, 128);        /* 0.501187233 = -6dB */
          ippsMulC_32f_I(m6dB, samC+256, 128);    /* 0.501187233 = -6dB */
        }
      } else if (outfront == 2) {
        if (state->dualmonomode == DUAL_LEFTMONO) {
          ippsMulC_32f_I(m3dB, samL, 128);        /* 0.707945 = -3dB */
          ippsMulC_32f_I(m3dB, samL+256, 128);    /* 0.707945 = -3dB */
          ippsCopy_32f(samL, samR, 128);
          ippsCopy_32f(samL+256, samR+256, 128);
        } else if (state->dualmonomode == DUAL_RGHTMONO) {
          ippsMulC_32f_I(m3dB, samR, 128);        /* 0.707945 = -3dB */
          ippsMulC_32f_I(m3dB, samR+256, 128);    /* 0.707945 = -3dB */
          ippsCopy_32f(samR, samL, 128);
          ippsCopy_32f(samR+256, samL+256, 128);
        } else if (state->dualmonomode == DUAL_MIXMONO) {
          ippsAdd_32f_I(samR, samL, 128);
          ippsAdd_32f_I(samR+256, samL+256, 128);
          ippsMulC_32f_I(m6dB, samL, 128);        /* 0.501187233 = -6dB */
          ippsMulC_32f_I(m6dB, samL+256, 128);    /* 0.501187233 = -6dB */
          ippsCopy_32f(samL, samR, 128);
          ippsCopy_32f(samL+256, samR+256, 128);
        }
      } else {
        if (state->dualmonomode == DUAL_LEFTMONO) {
          ippsCopy_32f(samL, samC, 128);
          ippsCopy_32f(samL+256, samC+256, 128);
          ippsZero_32f(samL, 128);
          ippsZero_32f(samL+256, 128);
          ippsZero_32f(samR, 128);
          ippsZero_32f(samR+256, 128);
        } else if (state->dualmonomode == DUAL_RGHTMONO) {
          ippsCopy_32f(samR, samC, 128);
          ippsCopy_32f(samR+256, samC+256, 128);
          ippsZero_32f(samL, 128);
          ippsZero_32f(samL+256, 128);
          ippsZero_32f(samR, 128);
          ippsZero_32f(samR+256, 128);
        } else if (state->dualmonomode == DUAL_MIXMONO) {
          ippsAdd_32f(samL, samR, samC, 128);
          ippsAdd_32f(samL+256, samR+256, samC+256, 128);
          ippsMulC_32f_I(m6dB, samC, 128);        /* 0.501187233 = -6dB */
          ippsMulC_32f_I(m6dB, samC+256, 128);    /* 0.501187233 = -6dB */
          ippsZero_32f(samL, 128);
          ippsZero_32f(samL+256, 128);
          ippsZero_32f(samR, 128);
          ippsZero_32f(samR+256, 128);
        }
      }
    } else if (state->bsi.karaokeMode) {
      Ipp32s karaokeCapable = state->karaokeCapable;
      downmix = 1;

      if (outfront == 1) {
        if (karaokeCapable >= 0) {
          Ipp32f c0 = karaokeTable[karaokeCapable][0];
          Ipp32f c1 = karaokeTable[karaokeCapable][1];
          Ipp32f c2 = karaokeTable[karaokeCapable][2];

          ippsMulC_32f_I(c0, samC, 128);
          ippsMulC_32f_I(c0, samC+256, 128);
          ippsAddProductC_32f(karaokeSL, c1, samC, 128);
          ippsAddProductC_32f(karaokeSL+256, c1, samC+256, 128);
          ippsAddProductC_32f(samSR, c2, samC, 128);
          ippsAddProductC_32f(samSR+256, c2, samC+256, 128);
        } else {
          ippsMulC_32f_I(cmixgain * m3dB * 2, samC, 128);
          ippsMulC_32f_I(cmixgain * m3dB * 2, samC+256, 128);
          ippsAddProductC_32f(karaokeSL, m3dB * smixgain, samC, 128);
          ippsAddProductC_32f(karaokeSL+256, m3dB * smixgain, samC+256, 128);
          ippsAddProductC_32f(samSR, m3dB * smixgain, samC, 128);
          ippsAddProductC_32f(samSR+256, m3dB * smixgain, samC+256, 128);
        }
        ippsAdd_32f_I(samR, samL, 128);
        ippsAdd_32f_I(samR+256, samL+256, 128);
        ippsAddProductC_32f(samL, m3dB, samC, 128);
        ippsAddProductC_32f(samL+256, m3dB, samC+256, 128);
      } else if (outfront == 2) {
        if (karaokeCapable >= 0) {
          Ipp32f c0 = karaokeTable[karaokeCapable][3];
          Ipp32f c1 = karaokeTable[karaokeCapable][4];
          Ipp32f c2 = karaokeTable[karaokeCapable][5];
          Ipp32f c3 = karaokeTable[karaokeCapable][6];

⌨️ 快捷键说明

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