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

📄 tvqaudecode.c

📁 C写的MPEG4音频源代码(G.723/G.729)
💻 C
📖 第 1 页 / 共 2 页
字号:
    mat_layerStream = BsOpenBufferRead((fd->layer[iscl+1].bitBuf));    index_scl->ms_mask = 0;    decoded_bits=0;    ntt_headerdec(iscl, mat_layerStream,                    index_scl, tfData->sfbInfo,                   &decoded_bits, tns_info,                  tfData->nok_lt_status,                   tfData->pred_type,                  hFault->hResilience,                  hFault->hVm,                   hFault->hEpInfo );    ntt_available_bits =        index_scl->nttDataScl->ntt_NBITS_FR_SCL[iscl]-decoded_bits;    if ( index->mainDebugLevel>2 ) {      printf("TTTTTTT available %5d %5d[%d]\n",             ntt_available_bits,             index_scl->nttDataScl->ntt_VQTOOL_BITS_SCL[iscl],iscl);    }    /* bit unpacking */    tomo_tmp=decoded_bits;    tomo_tmp2=BsCurrentBit(mat_layerStream);    decoded_bits += ntt_SclBitUnPack ( mat_layerStream,                                       index_scl,                                       BsBufferNumBit(fd->layer[iscl+1].bitBuf)                                       - tomo_tmp,                                       iscl);    tfData->decoded_bits += decoded_bits;    if ( index->mainDebugLevel>2 ) {      printf("<<<< ntt_SclBitUnPack[%d] %d %d >>>>\n", iscl,decoded_bits-tomo_tmp,decoded_bits);      printf("<<<< mat_Stream[%d] %ld >>>>\n",             iscl,BsCurrentBit(mat_layerStream)-tomo_tmp2);    }    /* decoding tools */    if (iscl < tfData->output_select){      /*NN        mat_scale_set_shift_para2(iscl);      */      ntt_scale_vq_decoder(index_scl,                            index,                           tfData->spectral_line_vector[0], iscl,                            tfData->sfbInfo);      if ( index->mainDebugLevel>2 ) {        printf("<<<< Scale Layer[%d] Decoding Finished!! ! >>>>\n",iscl);      }    }        fd->layer[iscl+1].NoAUInBuffer--; /* one AU is decoded and removed from bitbuffer*/    (*nextLayer)++;    BsCloseRemove(mat_layerStream,1);  }}static void tvqHeaderDec (                          int          numChannels,                          FRAME_DATA*  fd, /* config data , obj descr. etc. */                          TF_DATA*     tfData,                          ntt_INDEX*   index,                          BsBitStream* mat_layerStream ){  int decoded_bits, codedBlockType;  unsigned long  ultmp;  decoded_bits = 0;  BsGetBit( mat_layerStream, &ultmp,2); /* window_sequence */  codedBlockType = (int)ultmp;  decoded_bits += 2;  switch (   codedBlockType )    {    case 0:      tfData->windowSequence[MONO_CHAN] =  ONLY_LONG_SEQUENCE;      break;    case 1:      tfData->windowSequence[MONO_CHAN] =  LONG_START_SEQUENCE;      break;    case 2:      tfData->windowSequence[MONO_CHAN] =  EIGHT_SHORT_SEQUENCE;      break;    case 3:      tfData->windowSequence[MONO_CHAN] =  LONG_STOP_SEQUENCE;      break;    default:      CommonExit(-1,"wrong blocktype %d",   codedBlockType);    }  BsGetBit( mat_layerStream, &ultmp,1);  tfData->windowShape[0] = (WINDOW_SHAPE)ultmp; /* window shape */  decoded_bits += 1;  tfData->decoded_bits = decoded_bits;   if (numChannels==2){    tfData->windowSequence[1]=tfData->windowSequence[MONO_CHAN];    tfData->windowShape[1] =   tfData->windowShape[MONO_CHAN];  }  index->w_type=tfData->windowSequence[MONO_CHAN];}void tvqAUDecode(                  int          numChannels,                 FRAME_DATA*  fd, /* config data , obj descr. etc. */                 TF_DATA*     tfData,                 HANDLE_FAULT_TOLERANT hFault,                 QC_MOD_SELECT      qc_select,                 ntt_INDEX*   index,                 ntt_INDEX*   index_scl,                 BsBitStream* layer_stream                 )     /*  case NTT_VQ_SYS: */{  int mat_usedNumBit;  unsigned int x;  unsigned long totalLength;  unsigned int AUindex;  BsBitStream* mat_layerStream;  /*BsBitStream* layer_stream ;*/  int ntt_output_select,dummy;  TNS_frame_info tns_info[MAX_TIME_CHANNELS];  /*    getModeFromOD(fd->od,&lowRateChannelPresent ,layNumChan ,&lastAacLay ,&firstSt    Lay,&coreCodecIdx,    commonWindow);    mat_layerStream = BsOpenBufferRead( fd->layer[0].bitBuf);  */  mat_usedNumBit =0;  index->mainDebugLevel=tvq_debug_level ;  if(tvq_debug_level > 5)    fprintf(stderr, "TTTTTT %5ld %5ld \n", BsCurrentBit(layer_stream),            fd->od->streamCount.value);   for(x=0;x<fd->od->streamCount.value;x++)    {      if(tvq_debug_level > 5)        fprintf(stderr, "TTTTTT %5ld %5d xxx\n", BsCurrentBit(layer_stream), x);       totalLength=0;      getAccessUnit(layer_stream, fd->layer[x].bitBuf , &AUindex, &totalLength, fd->od->ESDescriptor[x]);      mat_usedNumBit += totalLength * 8 ; /* T.Ishikawa 9807 01 */      mat_usedNumBit += ((int)((totalLength-(totalLength%255))/255)+1)*24;      if ( index->mainDebugLevel>2 ) {        printf(" ##### [%d] totalLength %ld mat_usedNum Bit %d #####\n",x,totalLength, mat_usedNumBit);      }      if(x != AUindex) CommonExit(-1,"\n Error in FlexMux De code NTT_VQ_SYS\n");    }  /*BsCloseRemove(layer_stream,1);*/  /*  if ( index->mainDebugLevel>2 ) {      printf(" ##### totalLength %d #####\n",totalLength);      } */  ntt_output_select = tfData->output_select;  tvqHeaderDec( numChannels,                fd, /* config data , obj descr. etc. */                tfData,                index, mat_layerStream);       tvqCoreDec( numChannels,              fd, /* config data , obj descr. etc. */              tfData,              hFault, index, mat_layerStream, tns_info,	qc_select,&dummy);  tvqScalDec( fd, /* config data , obj descr. etc. */              tfData,              hFault, index, index_scl, tns_info,&dummy);    {    int ch;    for (ch=0;ch<numChannels;ch++){      int i, k, j, max_sfb[8];      Info *info = tfData->sfbInfo[tfData->windowSequence[MONO_CHAN]];      if(ntt_output_select==0) max_sfb[0] = index->max_sfb[0];      else max_sfb[ntt_output_select] = index_scl->max_sfb[ntt_output_select];      for (i=j=0; i<tns_info[ch].n_subblocks; i++) {        float tmp_spec[1024];        for( k=0; k<info->bins_per_sbk[i]; k++ ) {          tmp_spec[k] = tfData->spectral_line_vector[0][ch][j+k];        }        tns_decode_subblock( tmp_spec,                             max_sfb[ntt_output_select],                             info->sbk_sfb_top[i],                             info->islong,                             &(tns_info[ch].info[i]) ,                             qc_select);        for( k=0; k<info->bins_per_sbk[i]; k++ ) {          tfData->spectral_line_vector[0][ch][j+k] = tmp_spec[k];        }        j += info->bins_per_sbk[i];      }    }  }  tfData->decoded_bits = mat_usedNumBit;}void tvqAUDecode2(                   FRAME_DATA*  fd, /* config data , obj descr. etc. */                  TF_DATA*     tfData,                  HANDLE_FAULT_TOLERANT hFault,                  QC_MOD_SELECT      qc_select,                  ntt_INDEX*   index,                  ntt_INDEX*   index_scl,                  int *nextLayer)     /*  case NTT_VQ_SYS: */{  int mat_usedNumBit;  BsBitStream* mat_layerStream;  /*BsBitStream* layer_stream ;*/  int ntt_output_select;  TNS_frame_info tns_info[MAX_TIME_CHANNELS];  mat_usedNumBit =0;  index->mainDebugLevel=tvq_debug_level ;  mat_layerStream = BsOpenBufferRead( fd->layer[0].bitBuf);  ntt_output_select = tfData->output_select;  tvqHeaderDec( index->numChannel,                fd, /* config data , obj descr. etc. */                tfData,                index, mat_layerStream);       tvqCoreDec( index->numChannel,              fd, /* config data , obj descr. etc. */              tfData,              hFault, index, mat_layerStream, tns_info,	qc_select,nextLayer);  BsCloseRemove(mat_layerStream,1);         tvqScalDec( fd,/* config data , obj descr. etc. */              tfData,              hFault, index, index_scl, tns_info,nextLayer);    if(ntt_output_select <= index->nttDataScl->ntt_NSclLay)  {    int ch;    for (ch=0;ch<index->numChannel;ch++){      int i, k, j, max_sfb[8];      Info *info = tfData->sfbInfo[tfData->windowSequence[MONO_CHAN]];      if(ntt_output_select==0) max_sfb[0] = index->max_sfb[0];      else max_sfb[ntt_output_select] = index_scl->max_sfb[ntt_output_select];      for (i=j=0; i<tns_info[ch].n_subblocks; i++) {        float tmp_spec[1024];        for( k=0; k<info->bins_per_sbk[i]; k++ ) {          tmp_spec[k] = tfData->spectral_line_vector[0][ch][j+k];        }        tns_decode_subblock( tmp_spec,                             max_sfb[ntt_output_select],                             info->sbk_sfb_top[i],                             info->islong,                             &(tns_info[ch].info[i]) ,                             qc_select);        for( k=0; k<info->bins_per_sbk[i]; k++ ) {          tfData->spectral_line_vector[0][ch][j+k] = tmp_spec[k];        }        j += info->bins_per_sbk[i];      }    }  }  tfData->decoded_bits = mat_usedNumBit;}

⌨️ 快捷键说明

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