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

📄 ac3dec_coupling.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
字号:
/*//////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2002-2005 Intel Corporation. All Rights Reserved.//*/#include "umc_ac3_decoder.h"#include "ac3dec_tables.h"#include "ippac.h"#include "ipps.h"void UMC::AC3Decoder::MakeFloat_32f32f(Ipp32f *inmant,                                       Ipp16s *inexp,                                       Ipp32s size,                                       Ipp32f *outfloat){  Ipp32s  i;  Ipp32s  bias;  Ipp32f  tmp;  for (i = 0; i < size; i++) {    bias = 112 - (Ipp32s)inexp[i];    bias = bias << 23;    bias = bias & 0x7FFFFFFF;    *(Ipp32s*)(&tmp) = bias;    outfloat[i] = inmant[i]*tmp;  }}int UMC::AC3Decoder::DeCoupling(int nblk){  int i;  for (i = 0; i < bsi.nfchans; i++) {    MakeFloat_32f32f(&audblk[nblk]->fbw_mant[i][0],                         (Ipp16s *)&audblk[nblk]->fbw_exp[i][0],                         audblk[nblk]->endmant[i],                         &data_vectors.stream_coeffs.channel[i][0]);    ippsZero_32f(&(data_vectors.stream_coeffs.channel[i][audblk[nblk]->endmant[i]]),                 256 - audblk[nblk]->endmant[i]);  }  if (audblk[nblk]->cplinu) {    uncoupleChannel( (Ipp16u)nblk );  }  if (bsi.lfeon) {    MakeFloat_32f32f(&audblk[nblk]->lfe_mant[0],                         (Ipp16s *)&audblk[nblk]->lfe_exp[0], 7,                         &data_vectors.stream_coeffs.channel[5][0]);  } else {    ippsZero_32f(&(data_vectors.stream_coeffs.channel[i][0]), 7);  }  return 1;}void UMC::AC3Decoder::uncoupleChannel(Ipp16u nblk){  int    i, ch;  int    cplChannel = 0;  for (ch = 0; ch < bsi.nfchans; ch++) {    float  *stream_koeffs = data_vectors.stream_coeffs.channel[ch];    float  cpl_coord = 0;    int    bnd = 0;    int    ind;#ifndef REF_DECODER_COMPATIBLE    int testBsi = 0, bnd1 = 0;    if (bsi.acmod == 0x02 && ch == 1 && audblk[nblk]->phsflginu)      testBsi = 1;#endif    if (audblk[nblk]->chincpl[ch]) {      float  *stream_koeffs_cpl = data_vectors.stream_coeffs.cplChannel[cplChannel];      float  dpfac = phscorFac[decoder_settings.out_acmod][bsi.acmod][bsi.surmixlev][ch];      float  epfac = phscorFac[audblk[nblk]->phsoutmod][bsi.acmod][bsi.surmixlev][ch];      cplChannel++;      for (i = audblk[nblk]->cplstrtmant; i < audblk[nblk]->cplendmant; i += 12) {#ifndef REF_DECODER_COMPATIBLE        if (!audblk[nblk]->cplbndstrc[bnd]) {          phsflg = audblk[nblk]->phsflg[bnd1];          ind = 15 + (int)(audblk[nblk]->phscor[bnd1] * dpfac + 0.5) -                     (int)(audblk[nblk]->phscor[bnd1] * epfac + 0.5);          cpl_coord = audblk[nblk]->cplcoord[ch][bnd1] * phsCorTab[ind];          if      (cpl_coord >  1) cpl_coord =  1;          else if (cpl_coord < -1) cpl_coord = -1;          bnd1++;        }        if (testBsi && phsflg) {          ippsMulC_32f(stream_koeffs_cpl+i, -cpl_coord, stream_koeffs+i, 12);        } else {          ippsMulC_32f(stream_koeffs_cpl+i, cpl_coord, stream_koeffs+i, 12);        }#else        ind = 15 + (int)(audblk[nblk]->phscor[bnd] * dpfac + 0.5) -                   (int)(audblk[nblk]->phscor[bnd] * epfac + 0.5);        cpl_coord = audblk[nblk]->cplcoord[ch][bnd] * phsCorTab[ind];        if      (cpl_coord >  8) cpl_coord =  8;        else if (cpl_coord < -8) cpl_coord = -8;        ippsMulC_32f(stream_koeffs_cpl+i, cpl_coord, stream_koeffs+i, 12);#endif        bnd++;      }    }  }}

⌨️ 快捷键说明

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