📄 tvqaudecode.c
字号:
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 + -