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

📄 ntt_bitunpack.c

📁 语音压缩算法
💻 C
字号:
/*****************************************************************************//* This software module was originally developed by                          *//*   Naoki Iwakami (NTT)                                                     *//* and edited by                                                             *//*   Naoki Iwakami and Satoshi Miki (NTT) on 1996-05-01,                     *//*   Naoki Iwakami (NTT) on 1996-08-27,                                      *//*   Heiko Purnhagen (Uni Hannover) on 1996-11-15,                           *//*   Naoki Iwakami (NTT) on 1996-12-06,                                      *//*   Naoki Iwakami (NTT) on 1997-04-18,                                      *//*   Naoki Iwakami (NTT) on 1997-08-25,                                      *//*   Naoki Iwakami (NTT) on 1997-10-26,                                      *//*   Takehiro Moriya (NTT) on 1998-07-16,                                    *//* in the course of development of the                                       *//* MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 3.        *//* This software module is an implementation of a part of one or more        *//* MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 Audio *//* standard. ISO/IEC  gives users of the MPEG-2 NBC/MPEG-4 Audio standards   *//* free license to this software module or modifications thereof for use in  *//* hardware or software products claiming conformance to the MPEG-2 NBC/     *//* MPEG-4 Audio  standards. Those intending to use this software module in   *//* hardware or software products are advised that this use may infringe      *//* existing patents. The original developer of this software module and      *//* his/her company, the subsequent editors and their companies, and ISO/IEC  *//* have no liability for use of this software module or modifications        *//* thereof in an implementation. Copyright is not released for non           *//* MPEG-2 NBC/MPEG-4 Audio conforming products. The original developer       *//* retains full right to use the code for his/her  own purpose, assign or    *//* donate the code to a third party and to inhibit third party from using    *//* the code for non MPEG-2 NBC/MPEG-4 Audio conforming products.             *//* This copyright notice must be included in all copies or derivative works. *//* Copyright (c)1996.                                                        *//*****************************************************************************//* 15-nov-96   HP   adapted to new bitstream module *//* 06-dec-96   NI   provided 6 kbit/s support *//* 18-apr-97   NI   merged long, medium, & short sequences into one sequence *//* 25-aug-97   NI   bugfixes *//* 16-jul-98   TM   AAC-TwinVQ convergence */#include <stdio.h>#include "block.h"               /* handler, defines, enums */#include "buffersHandle.h"       /* handler, defines, enums */#include "concealmentHandle.h"   /* handler, defines, enums */#include "interface.h"           /* handler, defines, enums */#include "mod_bufHandle.h"       /* handler, defines, enums */#include "reorderspecHandle.h"   /* handler, defines, enums */#include "resilienceHandle.h"    /* handler, defines, enums */#include "tf_mainHandle.h"       /* handler, defines, enums */#include "nok_ltp_common.h"      /* structs */#include "tf_mainStruct.h"       /* structs */#include "tns.h"                 /* structs */#include "bitstream.h"#include "ntt_conf.h"#include "ntt_conf.h"#include "all.h"#include "aac.h"#include "nok_lt_prediction.h"#include "ntt_nok_pred.h"#include "ntt_nok_lt_predict_dec.h"#include "common_m4a.h"int ntt_BitUnPack ( BsBitStream*  stream,                    int           available_bits,                    WINDOW_SEQUENCE   windowSequence,                    ntt_INDEX*    index ){  /*--- Variables ---*/  int		bitcount, itmp, isf, i_ch, idiv, iptop;  /* frame */  int nsf = 0;  int n_ch;  /* shape */  int bits_side_info, vq_bits, ndiv, bits0, bits1, bits;  /* Bark-scale envelope */  int fw_n_bit   = 0;  int fw_ndiv    = 0;  int flag_pitch = 0;    int	bits1_p[ntt_N_DIV_P_MAX], length_p[ntt_N_DIV_P_MAX];  int	bits0_p[ntt_N_DIV_P_MAX];  index->w_type = windowSequence;  bitcount = 0;    vq_bits = available_bits;    /*--- Set parameters ---*/  n_ch = index->numChannel;  switch (index->w_type){  case ONLY_LONG_SEQUENCE:   case LONG_START_SEQUENCE: case LONG_STOP_SEQUENCE:    /* frame */    nsf = 1;  /*--- pitch_q flag ---*/    BsGetBitInt(stream, (unsigned int *)&(index->bandlimit), 1);    bitcount += 1;    BsGetBitInt(stream, (unsigned int *)&(index->pitch_q), 1);    bitcount += 1;    BsGetBitInt(stream, (unsigned int *)&(index->pf), 1);    bitcount += 1;    /* available bits */    bits_side_info =  ntt_NMTOOL_BITSperCH* index->numChannel+3;  /*ppc,band,postp*/    vq_bits  -= bits_side_info;    if(index->pitch_q == 1)     vq_bits -= ntt_PIT_TBITperCH*index->numChannel;    if(index->bandlimit == 1)   vq_bits -= ntt_BWID_BITS*index->numChannel;    index->nttDataBase->ntt_VQTOOL_BITS = vq_bits;    /* Bark-scale envelope */    fw_n_bit = ntt_FW_N_BIT;    fw_ndiv = ntt_FW_N_DIV;    /* flags */    flag_pitch = index->pitch_q;    break;  case EIGHT_SHORT_SEQUENCE:    /* frame */    nsf = ntt_N_SHRT;    /* shape */    BsGetBitInt(stream, (unsigned int *)&(index->bandlimit), 1);    bitcount += 1;    bits_side_info = ntt_NMTOOL_BITS_SperCH*index->numChannel+1;    vq_bits -=  bits_side_info;    if(index->bandlimit == 1)   vq_bits -= ntt_BWID_BITS*index->numChannel;    index->nttDataBase->ntt_VQTOOL_BITS_S = vq_bits;    fw_n_bit = 0;    fw_ndiv = 0;    /* flags */    flag_pitch = 0;    break;  default:    CommonExit ( 1, "window type not supported" );  }  /* set bits for pitch */  if(flag_pitch){#if 1 /*TM9902 */    ntt_vec_lenp( index->numChannel, bits1_p, length_p );    for ( idiv=0; idiv<ntt_N_DIV_PperCH*index->numChannel; idiv++ ){      bits0_p[idiv] = (bits1_p[idiv]+1)/2;      bits1_p[idiv] /= 2;    }#else    for ( idiv=0; idiv<ntt_N_DIV_PperCH*index->numChannel; idiv++ ){      bits0_p[idiv] = 7;      bits1_p[idiv] = 7;    }#endif  }    for (i_ch=0; i_ch<n_ch; i_ch++){    if(index->bandlimit == 1){      BsGetBitInt(stream, (unsigned int *)&(index->blim_h[i_ch]),		  ntt_BLIM_BITS_H);      bitcount += ntt_BLIM_BITS_H;      BsGetBitInt(stream, (unsigned int *)&(index->blim_l[i_ch]),		  ntt_BLIM_BITS_L);      bitcount += ntt_BLIM_BITS_L;    }  }    if (flag_pitch){      for ( idiv=0; idiv<ntt_N_DIV_PperCH*index->numChannel; idiv++ ){	BsGetBitInt(stream, (unsigned int *)&(index->pls[idiv]),		    bits0_p[idiv]);       /*CB0*/	BsGetBitInt(stream, 	   (unsigned int *)&(index->pls[idiv+ntt_N_DIV_PperCH*index->numChannel]),		    bits1_p[idiv]);       /*CB1*/	bitcount += bits0_p[idiv] + bits1_p[idiv];      }      for (i_ch=0; i_ch<n_ch; i_ch++){	BsGetBitInt(stream, (unsigned int *)&(index->pit[i_ch]), ntt_BASF_BIT);	BsGetBitInt(stream, (unsigned int *)&(index->pgain[i_ch]),		    ntt_PGAIN_BIT);	bitcount += ntt_BASF_BIT + ntt_PGAIN_BIT;      }  }    /*--- Shape vector code ---*/  ndiv = (int)((vq_bits+ntt_MAXBIT*2-1)/(ntt_MAXBIT*2));  for ( idiv=0; idiv<ndiv; idiv++ ){    /* set bits */    bits = (vq_bits+ndiv-1-idiv)/ndiv;    bits0 = (bits+1)/2;    bits1 = bits/2;    /* read stream */    BsGetBitInt(stream, (unsigned int *)&(index->wvq[idiv]), bits0);    BsGetBitInt(stream, (unsigned int *)&(index->wvq[idiv+ndiv]), bits1);    bitcount += bits0 + bits1;  }    /*--- Forward envelope code ---*/  if (fw_n_bit > 0){    for ( i_ch=0; i_ch<n_ch; i_ch++ ){      for ( isf=0; isf<nsf; isf++ ){	for ( idiv=0; idiv<fw_ndiv; idiv++ ){	  itmp = idiv+(isf+i_ch*nsf)*fw_ndiv;	  BsGetBitInt(stream, (unsigned int *)&(index->fw[itmp]), fw_n_bit);	  bitcount += fw_n_bit;	}      }    }    for ( i_ch=0; i_ch<n_ch; i_ch++ ){      for ( isf=0; isf<nsf; isf++ ){	BsGetBitInt(stream, (unsigned int *)&(index->fw_alf[i_ch*nsf+isf]),		    ntt_FW_ARQ_NBIT);	bitcount += ntt_FW_ARQ_NBIT;      }    }  }    /*--- Gain ---*/  if (nsf == 1){    for (i_ch=0; i_ch<n_ch; i_ch++){      BsGetBitInt(stream, (unsigned int *)&(index->pow[i_ch]), ntt_GAIN_BITS);      bitcount += ntt_GAIN_BITS;    }  }  else{    for (i_ch=0; i_ch<n_ch; i_ch++){      iptop = (nsf+1)*i_ch;      BsGetBitInt(stream, (unsigned int *)&(index->pow[iptop]), ntt_GAIN_BITS);      for ( isf=0; isf<nsf; isf++ ){	BsGetBitInt(stream, (unsigned int *)&(index->pow[iptop+isf+1]),		    ntt_SUB_GAIN_BITS);      }      bitcount += ntt_GAIN_BITS + ntt_SUB_GAIN_BITS * nsf;    }  }  /*--- LSP ---*/  for (i_ch=0; i_ch<n_ch; i_ch++){    /* pred. switch */    BsGetBitInt(stream, (unsigned int *)&(index->lsp[i_ch][0]), ntt_LSP_BIT0);    /* first stage */    BsGetBitInt(stream, (unsigned int *)&(index->lsp[i_ch][1]), ntt_LSP_BIT1);    /* second stage */    for (itmp=0; itmp<ntt_LSP_SPLIT; itmp++)      BsGetBitInt(stream, (unsigned int *)&(index->lsp[i_ch][itmp+2]),		  ntt_LSP_BIT2);    bitcount += ntt_LSP_BIT0 + ntt_LSP_BIT1 + ntt_LSP_SPLIT * ntt_LSP_BIT2;  }    /*--- Pitch excitation ---*/  return(bitcount);  }

⌨️ 快捷键说明

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