celp_decoder.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:48k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*====================================================================*/
  2. /*         MPEG-4 Audio (ISO/IEC 14496-3) Copyright Header            */
  3. /*====================================================================*/
  4. /*
  5. This software module was originally developed by Rakesh Taori and Andy
  6. Gerrits (Philips Research Laboratories, Eindhoven, The Netherlands) in
  7. the course of development of the MPEG-4 Audio (ISO/IEC 14496-3). This
  8. software module is an implementation of a part of one or more MPEG-4
  9. Audio (ISO/IEC 14496-3) tools as specified by the MPEG-4 Audio
  10. (ISO/IEC 14496-3). ISO/IEC gives users of the MPEG-4 Audio (ISO/IEC
  11. 14496-3) FREE license to this software module or modifications thereof
  12. for use in hardware or software products claiming conformance to the
  13. MPEG-4 Audio (ISO/IEC 14496-3). Those intending to use this software
  14. module in hardware or software products are advised that its use may
  15. infringe existing patents. The original developer of this software
  16. module and his/her company, the subsequent editors and their
  17. companies, and ISO/IEC have no liability for use of this software
  18. module or modifications thereof in an implementation. Copyright is not
  19. released for non MPEG-4 Audio (ISO/IEC 14496-3) conforming products.
  20. CN1 retains full right to use the code for his/her own purpose, assign
  21. or donate the code to a third party and to inhibit third parties from
  22. using the code for non MPEG-4 Audio (ISO/IEC 14496-3) conforming
  23. products.  This copyright notice must be included in all copies or
  24. derivative works. Copyright 1996.
  25. */
  26. /*====================================================================*/
  27. /*======================================================================*/
  28. /*                                                                      */
  29. /*      SOURCE_FILE:    CELP_DECODER.C                                  */
  30. /*                                                                      */
  31. /*======================================================================*/
  32.     
  33. /*======================================================================*/
  34. /*      I N C L U D E S                                                 */
  35. /*======================================================================*/
  36. #include <stdio.h>
  37. #include <stdlib.h>
  38. #include <assert.h>
  39. #include "buffersHandle.h"       /* handler, defines, enums */
  40. #include "bitstream.h"     /* bit stream module                         */
  41. #include "phi_cons.h"           /* Philips Defined Constants            */
  42. #include "phi_priv.h" /* for PHI private data storage */
  43. #include "bitstream.h"
  44. #include "lpc_common.h"         /* Common LPC core Defined Constants    */
  45. #include "phi_gxit.h"           /* Excitation Generation Prototypes     */
  46. #include "phi_lpc.h"            /* Prototypes of LPC Subroutines        */
  47. #include "phi_post.h"           /* Post Processing Module Prototype     */
  48. #include "phi_fbit.h"           /* Frame bit allocation table           */
  49. #include "nec_abs_proto.h"      /* Prototypes for NEC Routines          */
  50. #include "pan_celp_const.h"     /* Constants for PAN Routines           */
  51. #include "celp_proto_dec.h"     /* Prototypes for CELP Routines         */
  52. #include "celp_decoder.h"       /* Prototypes for CELP Decoder Routines */
  53. #include "celp_bitstream_demux.h"/* Prototypes for CELP Decoder Routines*/
  54. #include "nec_abs_const.h"      /* Constants for NEC Routines           */
  55. int CELPdecDebugLevel = 0; /* HP 971120 */
  56. /* ---------------------------------------------------------------------*/ 
  57. /* Frame counter                                                        */
  58. /* ---------------------------------------------------------------------*/
  59. static unsigned long frame_ctr = 0;   /* Frame Counter                   */
  60. static long postfilter = 0;           /* Postfilter switch               */
  61. static float *prev_Qlsp_coefficients; /* previous quantized LSP coeff.   */
  62. static long num_enhstages;
  63. static long dec_enhstages;
  64. static long dec_bwsmode;
  65. static long num_indices;
  66. /*======================================================================*/
  67. /*    NarrowBand Data declaration                                       */
  68. /*======================================================================*/
  69. static float *buf_Qlsp_coefficients_bws; /* current quantized LSP coeff. */
  70. static float *prev_Qlsp_coefficients_bws;/* previous quantized LSP coeff. */
  71. static long frame_size_nb, frame_size_bws;
  72. static long n_subframes_bws;
  73. static long sbfrm_size_bws;
  74. static long lpc_order_bws;
  75. static long num_lpc_indices_bws;
  76. static long mp_pos_bits, mp_sgn_bits;
  77. static long enh_pos_bits, enh_sgn_bits;
  78. static long bws_pos_bits, bws_sgn_bits;
  79. /*======================================================================*/
  80. /* Type definitions                                                     */
  81. /*======================================================================*/
  82. typedef struct
  83. {
  84.   PHI_PRIV_TYPE *PHI_Priv;
  85.   /* add private data pointers here for other coding varieties */
  86. } INST_CONTEXT_LPC_DEC_TYPE;
  87. /*======================================================================*/
  88. /* Function definition: abs_coder                                       */
  89. /*======================================================================*/
  90. void celp_decoder
  91. (
  92. BsBitStream *bitStream,           /* In: Bitstream                     */
  93. float     **OutputSignal,          /* Out: Multichannel Output          */
  94. long        ExcitationMode,    /* In: Excitation Mode         */
  95. long        SampleRateMode,    /* In: SampleRate Mode */
  96. long        QuantizationMode,    /* In: Type of Quantization         */
  97. long        FineRateControl,    /* In: Fine Rate Control switch    */
  98. long        LosslessCodingMode,    /* In: Lossless Coding Mode         */
  99. long        RPE_configuration,    /* In: RPE_configuration             */
  100. long        Wideband_VQ,    /* In: Wideband VQ mode */
  101. long        MPE_Configuration,    /* In: Narrowband configuration */
  102. long        NumEnhLayers,    /* In: Number of Enhancement Layers  */
  103. long        BandwidthScalabilityMode, /* In: bandwidth switch           */
  104. long        BWS_configuration,     /* In: BWS_configuration           */
  105. long        frame_size,            /* In:  Frame size                   */
  106. long        n_subframes,           /* In:  Number of subframes          */
  107. long        sbfrm_size,            /* In:  Subframe size                */
  108. long        lpc_order,             /* In:  Order of LPC                 */
  109. long        num_lpc_indices,       /* In:  Number of LPC indices        */
  110. long        num_shape_cbks,        /* In:  Number of Shape Codebooks    */
  111. long        num_gain_cbks,         /* In:  Number of Gain Codebooks     */
  112. long        *org_frame_bit_allocation, /* In: bit num. for each index     */
  113. void        *InstanceContext    /* In: pointer to instance context */
  114. )
  115. {
  116.     /*==================================================================*/
  117.     /*      L O C A L   D A T A   D E F I N I T I O N S                 */
  118.     /*==================================================================*/
  119.     float *int_ap;                                    /*Interpolated ap */
  120.     unsigned long *shape_indices;                     /* Shape indices  */
  121.     unsigned long *gain_indices;                      /* Gain indices   */
  122.     unsigned long *indices;                           /* LPC codes*/
  123.     long sbfrm_ctr = 0;
  124.     long dum = 0;
  125.     float *int_ap_bws;                               /*Interpolated ap */
  126.     unsigned long *shape_indices_bws;                /* Shape indices  */
  127.     unsigned long *gain_indices_bws;                 /* Gain indices   */
  128.     unsigned long *indices_bws;                      /* LPC codes*/
  129.     long *bws_nb_acb_index;                          /* ACB codes      */
  130.     unsigned long interpolation_flag = 0;           /* Interpolation Flag*/
  131.     unsigned long LPC_Present = 1;
  132.     unsigned long signal_mode;
  133.     unsigned long rms_index;
  134.     PHI_PRIV_TYPE *PHI_Priv;
  135.     /* -----------------------------------------------------------------*/
  136.     /* Set up pointers to private data                                  */
  137.     /* -----------------------------------------------------------------*/
  138.     PHI_Priv = ((INST_CONTEXT_LPC_DEC_TYPE *)InstanceContext)->PHI_Priv;
  139.     /* -----------------------------------------------------------------*/
  140.     /* Create Arrays for frame processing                               */
  141.     /* -----------------------------------------------------------------*/
  142.     if
  143.     (
  144.     (( int_ap = (float *)malloc((unsigned int)(n_subframes * lpc_order) * sizeof(float))) == NULL )||
  145.     (( shape_indices = (unsigned long *)malloc((unsigned int)((num_enhstages+1)*num_shape_cbks * n_subframes) * sizeof(unsigned long))) == NULL )||
  146.     (( gain_indices = (unsigned long *)malloc((unsigned int)((num_enhstages+1)*num_gain_cbks * n_subframes) * sizeof(unsigned long))) == NULL )||
  147.     (( indices = (unsigned long *)malloc((unsigned int)num_lpc_indices * sizeof(unsigned long))) == NULL )
  148.     )
  149.     {
  150.         fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  151.         exit(1);
  152.     }
  153.     if (BandwidthScalabilityMode == ON) {
  154.       if
  155. (
  156.  (( int_ap_bws = (float *)malloc((unsigned int)(n_subframes_bws * lpc_order_bws) * sizeof(float))) == NULL )||
  157.  (( shape_indices_bws = (unsigned long *)malloc((unsigned int)(num_shape_cbks * n_subframes_bws) * sizeof(unsigned long))) == NULL )||
  158.  (( gain_indices_bws = (unsigned long *)malloc((unsigned int)(num_gain_cbks * n_subframes_bws) * sizeof(unsigned long))) == NULL )||
  159.  (( indices_bws = (unsigned long *)malloc((unsigned int)num_lpc_indices_bws * sizeof(unsigned long))) == NULL ) ||
  160.  (( bws_nb_acb_index = (long *)malloc((unsigned int)n_subframes_bws * sizeof(long))) == NULL )
  161.  )
  162.   {
  163.     fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  164.     exit(1);
  165.   }
  166.     }
  167.     /* CelpBaseFrame() */
  168.     /* Celp_LPC() */
  169.     /*==================================================================*/
  170.     /* CELP Lpc demux                                                   */
  171.     /*==================================================================*/
  172.    
  173.     if (FineRateControl == ON)
  174.     {
  175. /* ---------------------------------------------------------*/
  176. /* Step I: Read interpolation_flag and LPC_present flag     */
  177. /* ---------------------------------------------------------*/
  178. BsGetBit(bitStream, &interpolation_flag, 1);
  179. BsGetBit(bitStream, &LPC_Present, 1);
  180. /* ---------------------------------------------------------*/
  181. /* Step II: If LPC is present                               */
  182. /* ---------------------------------------------------------*/
  183. if (LPC_Present == YES)
  184. {
  185.     if (SampleRateMode == fs8kHz)
  186.     {
  187. Read_NarrowBand_LSP(bitStream, indices);
  188.     } 
  189.     else
  190.     {
  191. Read_Wideband_LSP(bitStream, indices);
  192.     }
  193. }
  194.     }
  195.     else
  196.     {
  197. if (SampleRateMode == fs8kHz)
  198. {
  199.     Read_NarrowBand_LSP(bitStream, indices);
  200. else
  201. {
  202.     Read_Wideband_LSP(bitStream, indices);
  203. }
  204.     }
  205.     /*==================================================================*/
  206.     /* CELP Excitation decoding                                         */
  207.     /*==================================================================*/
  208.     if ( ExcitationMode == RegularPulseExc )
  209.     {  /* RPE_Frame() */
  210. long subframe;
  211. /*--------------------------------------------------------------*/
  212. /* Regular Pulse Excitation                                     */ 
  213. /*--------------------------------------------------------------*/
  214. for(subframe = 0; subframe < n_subframes; subframe++)
  215. {
  216.     /* ---------------------------------------------------------*/
  217.     /* Read the Adaptive Codebook Lag                           */
  218.     /* ---------------------------------------------------------*/
  219.     BsGetBit(bitStream, &shape_indices[subframe * num_shape_cbks], 8);
  220.     /* ---------------------------------------------------------*/
  221.     /*Read the Fixed Codebook Index (function of bit-rate)      */
  222.     /* ---------------------------------------------------------*/
  223.     switch (RPE_configuration)
  224.     {
  225. case     0   :   BsGetBit(bitStream, &shape_indices[subframe * num_shape_cbks + 1], 11);
  226.                  break;
  227. case     1   :   BsGetBit(bitStream, &shape_indices[subframe * num_shape_cbks + 1], 11);
  228.                  break;
  229. case     2   :   BsGetBit(bitStream, &shape_indices[subframe * num_shape_cbks + 1], 12);
  230.                  break;
  231. case     3   :   BsGetBit(bitStream, &shape_indices[subframe * num_shape_cbks + 1], 12);
  232.                  break;
  233.     }
  234.     /* ---------------------------------------------------------*/
  235.     /*Read the Adaptive Codebook Gain                           */
  236.     /* ---------------------------------------------------------*/
  237.     BsGetBit(bitStream, &gain_indices[subframe * num_gain_cbks], 6);
  238.     /* ---------------------------------------------------------*/
  239.     /*Read the Fixed Codebook Gain (function of subframe)       */
  240.     /*Later subframes are encoded differentially w.r.t previous */
  241.     /* ---------------------------------------------------------*/
  242.     if (subframe == 0)
  243.     {
  244. BsGetBit(bitStream, &gain_indices[subframe * num_gain_cbks + 1], 5);
  245.     }
  246.     else
  247.     {
  248. BsGetBit(bitStream, &gain_indices[subframe * num_gain_cbks + 1], 3);
  249.     }
  250. }
  251.     }
  252.     
  253.     if (ExcitationMode == MultiPulseExc) { /* MPE_frame() */
  254.       /*--------------------------------------------------------------*/
  255.       /* Multi-Pulse Excitation                                       */ 
  256.       /*--------------------------------------------------------------*/
  257.       long i;
  258.       BsGetBit(bitStream, &signal_mode, NEC_BIT_MODE);
  259.       BsGetBit(bitStream, &rms_index, NEC_BIT_RMS);
  260.       if (SampleRateMode == fs8kHz) {
  261. for ( i = 0; i < n_subframes; i++ ) {
  262.   BsGetBit(bitStream,
  263.  &shape_indices[i*num_shape_cbks+0], NEC_BIT_ACB);
  264.   BsGetBit(bitStream,
  265.  &shape_indices[i*num_shape_cbks+1], mp_pos_bits);
  266.   BsGetBit(bitStream,
  267.  &shape_indices[i*num_shape_cbks+2], mp_sgn_bits);
  268.   BsGetBit(bitStream,
  269.  &gain_indices[i*num_gain_cbks+0], NEC_BIT_GAIN);
  270. }
  271.       } else {
  272. for ( i = 0; i < n_subframes; i++ ) {
  273.   BsGetBit(bitStream,
  274.  &shape_indices[i*num_shape_cbks+0], NEC_ACB_BIT_WB);
  275.   BsGetBit(bitStream,
  276.  &shape_indices[i*num_shape_cbks+1], mp_pos_bits);
  277.   BsGetBit(bitStream,
  278.  &shape_indices[i*num_shape_cbks+2], mp_sgn_bits);
  279.   BsGetBit(bitStream,
  280.  &gain_indices[i*num_gain_cbks+0], NEC_BIT_GAIN_WB);
  281. }
  282.       }
  283.     }
  284.     /* end of CelpBaseFrame() */
  285.     if (ExcitationMode == MultiPulseExc) {
  286.       long i, j;
  287.       /* CelpBRSenhFrame() */
  288.       if ( num_enhstages >= 1 ) {
  289. for ( j = 1; j <= num_enhstages; j++ ) {
  290.   for ( i = 0; i < n_subframes; i++ ) {
  291.     shape_indices[(j*n_subframes+i)*num_shape_cbks+0] = 0;
  292.     BsGetBit(bitStream,
  293.    &shape_indices[(j*n_subframes+i)*num_shape_cbks+1],
  294.    enh_pos_bits);
  295.     BsGetBit(bitStream,
  296.    &shape_indices[(j*n_subframes+i)*num_shape_cbks+2],
  297.    enh_sgn_bits);
  298.     BsGetBit(bitStream,
  299.    &gain_indices[(j*n_subframes+i)*num_gain_cbks+0],
  300.    NEC_BIT_ENH_GAIN);
  301.   }
  302. }
  303.       }
  304.       /* CelpBWSenhFrame() */
  305.       if (SampleRateMode == fs8kHz && 
  306.   FineRateControl == OFF && QuantizationMode == VectorQuantizer &&
  307.   BandwidthScalabilityMode == ON) {
  308. Read_BandScalable_LSP(bitStream, indices_bws);
  309. for ( i = 0; i < n_subframes_bws; i++ ) {
  310.   BsGetBit(bitStream,
  311.  &shape_indices_bws[i*num_shape_cbks+0],
  312.  NEC_BIT_ACB_FRQ16);
  313.   BsGetBit(bitStream,
  314.  &shape_indices_bws[i*num_shape_cbks+1], bws_pos_bits);
  315.   BsGetBit(bitStream,
  316.  &shape_indices_bws[i*num_shape_cbks+2], bws_sgn_bits);
  317.   BsGetBit(bitStream,
  318.  &gain_indices_bws[i*num_gain_cbks+0],
  319.  NEC_BIT_GAIN_FRQ16);
  320. }
  321.       }
  322.     }
  323.     /* -----------------------------------------------------------------*/
  324.     /* Decode LPC coefficients                                          */
  325.     /* -----------------------------------------------------------------*/
  326.   
  327.     if (FineRateControl == ON)
  328.     {
  329. VQ_celp_lpc_decode(indices, int_ap, lpc_order, num_lpc_indices, n_subframes,
  330.                        interpolation_flag, Wideband_VQ, PHI_Priv);
  331.     }
  332.     else
  333.     {  /*  FineRate Control OFF  */
  334. if (SampleRateMode == fs8kHz)
  335. {
  336.     long k;
  337.     if (ExcitationMode == RegularPulseExc)
  338.     {
  339.       fprintf (stderr, "Combination of RPE + 8 kHz sampling rate not supported.n");
  340.       exit (1);
  341.     }
  342.     if (ExcitationMode == MultiPulseExc)
  343.     {
  344. nb_abs_lpc_decode(indices, int_ap, lpc_order, n_subframes,
  345.   prev_Qlsp_coefficients);
  346.     }
  347.     if ( BandwidthScalabilityMode == ON)
  348.     {
  349. for ( k = 0; k < lpc_order; k++ )
  350. {
  351.     buf_Qlsp_coefficients_bws[k] = PAN_PI * prev_Qlsp_coefficients[k];
  352. }
  353. bws_lpc_decoder(indices_bws, int_ap_bws, lpc_order, lpc_order_bws,
  354. n_subframes_bws, buf_Qlsp_coefficients_bws, 
  355. prev_Qlsp_coefficients_bws );
  356.     }
  357. }
  358. if (SampleRateMode == fs16kHz)
  359. {
  360.     if (ExcitationMode == RegularPulseExc)
  361.     {
  362. VQ_celp_lpc_decode(indices, int_ap, lpc_order, num_lpc_indices, n_subframes,
  363.                    interpolation_flag, Wideband_VQ, PHI_Priv);
  364.     }
  365.     if (ExcitationMode == MultiPulseExc)
  366.     {
  367. wb_celp_lsp_decode(indices, int_ap, lpc_order, n_subframes,
  368.                    prev_Qlsp_coefficients);
  369.     }     
  370.     }
  371.     if (ExcitationMode==RegularPulseExc)
  372.     {
  373. /* -----------------------------------------------------------------*/
  374. /* Subframe processing                                              */
  375. /* -----------------------------------------------------------------*/
  376. for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes; sbfrm_ctr++)
  377. {
  378.     long  m = sbfrm_ctr * lpc_order;
  379.     float *cbk_sig;
  380.     float *syn_speech;
  381.     float dumf;
  382.     
  383.     /* -------------------------------------------------------------*/
  384.     /* Create Arrays for subframe processing                        */
  385.     /* -------------------------------------------------------------*/
  386.     if
  387.     (
  388.     (( cbk_sig = (float *)malloc((unsigned int)sbfrm_size * sizeof(float))) == NULL )||
  389.     (( syn_speech = (float *)malloc((unsigned int)sbfrm_size * sizeof(float))) == NULL )
  390.     )
  391.     {
  392. fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  393. exit(1);
  394.     }
  395.     
  396.     /* ------------------------------------------------------------*/
  397.     /* Excitation Generation                                       */
  398.     /* ------------------------------------------------------------*/
  399.     celp_excitation_generation(&(shape_indices[sbfrm_ctr*num_shape_cbks]),
  400.                                &(gain_indices[sbfrm_ctr*num_gain_cbks]), num_shape_cbks,
  401.        num_gain_cbks, dum, &int_ap[m], lpc_order, sbfrm_size,
  402.        n_subframes, dum, org_frame_bit_allocation, cbk_sig, &dum,
  403.        &dumf, PHI_Priv);
  404.     
  405.     /* ------------------------------------------------------------*/
  406.     /* Speech Generation                                           */
  407.     /* ------------------------------------------------------------*/
  408.     celp_lpc_synthesis_filter(cbk_sig, syn_speech, &int_ap[m], lpc_order, sbfrm_size, PHI_Priv);
  409.     
  410.     if (postfilter)
  411.     {
  412.     /* --------------------------------------------------------*/
  413.     /* Post Processing                                         */
  414.     /* --------------------------------------------------------*/
  415.     celp_postprocessing(syn_speech, &(OutputSignal[0][sbfrm_ctr*sbfrm_size]), &int_ap[m], lpc_order, sbfrm_size, dum, dumf, PHI_Priv); 
  416.     
  417.     }
  418.     else
  419.     {
  420. long k;
  421. float *psyn_speech   =  syn_speech;
  422. float *pOutputSignal =  &(OutputSignal[0][sbfrm_ctr*sbfrm_size]);
  423.     
  424. for(k=0; k < sbfrm_size; k++)
  425. {
  426.     *pOutputSignal++ = *psyn_speech++;    
  427. }
  428.     }
  429.     
  430.     /* -------------------------------------------------------------*/
  431.     /* Free   Arrays for subframe processing                        */
  432.     /* -------------------------------------------------------------*/
  433.     FREE ( syn_speech );
  434.     FREE ( cbk_sig );
  435. }    
  436.       } 
  437.     if (ExcitationMode==MultiPulseExc)
  438.     {
  439.       float *dec_sig;
  440.       float *bws_mp_sig;
  441.       long  *acb_delay;
  442.       float *adaptive_gain;
  443.       float *dec_sig_bws;
  444.       long  *bws_delay;
  445.       float *bws_adpt_gain;
  446.       float *syn_sig; /* HP 971112 */
  447.       long  kk;
  448.       if (SampleRateMode == fs8kHz) {
  449. if(
  450.    (( dec_sig   = (float *)malloc((unsigned int)frame_size_nb * sizeof(float))) == NULL )||
  451.    (( bws_mp_sig   = (float *)malloc((unsigned int)frame_size_nb * sizeof(float))) == NULL )
  452.    ) {
  453.   fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  454.   exit(1);
  455. }
  456.       } else {
  457. if(
  458.    (( dec_sig   = (float *)malloc((unsigned int)frame_size * sizeof(float))) == NULL )||
  459.    (( bws_mp_sig   = (float *)malloc((unsigned int)frame_size * sizeof(float))) == NULL )
  460.    ) {
  461.   fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  462.   exit(1);
  463. }
  464.       }
  465.       if((( acb_delay   = (long *)malloc(n_subframes * sizeof(long))) == NULL )||
  466.    (( adaptive_gain   = (float *)malloc(n_subframes * sizeof(float))) == NULL ) ) {
  467. fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  468. exit(1);
  469.       }
  470.       for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes; sbfrm_ctr++) {
  471. nb_abs_excitation_generation(shape_indices, gain_indices, 
  472.      num_shape_cbks, num_gain_cbks, rms_index,
  473.      int_ap+lpc_order*sbfrm_ctr, lpc_order, 
  474.      sbfrm_size, n_subframes, signal_mode, 
  475.      org_frame_bit_allocation,
  476.      dec_sig+sbfrm_size*sbfrm_ctr, 
  477.      bws_mp_sig+sbfrm_size*sbfrm_ctr, 
  478.      acb_delay+sbfrm_ctr,
  479.      adaptive_gain+sbfrm_ctr,
  480.      dec_enhstages,postfilter,
  481.      SampleRateMode);
  482.       }
  483.       if (BandwidthScalabilityMode == ON) {
  484. if(
  485.    (( dec_sig_bws   = (float *)malloc((unsigned int)frame_size_bws * sizeof(float))) == NULL )
  486.    ) {
  487.   fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  488.   exit(1);
  489. }
  490. if((( bws_delay   = (long *)malloc(n_subframes_bws * sizeof(long))) == NULL )||
  491.    (( bws_adpt_gain   = (float *)malloc(n_subframes_bws * sizeof(float))) == NULL ) ) {
  492. fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  493. exit(1);
  494. }
  495. for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes_bws; sbfrm_ctr++) {
  496.   bws_nb_acb_index[sbfrm_ctr] = shape_indices[sbfrm_ctr*n_subframes/n_subframes_bws*num_shape_cbks];
  497. }
  498. for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes_bws; sbfrm_ctr++) {
  499.   bws_excitation_generation(shape_indices_bws, gain_indices_bws, 
  500.     num_shape_cbks, num_gain_cbks, rms_index,
  501.     int_ap_bws+lpc_order_bws*sbfrm_ctr,
  502.     lpc_order_bws, 
  503.     sbfrm_size_bws, n_subframes_bws,
  504.     signal_mode, 
  505.     &org_frame_bit_allocation[num_indices-n_subframes_bws*(num_shape_cbks+num_gain_cbks)],
  506.     dec_sig_bws+sbfrm_size_bws*sbfrm_ctr, 
  507.     bws_mp_sig+sbfrm_size*n_subframes/n_subframes_bws*sbfrm_ctr,
  508.     bws_nb_acb_index,
  509.     bws_delay+sbfrm_ctr,bws_adpt_gain+sbfrm_ctr,postfilter);
  510. }
  511.       }
  512.       if ( (BandwidthScalabilityMode==ON) && (dec_bwsmode) ) {
  513.         if(( syn_sig = (float *)malloc((unsigned int)sbfrm_size_bws * sizeof(float))) == NULL ){
  514.   fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  515.   exit(1);
  516. }
  517. for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes_bws; sbfrm_ctr++) {
  518.   celp_lpc_synthesis_filter(dec_sig_bws+sbfrm_size_bws*sbfrm_ctr,
  519.     syn_sig,
  520.     int_ap_bws+lpc_order_bws*sbfrm_ctr,
  521.     lpc_order_bws, sbfrm_size_bws, PHI_Priv);
  522.   if (postfilter) {
  523.     nb_abs_postprocessing(syn_sig,
  524.   &(OutputSignal[0][sbfrm_ctr*sbfrm_size_bws]),
  525.   int_ap_bws+lpc_order_bws*sbfrm_ctr,
  526.   lpc_order_bws, sbfrm_size_bws,
  527.   bws_delay[sbfrm_ctr],
  528.   bws_adpt_gain[sbfrm_ctr]);
  529.   } else {
  530.             for(kk=0; kk < sbfrm_size_bws; kk++)
  531.       OutputSignal[0][sbfrm_ctr*sbfrm_size_bws+kk] = syn_sig[kk];
  532.   }
  533. }
  534. FREE( syn_sig );
  535.       } else {
  536.         if(( syn_sig = (float *)malloc((unsigned int)sbfrm_size * sizeof(float))) == NULL ){
  537.   fprintf(stderr, "MALLOC FAILURE in abs_decoder  n");
  538.   exit(1);
  539. }
  540. for (sbfrm_ctr = 0; sbfrm_ctr < n_subframes; sbfrm_ctr++) {
  541.   celp_lpc_synthesis_filter(dec_sig+sbfrm_size*sbfrm_ctr,
  542.     syn_sig,
  543.     int_ap+lpc_order*sbfrm_ctr,
  544.     lpc_order, sbfrm_size, PHI_Priv);
  545.   if (postfilter) {
  546.     nb_abs_postprocessing(syn_sig,
  547.   &(OutputSignal[0][sbfrm_ctr*sbfrm_size]),
  548.   int_ap+lpc_order*sbfrm_ctr,
  549.   lpc_order, sbfrm_size,
  550.   acb_delay[sbfrm_ctr],
  551.   adaptive_gain[sbfrm_ctr]);
  552.   } else {
  553.             for(kk=0; kk < sbfrm_size; kk++)
  554.       OutputSignal[0][sbfrm_ctr*sbfrm_size+kk] = syn_sig[kk];
  555.   }
  556. }
  557. FREE( syn_sig );
  558.       }
  559.      FREE ( dec_sig );
  560.       FREE ( bws_mp_sig );
  561.       FREE ( acb_delay );
  562.       FREE ( adaptive_gain );
  563.       if (BandwidthScalabilityMode == ON) {
  564. FREE ( dec_sig_bws );
  565. FREE ( bws_delay );
  566. FREE ( bws_adpt_gain );
  567.       }
  568.     }
  569.     /* -----------------------------------------------------------------*/
  570.     /* Free   Arrays for Frame processing                               */
  571.     /* -----------------------------------------------------------------*/
  572.     FREE ( int_ap );
  573.     FREE ( shape_indices );
  574.     FREE ( gain_indices );
  575.     FREE ( indices );
  576.     
  577.     if (SampleRateMode == fs8kHz) {
  578.       if ( BandwidthScalabilityMode == ON ) {
  579. FREE ( int_ap_bws );
  580. FREE ( shape_indices_bws );
  581. FREE ( gain_indices_bws );
  582. FREE ( indices_bws );
  583. FREE ( bws_nb_acb_index );
  584.       }
  585.     }
  586.     /* ----------------------------------------------------------------*/
  587.     /* Report on the current frame count                               */
  588.     /* ----------------------------------------------------------------*/
  589.     frame_ctr++;
  590.     if (frame_ctr % 10 == 0)
  591.     {
  592.       if (CELPdecDebugLevel) { /* HP 971120 */
  593.         fprintf(stderr, "Frame Counter: %ld r", frame_ctr);
  594.       }
  595.     }
  596. }
  597. /*======================================================================*/
  598. /*   Function Definition: PHI_Postfilter                                */
  599. /*======================================================================*/
  600. static void PHI_Postfilter
  601. (
  602.     const long flag                      /* In: Postfilter On/Off flag  */
  603. )
  604. {
  605.     postfilter = flag;
  606. }
  607. /*======================================================================*/
  608. /*   Function Definition:celp_initialisation_decoder                    */
  609. /*======================================================================*/
  610. void celp_initialisation_decoder
  611. (
  612. BsBitStream *hdrStream,           /* In: Bitstream                     */
  613. long     bit_rate,                  /* in: bit rate */
  614. long     complexity_level,               /* In: complexity level decoder*/
  615. long     reduced_order,                  /* In: reduced order decoder   */
  616. long     DecEnhStage,
  617. long     DecBwsMode,
  618. long     PostFilterSW,
  619. long     *frame_size,                    /* Out: frame size             */
  620. long     *n_subframes,                   /* Out: number of  subframes   */
  621. long     *sbfrm_size,                    /* Out: subframe size          */ 
  622. long     *lpc_order,                     /* Out: LP analysis order      */
  623. long     *num_lpc_indices,               /* Out: number of LPC indices  */
  624. long     *num_shape_cbks,                /* Out: number of Shape Codeb. */    
  625. long     *num_gain_cbks,                 /* Out: number of Gain Codeb.  */    
  626. long     **org_frame_bit_allocation,     /* Out: bit num. for each index*/
  627. long     * ExcitationMode,               /* Out: Excitation Mode     */
  628. long     * SampleRateMode,               /* Out: SampleRate Mode     */
  629. long     * QuantizationMode,             /* Out: Type of Quantization */
  630. long     * FineRateControl,              /* Out: Fine Rate Control switch*/
  631. long     * LosslessCodingMode,           /* Out: Lossless Coding Mode   */
  632. long     * RPE_configuration,             /* Out: Wideband configuration */
  633. long     * Wideband_VQ,               /* Out: Wideband VQ mode */
  634. long     * MPE_Configuration,             /* Out: Narrowband configuration*/
  635. long     * NumEnhLayers,              /* Out: Number of Enhancement Layers*/
  636. long     * BandwidthScalabilityMode,     /* Out: bandwidth switch     */
  637. long     * BWS_configuration,            /* Out: BWS_configuration */
  638. void  **InstanceContext,  /* Out: handle to initialised instance context */
  639. int      mp4ffFlag
  640. )
  641. {
  642.    INST_CONTEXT_LPC_DEC_TYPE *InstCtxt;
  643.    frame_ctr = 0;   /* Frame Counter                   */
  644.    postfilter = 0;           /* Postfilter switch               */
  645.    prev_Qlsp_coefficients = NULL; /* previous quantized LSP coeff.   */
  646.    buf_Qlsp_coefficients_bws = NULL; /* current quantized LSP coeff. */
  647.    prev_Qlsp_coefficients_bws = NULL;/* previous quantized LSP coeff. */
  648.     /* -----------------------------------------------------------------*/
  649.     /* Create & initialise private storage for instance context         */
  650.     /* -----------------------------------------------------------------*/
  651.     if (( InstCtxt = (INST_CONTEXT_LPC_DEC_TYPE*)malloc(sizeof(INST_CONTEXT_LPC_DEC_TYPE))) == NULL )
  652.     {
  653.       fprintf(stderr, "MALLOC FAILURE in celp_initialisation_decoder  n");
  654.       exit(1);
  655.     }
  656.     if (( InstCtxt->PHI_Priv = (PHI_PRIV_TYPE*)malloc(sizeof(PHI_PRIV_TYPE))) == NULL )
  657.     {
  658.       fprintf(stderr, "MALLOC FAILURE in celp_initialisation_decoder  n");
  659.       exit(1);
  660.     }
  661.     PHI_Init_Private_Data(InstCtxt->PHI_Priv);
  662.     *InstanceContext = InstCtxt;
  663.     /* -----------------------------------------------------------------*/
  664.     /*                                                                  */
  665.     /* -----------------------------------------------------------------*/
  666.   
  667.     postfilter = PostFilterSW;
  668.     
  669.     /* -----------------------------------------------------------------*/
  670.     /* Read bitstream header                                            */
  671.     /* -----------------------------------------------------------------*/ 
  672.     /* read from object descriptor */
  673.     if (mp4ffFlag==0) 
  674.       read_celp_bitstream_header(hdrStream, ExcitationMode, SampleRateMode, 
  675.                                QuantizationMode, FineRateControl, LosslessCodingMode,
  676.                                RPE_configuration, Wideband_VQ, MPE_Configuration,
  677.                                NumEnhLayers, BandwidthScalabilityMode, BWS_configuration);
  678.     if (*ExcitationMode == RegularPulseExc)
  679.     {
  680. if (*SampleRateMode == fs8kHz)
  681. {
  682.     fprintf (stderr, "Combination of RPE + 8 kHz sampling rate not supported.n");
  683.     exit (1);
  684. }
  685.     
  686. /* -----------------------------------------------------------------*/
  687. /*Check if a bit rate is a set of allowed bit rates                 */
  688. /* -----------------------------------------------------------------*/ 
  689. if (*RPE_configuration == 0)
  690. {
  691. *frame_size = FIFTEEN_MS;
  692. *n_subframes = 6;        
  693. }
  694. else
  695. if (*RPE_configuration == 1)
  696. {
  697. *frame_size  = TEN_MS;
  698. *n_subframes = 4;        
  699. }
  700. else
  701. if (*RPE_configuration == 2)
  702. {
  703. *frame_size  = FIFTEEN_MS;
  704. *n_subframes = 8;
  705. }
  706. else
  707. if (*RPE_configuration == 3)
  708. {
  709. *frame_size  = FIFTEEN_MS;
  710. *n_subframes = 10;
  711. }
  712. else
  713. {
  714. fprintf(stderr, "ERROR: Illegal RPE Configurationn");
  715. exit(1); 
  716. }
  717. *sbfrm_size          = (*frame_size)/(*n_subframes);
  718. *num_shape_cbks      = 2;     
  719. *num_gain_cbks       = 2;     
  720. *lpc_order       = ORDER_LPC_16;
  721. *num_lpc_indices = N_INDICES_VQ16;
  722. PHI_init_excitation_generation( Lmax, *sbfrm_size, *RPE_configuration, InstCtxt->PHI_Priv );
  723. PHI_InitLpcAnalysisDecoder(ORDER_LPC_16, ORDER_LPC_8, InstCtxt->PHI_Priv);
  724. PHI_InitPostProcessor(*lpc_order, InstCtxt->PHI_Priv );
  725. *org_frame_bit_allocation = PHI_init_bit_allocation(*SampleRateMode, *RPE_configuration,
  726.     *QuantizationMode, *LosslessCodingMode,
  727.     *FineRateControl, *num_lpc_indices,
  728.     *n_subframes, *num_shape_cbks, *num_gain_cbks); 
  729.    }
  730.  
  731.    if (*ExcitationMode == MultiPulseExc) {
  732.      if (*SampleRateMode == fs8kHz) {
  733.        int i, j;
  734.        long ctr;
  735.        num_enhstages = *NumEnhLayers;
  736.        dec_enhstages = DecEnhStage;
  737.        dec_bwsmode = DecBwsMode;
  738.        if ( *MPE_Configuration >= 0 && *MPE_Configuration < 3 ) {
  739.  frame_size_nb = NEC_FRAME40MS;
  740.  *n_subframes = NEC_NSF4;
  741.        }
  742.        if ( *MPE_Configuration >= 3 && *MPE_Configuration < 6 ) {
  743.  frame_size_nb = NEC_FRAME30MS;
  744.  *n_subframes = NEC_NSF3;
  745.        }
  746.        if ( *MPE_Configuration >= 6 && *MPE_Configuration < 13 ) {
  747.  frame_size_nb = NEC_FRAME20MS;
  748.  *n_subframes = NEC_NSF2;
  749.        }
  750.        if ( *MPE_Configuration >= 13 && *MPE_Configuration < 22 ) {
  751.  frame_size_nb = NEC_FRAME20MS;
  752.  *n_subframes = NEC_NSF4;
  753.        }
  754.        if ( *MPE_Configuration >= 22 && *MPE_Configuration < 27 ) {
  755.  frame_size_nb = NEC_FRAME10MS;
  756.  *n_subframes = NEC_NSF2;
  757.        }
  758.        if ( *MPE_Configuration == 27 ) {
  759.  frame_size_nb = NEC_FRAME30MS;
  760.  *n_subframes = NEC_NSF4;
  761.        }
  762.        if ( *MPE_Configuration > 27 ) {
  763.  fprintf(stderr,"Error: Illegal BitRate configuration.n");
  764.  exit(1); 
  765.        }
  766.        *sbfrm_size = frame_size_nb/(*n_subframes);
  767.        *lpc_order = NEC_LPC_ORDER;
  768.        *num_shape_cbks = NEC_NUM_SHAPE_CBKS;
  769.        *num_gain_cbks = NEC_NUM_GAIN_CBKS;
  770.        if (*QuantizationMode == ScalarQuantizer) {
  771.  *num_lpc_indices = 4;
  772.        } else {
  773.  *num_lpc_indices = PAN_NUM_LPC_INDICES;
  774.        }
  775.        num_indices = NEC_NUM_OTHER_INDICES + PAN_NUM_LPC_INDICES
  776.  + (num_enhstages + 1) * (*n_subframes) *
  777.    (NEC_NUM_SHAPE_CBKS+NEC_NUM_GAIN_CBKS);
  778.        switch ( *MPE_Configuration ) {
  779.        case 0:
  780.  mp_pos_bits = 14; mp_sgn_bits =  3; break;
  781.        case 1:
  782.  mp_pos_bits = 17; mp_sgn_bits =  4; break;
  783.        case 2:
  784.  mp_pos_bits = 20; mp_sgn_bits =  5; break;
  785.        case 3:
  786.  mp_pos_bits = 20; mp_sgn_bits =  5; break;
  787.        case 4:
  788.  mp_pos_bits = 22; mp_sgn_bits =  6; break;
  789.        case 5:
  790.  mp_pos_bits = 24; mp_sgn_bits =  7; break;
  791.        case 6:
  792.  mp_pos_bits = 22; mp_sgn_bits =  6; break;
  793.        case 7:
  794.  mp_pos_bits = 24; mp_sgn_bits =  7; break;
  795.        case 8:
  796.  mp_pos_bits = 26; mp_sgn_bits =  8; break;
  797.        case 9:
  798.  mp_pos_bits = 28; mp_sgn_bits =  9; break;
  799.        case 10:
  800.  mp_pos_bits = 30; mp_sgn_bits = 10; break;
  801.        case 11:
  802.  mp_pos_bits = 31; mp_sgn_bits = 11; break;
  803.        case 12:
  804.  mp_pos_bits = 32; mp_sgn_bits = 12; break;
  805.        case 13:
  806.  mp_pos_bits = 13; mp_sgn_bits =  4; break;
  807.        case 14:
  808.  mp_pos_bits = 15; mp_sgn_bits =  5; break;
  809.        case 15:
  810.  mp_pos_bits = 16; mp_sgn_bits =  6; break;
  811.        case 16:
  812.  mp_pos_bits = 17; mp_sgn_bits =  7; break;
  813.        case 17:
  814.  mp_pos_bits = 18; mp_sgn_bits =  8; break;
  815.        case 18:
  816.  mp_pos_bits = 19; mp_sgn_bits =  9; break;
  817.        case 19:
  818.  mp_pos_bits = 20; mp_sgn_bits =  10; break;
  819.        case 20:
  820.  mp_pos_bits = 20; mp_sgn_bits =  11; break;
  821.        case 21:
  822.  mp_pos_bits = 20; mp_sgn_bits =  12; break;
  823.        case 22:
  824.  mp_pos_bits = 18; mp_sgn_bits =  8; break;
  825.        case 23:
  826.  mp_pos_bits = 19; mp_sgn_bits =  9; break;
  827.        case 24:
  828.  mp_pos_bits = 20; mp_sgn_bits =  10; break;
  829.        case 25:
  830.  mp_pos_bits = 20; mp_sgn_bits =  11; break;
  831.        case 26:
  832.  mp_pos_bits = 20; mp_sgn_bits =  12; break;
  833.        case 27:
  834.  mp_pos_bits = 19; mp_sgn_bits =  6; break;
  835.        }
  836.        if ( *sbfrm_size == (NEC_FRAME20MS/NEC_NSF4) ) {
  837.  enh_pos_bits = NEC_BIT_ENH_POS40_2;
  838.  enh_sgn_bits = NEC_BIT_ENH_SGN40_2;
  839.        } else {
  840.  enh_pos_bits = NEC_BIT_ENH_POS80_4;
  841.  enh_sgn_bits = NEC_BIT_ENH_SGN80_4;
  842.        }
  843.        if (*BandwidthScalabilityMode==ON) {
  844.  frame_size_bws = frame_size_nb * 2;
  845.  n_subframes_bws = frame_size_bws/80;
  846.  sbfrm_size_bws = frame_size_bws / n_subframes_bws;
  847.  lpc_order_bws = NEC_LPC_ORDER_FRQ16;
  848.  num_lpc_indices_bws = NEC_NUM_LPC_INDICES_FRQ16 ;
  849.  num_indices += NEC_NUM_LPC_INDICES_FRQ16 
  850.    + n_subframes_bws * (NEC_NUM_SHAPE_CBKS
  851. +NEC_NUM_GAIN_CBKS);
  852.  switch ( *BWS_configuration ) {
  853.  case 0:
  854.    bws_pos_bits = 22; bws_sgn_bits = 6; break;
  855.  case 1:
  856.    bws_pos_bits = 26; bws_sgn_bits = 8; break;
  857.  case 2:
  858.    bws_pos_bits = 30; bws_sgn_bits =10; break;
  859.  case 3:
  860.    bws_pos_bits = 32; bws_sgn_bits =12; break;
  861.  }
  862.        }
  863.        if ( (*BandwidthScalabilityMode==ON) && (dec_bwsmode) ) {
  864.  *frame_size = frame_size_bws;
  865.        } else {
  866.  *frame_size = frame_size_nb;
  867.        }
  868.        if((*org_frame_bit_allocation=(long *)calloc(num_indices, 
  869.     sizeof(long)))==NULL) {
  870.  fprintf(stderr,"n memory allocation error in initialization_encodern");
  871.  exit(3);
  872.        }
  873.        ctr = 0;
  874.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_0;
  875.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_1;
  876.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_2;
  877.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_3;
  878.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP22_4;
  879.        *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_MODE;
  880.        *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_RMS;
  881.        for ( i = 0; i < *n_subframes; i++ ) {
  882.  *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ACB;
  883.  *(*org_frame_bit_allocation+(ctr++)) =  mp_pos_bits;
  884.  *(*org_frame_bit_allocation+(ctr++)) =  mp_sgn_bits;
  885.  *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN;
  886.        }
  887.        for ( i = 0; i < num_enhstages; i++ ) {
  888.  for ( j = 0; j < *n_subframes; j++ ) {
  889.    *(*org_frame_bit_allocation+(ctr++)) =  0;
  890.    *(*org_frame_bit_allocation+(ctr++)) =  enh_pos_bits;
  891.    *(*org_frame_bit_allocation+(ctr++)) =  enh_sgn_bits;
  892.    *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ENH_GAIN;
  893.  }
  894.        }
  895.        if (*BandwidthScalabilityMode==ON) {
  896.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_0;
  897.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_1;
  898.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_2;
  899.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_3; 
  900.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_4; 
  901.  *(*org_frame_bit_allocation+(ctr++)) = NEC_BIT_LSP1620_5;
  902.  for ( i = 0; i < n_subframes_bws; i++ ) {
  903.    *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ACB_FRQ16;
  904.    *(*org_frame_bit_allocation+(ctr++)) =  bws_pos_bits;
  905.    *(*org_frame_bit_allocation+(ctr++)) =  bws_sgn_bits;
  906.    *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN_FRQ16;
  907.  }
  908.        }
  909.        if((prev_Qlsp_coefficients=(float *)calloc(*lpc_order,
  910.   sizeof(float)))==NULL) {
  911.  fprintf(stderr,"n memory allocation error in initialization_decodern");
  912.  exit(5);
  913.        }
  914.        for(i=0;i<(*lpc_order);i++) 
  915.  *(prev_Qlsp_coefficients+i) = (i+1)/(float)((*lpc_order)+1);
  916.        if (*BandwidthScalabilityMode==ON) {
  917.  if((buf_Qlsp_coefficients_bws=(float *)calloc(*lpc_order,
  918.       sizeof(float)))==NULL) {
  919.    fprintf(stderr,"n memory allocation error in initialization_decodern");
  920.    exit(5);
  921.  }
  922.  if((prev_Qlsp_coefficients_bws=(float *)calloc(lpc_order_bws,
  923. sizeof(float)))==NULL) {
  924.    fprintf(stderr,"n memory allocation error in initialization_decodern");
  925.    exit(5);
  926.  }
  927.  for(i=0;i<(lpc_order_bws);i++) 
  928.    *(prev_Qlsp_coefficients_bws+i) = PAN_PI * (i+1)
  929.      / (float)(lpc_order_bws+1);
  930.        }
  931.        /* submodules for initialization */
  932.        if ((*BandwidthScalabilityMode==ON)&&(dec_bwsmode)) {
  933.  PHI_InitLpcAnalysisDecoder(lpc_order_bws, *lpc_order, InstCtxt->PHI_Priv);
  934.        } else {
  935.  PHI_InitLpcAnalysisDecoder(*lpc_order, *lpc_order, InstCtxt->PHI_Priv);
  936.        }
  937.        if (*LosslessCodingMode == ON) {
  938.  *num_lpc_indices     = 10;   
  939.        }
  940.      }
  941.      if (*SampleRateMode == fs16kHz) {
  942.        int i, j;
  943.        long ctr;
  944.        num_enhstages = *NumEnhLayers;
  945.        dec_enhstages = DecEnhStage;
  946.        if ((*MPE_Configuration>=0) && (*MPE_Configuration<7)) {
  947.  *frame_size = NEC_FRAME20MS_FRQ16;
  948.  *n_subframes = NEC_NSF4;
  949.        } else if((*MPE_Configuration>=8)&&(*MPE_Configuration<16)) {
  950.  *frame_size = NEC_FRAME20MS_FRQ16;
  951.  *n_subframes = NEC_NSF8;
  952.        } else if((*MPE_Configuration>=16)&&(*MPE_Configuration<23)) {
  953.  *frame_size = NEC_FRAME10MS_FRQ16;
  954.  *n_subframes = NEC_NSF2;
  955.        } else if((*MPE_Configuration>=24)&&(*MPE_Configuration<32)) {
  956.  *frame_size = NEC_FRAME10MS_FRQ16;
  957.  *n_subframes = NEC_NSF4;
  958.        } else {
  959.  fprintf(stderr,"Error: Illegal BitRate configuration.n");
  960.  exit(1); 
  961.        }
  962.        *sbfrm_size = *frame_size/(*n_subframes);
  963.        *lpc_order = NEC_LPC_ORDER_FRQ16;
  964.        *num_shape_cbks = NEC_NUM_SHAPE_CBKS;
  965.        *num_gain_cbks = NEC_NUM_GAIN_CBKS;
  966.        *num_lpc_indices = PAN_NUM_LPC_INDICES_W;
  967.        
  968.        num_indices = NEC_NUM_OTHER_INDICES + PAN_NUM_LPC_INDICES_W
  969.  + (num_enhstages + 1) * (*n_subframes) *
  970.    (NEC_NUM_SHAPE_CBKS+NEC_NUM_GAIN_CBKS);
  971.        switch ( *MPE_Configuration ) {
  972.        case 0:
  973.  mp_pos_bits = 20; mp_sgn_bits =  5; break;
  974.        case 1:
  975.  mp_pos_bits = 22; mp_sgn_bits =  6; break;
  976.        case 2:
  977.  mp_pos_bits = 24; mp_sgn_bits =  7; break;
  978.        case 3:
  979.  mp_pos_bits = 26; mp_sgn_bits =  8; break;
  980.        case 4:
  981.  mp_pos_bits = 28; mp_sgn_bits =  9; break;
  982.        case 5:
  983.  mp_pos_bits = 30; mp_sgn_bits =  10; break;
  984.        case 6:
  985.  mp_pos_bits = 31; mp_sgn_bits =  11; break;
  986.        case 7:
  987.  break;
  988.        case 8:
  989.  mp_pos_bits = 11; mp_sgn_bits =  3; break;
  990.        case 9:
  991.  mp_pos_bits = 13; mp_sgn_bits =  4; break;
  992.        case 10:
  993.  mp_pos_bits = 15; mp_sgn_bits =  5; break;
  994.        case 11:
  995.  mp_pos_bits = 16; mp_sgn_bits =  6; break;
  996.        case 12:
  997.  mp_pos_bits = 17; mp_sgn_bits =  7; break;
  998.        case 13:
  999.  mp_pos_bits = 18; mp_sgn_bits =  8; break;
  1000.        case 14:
  1001.  mp_pos_bits = 19; mp_sgn_bits =  9; break;
  1002.        case 15:
  1003.  mp_pos_bits = 20; mp_sgn_bits =  10; break;
  1004.        case 16:
  1005.  mp_pos_bits = 20; mp_sgn_bits =  5; break;
  1006.        case 17:
  1007.  mp_pos_bits = 22; mp_sgn_bits =  6; break;
  1008.        case 18:
  1009.  mp_pos_bits = 24; mp_sgn_bits =  7; break;
  1010.        case 19:
  1011.  mp_pos_bits = 26; mp_sgn_bits =  8; break;
  1012.        case 20:
  1013.  mp_pos_bits = 28; mp_sgn_bits =  9; break;
  1014.        case 21:
  1015.  mp_pos_bits = 30; mp_sgn_bits =  10; break;
  1016.        case 22:
  1017.  mp_pos_bits = 31; mp_sgn_bits =  11; break;
  1018.        case 23:
  1019.  break;
  1020.        case 24:
  1021.  mp_pos_bits = 11; mp_sgn_bits =  3; break;
  1022.        case 25:
  1023.  mp_pos_bits = 13; mp_sgn_bits =  4; break;
  1024.        case 26:
  1025.  mp_pos_bits = 15; mp_sgn_bits =  5; break;
  1026.        case 27:
  1027.  mp_pos_bits = 16; mp_sgn_bits =  6; break;
  1028.        case 28:
  1029.  mp_pos_bits = 17; mp_sgn_bits =  7; break;
  1030.        case 29:
  1031.  mp_pos_bits = 18; mp_sgn_bits =  8; break;
  1032.        case 30:
  1033.  mp_pos_bits = 19; mp_sgn_bits =  9; break;
  1034.        case 31:
  1035.  mp_pos_bits = 20; mp_sgn_bits =  10; break;
  1036.        }
  1037.        if ( *sbfrm_size == NEC_SBFRM_SIZE40 ) {
  1038.  enh_pos_bits = NEC_BIT_ENH_POS40_2;
  1039.  enh_sgn_bits = NEC_BIT_ENH_SGN40_2;
  1040.        } else {
  1041.  enh_pos_bits = NEC_BIT_ENH_POS80_4;
  1042.  enh_sgn_bits = NEC_BIT_ENH_SGN80_4;
  1043.        }
  1044.        if((*org_frame_bit_allocation=(long *)calloc(num_indices, 
  1045.     sizeof(long)))==NULL) {
  1046.  fprintf(stderr,"n memory allocation error in initialization_encodern");
  1047.  exit(3);
  1048.        }
  1049.        ctr = 0;
  1050.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_0;
  1051.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_1;
  1052.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_2;
  1053.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_3;
  1054.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WL_4;
  1055.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_0;
  1056.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_1;
  1057.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_2;
  1058.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_3;
  1059.        *(*org_frame_bit_allocation+(ctr++)) =  PAN_BIT_LSP_WU_4;
  1060.        *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_MODE;
  1061.        *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_RMS;
  1062.        for ( i = 0; i < *n_subframes; i++ ) {
  1063.  *(*org_frame_bit_allocation+(ctr++)) =  NEC_ACB_BIT_WB;
  1064.  *(*org_frame_bit_allocation+(ctr++)) =  mp_pos_bits;
  1065.  *(*org_frame_bit_allocation+(ctr++)) =  mp_sgn_bits;
  1066.  *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_GAIN_WB;
  1067.        }
  1068.        for ( i = 0; i < num_enhstages; i++ ) {
  1069.  for ( j = 0; j < *n_subframes; j++ ) {
  1070.    *(*org_frame_bit_allocation+(ctr++)) =  0;
  1071.    *(*org_frame_bit_allocation+(ctr++)) =  enh_pos_bits;
  1072.    *(*org_frame_bit_allocation+(ctr++)) =  enh_sgn_bits;
  1073.    *(*org_frame_bit_allocation+(ctr++)) =  NEC_BIT_ENH_GAIN;
  1074.  }
  1075.        }
  1076.        if((prev_Qlsp_coefficients=(float *)calloc(*lpc_order,
  1077.   sizeof(float)))==NULL) {
  1078.  fprintf(stderr,"n memory allocation error in initialization_decodern");
  1079.  exit(5);
  1080.        }
  1081.        for(i=0;i<(*lpc_order);i++) 
  1082.  *(prev_Qlsp_coefficients+i) = (i+1)/(float)((*lpc_order)+1);
  1083.        /* submodules for initialization */
  1084.        PHI_InitLpcAnalysisDecoder(*lpc_order, *lpc_order, InstCtxt->PHI_Priv);
  1085.      }
  1086.    }
  1087. }
  1088. /*======================================================================*/
  1089. /*   Function Definition: celp_close_decoder                            */
  1090. /*======================================================================*/
  1091. void celp_close_decoder
  1092. (
  1093.    long ExcitationMode,
  1094.    long SampleRateMode,
  1095.    long BandwidthScalabilityMode,
  1096.    long frame_bit_allocation[],         /* In: bit num. for each index */
  1097.    void **InstanceContext               /* In/Out: handle to instance context */
  1098. )
  1099. {
  1100.   INST_CONTEXT_LPC_DEC_TYPE *InstCtxt;
  1101.   PHI_PRIV_TYPE *PHI_Priv;
  1102.   
  1103.   /* -----------------------------------------------------------------*/
  1104.   /* Set up pointers to private data                                  */
  1105.   /* -----------------------------------------------------------------*/
  1106.   PHI_Priv = ((INST_CONTEXT_LPC_DEC_TYPE *) *InstanceContext)->PHI_Priv;
  1107.   /* -----------------------------------------------------------------*/
  1108.   /*                                                                  */
  1109.   /* -----------------------------------------------------------------*/
  1110.  
  1111.   if (ExcitationMode == RegularPulseExc)
  1112.   {
  1113.    PHI_ClosePostProcessor(PHI_Priv);
  1114.      PHI_close_excitation_generation(PHI_Priv);
  1115.      PHI_FreeLpcAnalysisDecoder(PHI_Priv);
  1116.       PHI_free_bit_allocation(frame_bit_allocation);
  1117.   }
  1118.   if (ExcitationMode == MultiPulseExc)
  1119.   {
  1120.     if (prev_Qlsp_coefficients != NULL) {
  1121.       FREE(prev_Qlsp_coefficients);
  1122.       prev_Qlsp_coefficients = NULL;
  1123.     }
  1124.   PHI_FreeLpcAnalysisDecoder(PHI_Priv);
  1125. if (BandwidthScalabilityMode == ON)
  1126. {
  1127.   if (buf_Qlsp_coefficients_bws != NULL) {
  1128.     FREE(buf_Qlsp_coefficients_bws);
  1129.     buf_Qlsp_coefficients_bws = NULL;
  1130.   }
  1131.   if (prev_Qlsp_coefficients_bws != NULL) {
  1132.     FREE(prev_Qlsp_coefficients_bws);
  1133.     prev_Qlsp_coefficients_bws = NULL;
  1134.   }
  1135. }
  1136.   }
  1137.     /* -----------------------------------------------------------------*/
  1138.     /* Print Total Frames Processed                                     */
  1139.     /* -----------------------------------------------------------------*/ 
  1140.     if (CELPdecDebugLevel) { /* HP 971120 */
  1141.       fprintf(stderr,"n");
  1142.       fprintf(stderr,"Total Frames:  %ld n", frame_ctr);
  1143.     }
  1144.     /* -----------------------------------------------------------------*/
  1145.     /* Dispose of private storage for instance context                  */
  1146.     /* -----------------------------------------------------------------*/
  1147.     InstCtxt = (INST_CONTEXT_LPC_DEC_TYPE *)*InstanceContext;
  1148.     if (InstCtxt->PHI_Priv != NULL) {
  1149.       FREE(InstCtxt->PHI_Priv);
  1150.       InstCtxt->PHI_Priv = NULL;
  1151.     }
  1152.     FREE(InstCtxt);
  1153.     *InstanceContext = NULL;
  1154. }
  1155. /*======================================================================*/
  1156. /*      H I S T O R Y                                                   */
  1157. /*======================================================================*/
  1158. /* 01-09-96 R. Taori  Initial Version                                   */
  1159. /* 18-09-96 R. Taori  Brought in line with MPEG-4 Interface             */
  1160. /* 05-05-98 R. Funken Brought in line with MPEG-4 FCD: 3 complexity levels */