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

📄 encoder.c

📁 Intel开发的IPP库的应用实例
💻 C
📖 第 1 页 / 共 3 页
字号:
         pCodec->pFrame->pFrameBuffer[idx+15]|= (0xfc & (pCodec->pIndexVQBuffer[5] << 2));
         pCodec->pFrame->pFrameBuffer[idx+16] = (0xff &  pCodec->pIndexVQBuffer[6]);

         pCodec->pFrame->pCRCBuffer[0] = (0x3f &  pCodec->pIndexVQBuffer[0]);
         pCodec->pFrame->pCRCBuffer[0]|= (0xc0 & (pCodec->pIndexVQBuffer[1] << 6));
         pCodec->pFrame->pCRCBuffer[1] = (0x0f & (pCodec->pIndexVQBuffer[1] >> 2));
         pCodec->pFrame->pCRCBuffer[1]|= (0xf0 & (pCodec->pIndexVQBuffer[2] << 4));
         pCodec->pFrame->pCRCBuffer[2] = (0x03 & (pCodec->pIndexVQBuffer[2] >> 4));
         pCodec->pFrame->pCRCBuffer[2]|= (0xfc & (pCodec->pIndexVQBuffer[3] << 2));
         pCodec->pFrame->pCRCBuffer[3] = (0x3f &  pCodec->pIndexVQBuffer[4]);
         pCodec->pFrame->pCRCBuffer[3]|= (0xc0 & (pCodec->pIndexVQBuffer[5] << 6));
         pCodec->pFrame->pCRCBuffer[4] = (0x0f & (pCodec->pIndexVQBuffer[5] >> 2));
         pCodec->pFrame->pCRCBuffer[4]|= (0xf0 & (pCodec->pIndexVQBuffer[6] << 4));
         pCodec->pFrame->pCRCBuffer[5] = (0x0f & (pCodec->pIndexVQBuffer[6] >> 4));
         pCodec->pFrame->pCRCBuffer[6] =0;
         pCodec->pFrame->pCRCBuffer[7] =0;
         pCodec->pFrame->pCRCBuffer[8] =0;
         pCodec->pFrame->pCRCBuffer[9] =0;
         pCodec->pFrame->pCRCBuffer[10] =0;
         pCodec->pFrame->pos +=6;
         crc = encodeCRC(pCodec->pFrame->pCRCBuffer);
         pCodec->pFrame->pFrameBuffer[idx+22] |= (0xf0 & (crc << 4));
      }

      if (pCodec->iCountFrame%4==3){
         pCodec->pFrame->pFrameBuffer[idx+17] = (0x3f &  pCodec->pIndexVQBuffer[0]);
         pCodec->pFrame->pFrameBuffer[idx+17]|= (0xc0 & (pCodec->pIndexVQBuffer[1] << 6));
         pCodec->pFrame->pFrameBuffer[idx+18] = (0x0f & (pCodec->pIndexVQBuffer[1] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+18]|= (0xf0 & (pCodec->pIndexVQBuffer[2] << 4));
         pCodec->pFrame->pFrameBuffer[idx+19] = (0x03 & (pCodec->pIndexVQBuffer[2] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+19]|= (0xfc & (pCodec->pIndexVQBuffer[3] << 2));
         pCodec->pFrame->pFrameBuffer[idx+20] = (0x3f &  pCodec->pIndexVQBuffer[4]);
         pCodec->pFrame->pFrameBuffer[idx+20]|= (0xc0 & (pCodec->pIndexVQBuffer[5] << 6));
         pCodec->pFrame->pFrameBuffer[idx+21] = (0x0f & (pCodec->pIndexVQBuffer[5] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+21]|= (0xf0 & (pCodec->pIndexVQBuffer[6] << 4));
         pCodec->pFrame->pFrameBuffer[idx+22] = (0x0f & (pCodec->pIndexVQBuffer[6] >> 4));

         pCodec->pFrame->pCRCBuffer[5]|= (0xf0 & (pCodec->pIndexVQBuffer[0] << 4));
         pCodec->pFrame->pCRCBuffer[6] = (0x03 & (pCodec->pIndexVQBuffer[0] >> 4));
         pCodec->pFrame->pCRCBuffer[6]|= (0xfc & (pCodec->pIndexVQBuffer[1] << 2));
         pCodec->pFrame->pCRCBuffer[7] = (0x3f &  pCodec->pIndexVQBuffer[2]);
         pCodec->pFrame->pCRCBuffer[7]|= (0xc0 & (pCodec->pIndexVQBuffer[3] << 6));
         pCodec->pFrame->pCRCBuffer[8] = (0x0f & (pCodec->pIndexVQBuffer[3] >> 2));
         pCodec->pFrame->pCRCBuffer[8]|= (0xf0 & (pCodec->pIndexVQBuffer[4] << 4));
         pCodec->pFrame->pCRCBuffer[9] = (0x03 & (pCodec->pIndexVQBuffer[4] >> 4));
         pCodec->pFrame->pCRCBuffer[9]|= (0xfc & (pCodec->pIndexVQBuffer[5] << 2));
         pCodec->pFrame->pCRCBuffer[10]= (0xff &  pCodec->pIndexVQBuffer[6]);

         crc = encodeCRC(pCodec->pFrame->pCRCBuffer);

         pCodec->pFrame->pFrameBuffer[idx+22] |= (0xf0 & (crc << 4));
         pCodec->pFrame->pos +=6;
      }

      pCodec->iCountFrame++;
      if (pCodec->iCountFrame==24){

         madeHeader(pCodec->pFrame,pCodec->mframeCounter);
         MultyFrameCounter++;
         ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
         pMFwork +=NUM_MULTY_BYTE;
         pCodec->mframeCounter++;
         pCodec->mframeCounter = pCodec->mframeCounter % 16;
         pCodec->iCountFrame=0;
         pCodec->pFrame->pos=6;
         ippsZero_8u(pCodec->pFrame->pFrameBuffer,144);
         pCodec->NumberFrame++;
      }
    }/*  end for  */
    if (StreamEnd){
       if ((pCodec->iCountFrame-1)%2==0)pCodec->iCountFrame+=2;
       if( (pCodec->iCountFrame -1) >= 20) nullMFrame = 1;
       MultyFrameCounter++;
       madeHeader(pCodec->pFrame,pCodec->mframeCounter);
       ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
       pCodec->mframeCounter++;
       pMFwork +=NUM_MULTY_BYTE;
       pCodec->NumberFrame++;
       if(nullMFrame == 1){
          MultyFrameCounter++;
          madeHeader(pCodec->pFrame,pCodec->mframeCounter);
          ippsZero_8u(pCodec->pFrame->pFrameBuffer+6,138);
          ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
       }
       ResetAuroraEncoder(pCodec);
       return MultyFrameCounter;
     }

     if (tailSample>0 && pCodec->EncoderInput==WAVEFORM){
               ippsRShiftC_16s(WaveBuffer,1,pCodec->pWwork+pCodec->curPosition,tailSample);
               ippsCompensateOffset_16s_I(pCodec->pWwork+pCodec->curPosition,
                  tailSample,&(pCodec->pSrc0),pCodec->Dst0,0.999f);
               pCodec->pSrc0 = WaveBuffer[tailSample-1]>>1;
               pCodec->Dst0 = pCodec->pWwork[pCodec->curPosition+tailSample-1];
               pCodec->curPosition += tailSample;
     }
     return MultyFrameCounter;
}

/*   FEATURE -> QUNTIZED   */
int ApplyAuroraEncoder_FQ(AuroraEncoder *pCodec,short *pSrc,int InputLength,
                       unsigned char * pDst, int StreamEnd){

   int iCount;

   int FrameCounter;
   unsigned char *pIndexVQ;

   if (InputLength<=0){
      FrameCounter=0;
      ResetAuroraEncoder(pCodec);
      return FrameCounter;
   }

   if (pCodec->EncoderOutput == QUANTIZED){
      pIndexVQ = (unsigned char*)pDst/*+FeatureSize*pCodec->NumberFrame*/;
   }
   else {
      printf("\n!!! ERROR: encoder was initialized with another output flag !!!");
      return 0;
   }

   FrameCounter = InputLength;

   if (pCodec->EncoderInput!=FEATURE){
      printf("\n!!! ERROR: encoder was initialized with another input flag !!!");
      return 0;
   }

   /*   calculate feature   */
   for (iCount=0;iCount<FrameCounter;iCount++){
      /*  Quantise  */
      ippsCopy_16s(pSrc+iCount*(NUM_CEP_COEFF+1),pCodec->pFeatBuffer,NUM_CEP_COEFF+1);

      pCodec->pFeatBuffer[pCodec->numCepCoeff] = (short)(pCodec->weight_logE * pCodec->pFeatBuffer[pCodec->numCepCoeff]);
      pCodec->pFeatBuffer[pCodec->numCepCoeff-1] = (short)(pCodec->weight_c0 * pCodec->pFeatBuffer[pCodec->numCepCoeff-1]);

      ippsSplitVQ_16s8u(pCodec->pFeatBuffer,pCodec->numCepCoeff+1,pCodec->pIndexVQBuffer,NUM_CODEBOOK,1,
         (const IppsCdbkState_16s **)pCodec->ppCdbkState,NUM_CODEBOOK);

      ippsCopy_8u(pCodec->pIndexVQBuffer,pIndexVQ,NUM_CODEBOOK);
      pIndexVQ += NUM_CODEBOOK;
      pCodec->NumberFrame++;
   }/*  end for  */
   if (StreamEnd){
      ResetAuroraEncoder(pCodec);
      return FrameCounter;
   }
   return FrameCounter;
}



/*   FEATURE  -> MULTIFRAME  */
int ApplyAuroraEncoder_FM(AuroraEncoder *pCodec,short *pSrc,int InputLength,
                       unsigned char * pDst, int StreamEnd){

   int iCount;
   int FrameCounter,MultyFrameCounter;
   int idx,crc;

   int nullMFrame=0;
   unsigned char *pMFwork;


   MultyFrameCounter=0;
   if (pCodec->EncoderOutput == MULTIFRAME){
      pMFwork =(unsigned char *) pDst/*+NUM_MULTY_BYTE*pCodec->NumberFrame*/;
   }
   else {
      printf("\n!!! ERROR: encoder was initialized with another output flag !!!");
      return 0;
   }

   if (InputLength<=0){
      FrameCounter=0;
      ResetAuroraEncoder(pCodec);
      return FrameCounter;
   }

   FrameCounter = InputLength;
   if (pCodec->EncoderInput!=FEATURE){
      printf("\n!!! ERROR: encoder was initialized with another input flag !!!");
      return 0;
   }

   /*   calculate feature   */
   for (iCount=0;iCount<FrameCounter;iCount++){
      /*  Quantise  */
      ippsCopy_16s(pSrc+iCount*(NUM_CEP_COEFF+1),pCodec->pFeatBuffer,NUM_CEP_COEFF+1);

      pCodec->pFeatBuffer[pCodec->numCepCoeff] = (short)(pCodec->weight_logE * pCodec->pFeatBuffer[pCodec->numCepCoeff]);
      pCodec->pFeatBuffer[pCodec->numCepCoeff-1] = (short)(pCodec->weight_c0 * pCodec->pFeatBuffer[pCodec->numCepCoeff-1]);

      ippsSplitVQ_16s8u(pCodec->pFeatBuffer,pCodec->numCepCoeff+1,pCodec->pIndexVQBuffer,NUM_CODEBOOK,1,
         (const IppsCdbkState_16s **)pCodec->ppCdbkState,NUM_CODEBOOK);
      idx = (pCodec->iCountFrame/4)*23+6;
      if(pCodec->iCountFrame%4==0){
         pCodec->pFrame->pFrameBuffer[idx]   = (0x3f & pCodec->pIndexVQBuffer[0]);
         pCodec->pFrame->pFrameBuffer[idx]  |= (0xc0 & (pCodec->pIndexVQBuffer[1] << 6));
         pCodec->pFrame->pFrameBuffer[idx+1] = (0x0f & (pCodec->pIndexVQBuffer[1] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+1]|= (0xf0 & (pCodec->pIndexVQBuffer[2] << 4));
         pCodec->pFrame->pFrameBuffer[idx+2] = (0x03 & (pCodec->pIndexVQBuffer[2] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+2]|= (0xfc & (pCodec->pIndexVQBuffer[3] << 2));
         pCodec->pFrame->pFrameBuffer[idx+3] = (0x3f &  pCodec->pIndexVQBuffer[4]);
         pCodec->pFrame->pFrameBuffer[idx+3]|= (0xc0 & (pCodec->pIndexVQBuffer[5] << 6));
         pCodec->pFrame->pFrameBuffer[idx+4] = (0x0f & (pCodec->pIndexVQBuffer[5] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+4]|= (0xf0 & (pCodec->pIndexVQBuffer[6] << 4));
         pCodec->pFrame->pFrameBuffer[idx+5] = (0x0f & (pCodec->pIndexVQBuffer[6] >> 4));
         pCodec->pFrame->pos += 5;
         crc = encodeCRC(&pCodec->pFrame->pFrameBuffer[idx]);
         pCodec->pFrame->pFrameBuffer[idx+11] = (0x0f & crc);
      }

      if(pCodec->iCountFrame%4==1){
         pCodec->pFrame->pFrameBuffer[idx+5]|= (0xf0 & (pCodec->pIndexVQBuffer[0] << 4));
         pCodec->pFrame->pFrameBuffer[idx+6] = (0x03 & (pCodec->pIndexVQBuffer[0] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+6]|= (0xfc & (pCodec->pIndexVQBuffer[1] << 2));
         pCodec->pFrame->pFrameBuffer[idx+7] = (0x3f &  pCodec->pIndexVQBuffer[2]);
         pCodec->pFrame->pFrameBuffer[idx+7]|= (0xc0 & (pCodec->pIndexVQBuffer[3] << 6));
         pCodec->pFrame->pFrameBuffer[idx+8] = (0x0f & (pCodec->pIndexVQBuffer[3] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+8]|= (0xf0 & (pCodec->pIndexVQBuffer[4] << 4));
         pCodec->pFrame->pFrameBuffer[idx+9] = (0x03 & (pCodec->pIndexVQBuffer[4] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+9]|= (0xfc & (pCodec->pIndexVQBuffer[5] << 2));
         pCodec->pFrame->pFrameBuffer[idx+10]= (0xff &  pCodec->pIndexVQBuffer[6]);
         pCodec->pFrame->pos +=6;
         crc = encodeCRC(&pCodec->pFrame->pFrameBuffer[idx]);
         pCodec->pFrame->pFrameBuffer[idx+11] = (0x0f & crc);
      }

      if (pCodec->iCountFrame%4==2){
         pCodec->pFrame->pFrameBuffer[idx+11]|= (0xf0 & (pCodec->pIndexVQBuffer[0] << 4));
         pCodec->pFrame->pFrameBuffer[idx+12] = (0x03 & (pCodec->pIndexVQBuffer[0] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+12]|= (0xfc & (pCodec->pIndexVQBuffer[1] << 2));
         pCodec->pFrame->pFrameBuffer[idx+13] = (0x3f &  pCodec->pIndexVQBuffer[2]);
         pCodec->pFrame->pFrameBuffer[idx+13]|= (0xc0 & (pCodec->pIndexVQBuffer[3] << 6));
         pCodec->pFrame->pFrameBuffer[idx+14] = (0x0f & (pCodec->pIndexVQBuffer[3] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+14]|= (0xf0 & (pCodec->pIndexVQBuffer[4] << 4));
         pCodec->pFrame->pFrameBuffer[idx+15] = (0x03 & (pCodec->pIndexVQBuffer[4] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+15]|= (0xfc & (pCodec->pIndexVQBuffer[5] << 2));
         pCodec->pFrame->pFrameBuffer[idx+16] = (0xff &  pCodec->pIndexVQBuffer[6]);

         pCodec->pFrame->pCRCBuffer[0] = (0x3f &  pCodec->pIndexVQBuffer[0]);
         pCodec->pFrame->pCRCBuffer[0]|= (0xc0 & (pCodec->pIndexVQBuffer[1] << 6));
         pCodec->pFrame->pCRCBuffer[1] = (0x0f & (pCodec->pIndexVQBuffer[1] >> 2));
         pCodec->pFrame->pCRCBuffer[1]|= (0xf0 & (pCodec->pIndexVQBuffer[2] << 4));
         pCodec->pFrame->pCRCBuffer[2] = (0x03 & (pCodec->pIndexVQBuffer[2] >> 4));
         pCodec->pFrame->pCRCBuffer[2]|= (0xfc & (pCodec->pIndexVQBuffer[3] << 2));
         pCodec->pFrame->pCRCBuffer[3] = (0x3f &  pCodec->pIndexVQBuffer[4]);
         pCodec->pFrame->pCRCBuffer[3]|= (0xc0 & (pCodec->pIndexVQBuffer[5] << 6));
         pCodec->pFrame->pCRCBuffer[4] = (0x0f & (pCodec->pIndexVQBuffer[5] >> 2));
         pCodec->pFrame->pCRCBuffer[4]|= (0xf0 & (pCodec->pIndexVQBuffer[6] << 4));
         pCodec->pFrame->pCRCBuffer[5] = (0x0f & (pCodec->pIndexVQBuffer[6] >> 4));
         pCodec->pFrame->pCRCBuffer[6] =0;
         pCodec->pFrame->pCRCBuffer[7] =0;
         pCodec->pFrame->pCRCBuffer[8] =0;
         pCodec->pFrame->pCRCBuffer[9] =0;
         pCodec->pFrame->pCRCBuffer[10] =0;
         pCodec->pFrame->pos +=6;
         crc = encodeCRC(pCodec->pFrame->pCRCBuffer);
         pCodec->pFrame->pFrameBuffer[idx+22] |= (0xf0 & (crc << 4));
      }

      if (pCodec->iCountFrame%4==3){
         pCodec->pFrame->pFrameBuffer[idx+17] = (0x3f &  pCodec->pIndexVQBuffer[0]);
         pCodec->pFrame->pFrameBuffer[idx+17]|= (0xc0 & (pCodec->pIndexVQBuffer[1] << 6));
         pCodec->pFrame->pFrameBuffer[idx+18] = (0x0f & (pCodec->pIndexVQBuffer[1] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+18]|= (0xf0 & (pCodec->pIndexVQBuffer[2] << 4));
         pCodec->pFrame->pFrameBuffer[idx+19] = (0x03 & (pCodec->pIndexVQBuffer[2] >> 4));
         pCodec->pFrame->pFrameBuffer[idx+19]|= (0xfc & (pCodec->pIndexVQBuffer[3] << 2));
         pCodec->pFrame->pFrameBuffer[idx+20] = (0x3f &  pCodec->pIndexVQBuffer[4]);
         pCodec->pFrame->pFrameBuffer[idx+20]|= (0xc0 & (pCodec->pIndexVQBuffer[5] << 6));
         pCodec->pFrame->pFrameBuffer[idx+21] = (0x0f & (pCodec->pIndexVQBuffer[5] >> 2));
         pCodec->pFrame->pFrameBuffer[idx+21]|= (0xf0 & (pCodec->pIndexVQBuffer[6] << 4));
         pCodec->pFrame->pFrameBuffer[idx+22] = (0x0f & (pCodec->pIndexVQBuffer[6] >> 4));

         pCodec->pFrame->pCRCBuffer[5]|= (0xf0 & (pCodec->pIndexVQBuffer[0] << 4));
         pCodec->pFrame->pCRCBuffer[6] = (0x03 & (pCodec->pIndexVQBuffer[0] >> 4));
         pCodec->pFrame->pCRCBuffer[6]|= (0xfc & (pCodec->pIndexVQBuffer[1] << 2));
         pCodec->pFrame->pCRCBuffer[7] = (0x3f &  pCodec->pIndexVQBuffer[2]);
         pCodec->pFrame->pCRCBuffer[7]|= (0xc0 & (pCodec->pIndexVQBuffer[3] << 6));
         pCodec->pFrame->pCRCBuffer[8] = (0x0f & (pCodec->pIndexVQBuffer[3] >> 2));
         pCodec->pFrame->pCRCBuffer[8]|= (0xf0 & (pCodec->pIndexVQBuffer[4] << 4));
         pCodec->pFrame->pCRCBuffer[9] = (0x03 & (pCodec->pIndexVQBuffer[4] >> 4));
         pCodec->pFrame->pCRCBuffer[9]|= (0xfc & (pCodec->pIndexVQBuffer[5] << 2));
         pCodec->pFrame->pCRCBuffer[10]= (0xff &  pCodec->pIndexVQBuffer[6]);

         crc = encodeCRC(pCodec->pFrame->pCRCBuffer);

         pCodec->pFrame->pFrameBuffer[idx+22] |= (0xf0 & (crc << 4));
         pCodec->pFrame->pos +=6;
      }

      pCodec->iCountFrame++;
      if (pCodec->iCountFrame==24){
         madeHeader(pCodec->pFrame,pCodec->mframeCounter);
         MultyFrameCounter++;
         ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
         pMFwork +=NUM_MULTY_BYTE;
         pCodec->mframeCounter++;
         pCodec->mframeCounter = pCodec->mframeCounter % 16;
         pCodec->iCountFrame=0;
         pCodec->pFrame->pos=6;
         ippsZero_8u(pCodec->pFrame->pFrameBuffer,144);
         pCodec->NumberFrame++;
      }
     }/*  end for  */
     if (StreamEnd){
        if ((pCodec->iCountFrame-1)%2==0)pCodec->iCountFrame+=2;
        if( (pCodec->iCountFrame -1) >= 20) nullMFrame = 1;
        MultyFrameCounter++;
        madeHeader(pCodec->pFrame,pCodec->mframeCounter);
        ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
        pCodec->mframeCounter++;
        pMFwork +=NUM_MULTY_BYTE;
        pCodec->NumberFrame++;
        if(nullMFrame == 1){
           MultyFrameCounter++;
           madeHeader(pCodec->pFrame,pCodec->mframeCounter);
           ippsZero_8u(pCodec->pFrame->pFrameBuffer+6,138);
           ippsCopy_8u(pCodec->pFrame->pFrameBuffer,pMFwork,144);
        }
        ResetAuroraEncoder(pCodec);
        return MultyFrameCounter;
     }

     return MultyFrameCounter;
}


⌨️ 快捷键说明

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