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

📄 ilbc_encode.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
📖 第 1 页 / 共 2 页
字号:
       Nfor = iLBCenc_inst->nsub-start-1;       if ( Nfor > 0 ) {           /* setup memory */           memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));           memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,               STATE_LEN*sizeof(float));           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));           /* loop over sub-frames to encode */           for (subframe=0; subframe<Nfor; subframe++) {               /* encode sub-frame */               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,                   gain_index+subcount*CB_NSTAGES,                   &residual[(start+1+subframe)*SUBL],                   mem+CB_MEML-memLfTbl[subcount],                   memLfTbl[subcount], SUBL, CB_NSTAGES,                   &weightdenum[(start+1+subframe)*                               (LPC_FILTERORDER+1)],                   weightState, subcount+1);               /* construct decoded vector */               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],                   cb_index+subcount*CB_NSTAGES,                   gain_index+subcount*CB_NSTAGES,                   mem+CB_MEML-memLfTbl[subcount],                   memLfTbl[subcount], SUBL, CB_NSTAGES);               /* update memory */               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));               memcpy(mem+CB_MEML-SUBL,                   &decresidual[(start+1+subframe)*SUBL],                   SUBL*sizeof(float));               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));               subcount++;           }       }       /* backward prediction of sub-frames */       Nback = start-1;       if ( Nback > 0 ) {           /* create reverse order vectors */           for (n=0; n<Nback; n++) {               for (k=0; k<SUBL; k++) {                   reverseResidual[n*SUBL+k] =                       residual[(start-1)*SUBL-1-n*SUBL-k];                   reverseDecresidual[n*SUBL+k] =                       decresidual[(start-1)*SUBL-1-n*SUBL-k];               }           }           /* setup memory */           meml_gotten = SUBL*(iLBCenc_inst->nsub+1-start);           if ( meml_gotten > CB_MEML ) {               meml_gotten=CB_MEML;           }           for (k=0; k<meml_gotten; k++) {               mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];           }           memset(mem, 0, (CB_MEML-k)*sizeof(float));           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));           /* loop over sub-frames to encode */           for (subframe=0; subframe<Nback; subframe++) {               /* encode sub-frame */               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,                   gain_index+subcount*CB_NSTAGES,                   &reverseResidual[subframe*SUBL],                   mem+CB_MEML-memLfTbl[subcount],                   memLfTbl[subcount], SUBL, CB_NSTAGES,                   &weightdenum[(start-2-subframe)*                               (LPC_FILTERORDER+1)],                   weightState, subcount+1);               /* construct decoded vector */               iCBConstruct(&reverseDecresidual[subframe*SUBL],                   cb_index+subcount*CB_NSTAGES,                   gain_index+subcount*CB_NSTAGES,                   mem+CB_MEML-memLfTbl[subcount],                   memLfTbl[subcount], SUBL, CB_NSTAGES);               /* update memory */               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));               memcpy(mem+CB_MEML-SUBL,                   &reverseDecresidual[subframe*SUBL],                   SUBL*sizeof(float));               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));               subcount++;           }           /* get decoded residual from reversed vector */           for (i=0; i<SUBL*Nback; i++) {               decresidual[SUBL*Nback - i - 1] =                   reverseDecresidual[i];           }       }       /* end encoding part */       /* adjust index */       index_conv_enc(cb_index);       /* pack bytes */       pbytes=bytes;       pos=0;       /* loop over the 3 ULP classes */       for (ulp=0; ulp<3; ulp++) {           /* LSF */           for (k=0; k<LSF_NSPLIT*iLBCenc_inst->lpc_n; k++) {               packsplit(&lsf_i[k], &firstpart, &lsf_i[k],                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp],                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]);               dopack( &pbytes, firstpart,                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos);           }           /* Start block info */           packsplit(&start, &firstpart, &start,               iLBCenc_inst->ULP_inst->start_bits[ulp],               iLBCenc_inst->ULP_inst->start_bits[ulp]+               iLBCenc_inst->ULP_inst->start_bits[ulp+1]+               iLBCenc_inst->ULP_inst->start_bits[ulp+2]);           dopack( &pbytes, firstpart,               iLBCenc_inst->ULP_inst->start_bits[ulp], &pos);           packsplit(&state_first, &firstpart, &state_first,               iLBCenc_inst->ULP_inst->startfirst_bits[ulp],               iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]);           dopack( &pbytes, firstpart,               iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos);           packsplit(&idxForMax, &firstpart, &idxForMax,               iLBCenc_inst->ULP_inst->scale_bits[ulp],               iLBCenc_inst->ULP_inst->scale_bits[ulp]+               iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+               iLBCenc_inst->ULP_inst->scale_bits[ulp+2]);           dopack( &pbytes, firstpart,               iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos);           for (k=0; k<iLBCenc_inst->state_short_len; k++) {               packsplit(idxVec+k, &firstpart, idxVec+k,                   iLBCenc_inst->ULP_inst->state_bits[ulp],                   iLBCenc_inst->ULP_inst->state_bits[ulp]+                   iLBCenc_inst->ULP_inst->state_bits[ulp+1]+                   iLBCenc_inst->ULP_inst->state_bits[ulp+2]);               dopack( &pbytes, firstpart,                   iLBCenc_inst->ULP_inst->state_bits[ulp], &pos);           }           /* 23/22 (20ms/30ms) sample block */           for (k=0;k<CB_NSTAGES;k++) {               packsplit(extra_cb_index+k, &firstpart,                   extra_cb_index+k,                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]);               dopack( &pbytes, firstpart,                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],                   &pos);           }           for (k=0;k<CB_NSTAGES;k++) {               packsplit(extra_gain_index+k, &firstpart,                   extra_gain_index+k,                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]);               dopack( &pbytes, firstpart,                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],                   &pos);           }           /* The two/four (20ms/30ms) 40 sample sub-blocks */           for (i=0; i<iLBCenc_inst->nasub; i++) {               for (k=0; k<CB_NSTAGES; k++) {                   packsplit(cb_index+i*CB_NSTAGES+k, &firstpart,                       cb_index+i*CB_NSTAGES+k,                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]);                   dopack( &pbytes, firstpart,                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],                       &pos);               }           }           for (i=0; i<iLBCenc_inst->nasub; i++) {               for (k=0; k<CB_NSTAGES; k++) {                   packsplit(gain_index+i*CB_NSTAGES+k, &firstpart,                       gain_index+i*CB_NSTAGES+k,                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]);                   dopack( &pbytes, firstpart,                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],                       &pos);               }           }       }       /* set the last bit to zero (otherwise the decoder          will treat it as a lost frame) */       dopack( &pbytes, 0, 1, &pos);   }

⌨️ 快捷键说明

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