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

📄 decode.c

📁 ISO mp3 sources (distribution 10) Layer 1/2/3, C Source, 512 k Sources of the Mpeg 1,2 layer 1,2
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************************************************************** * ISO MPEG Audio Subgroup Software Simulation Group (1996) * ISO 13818-3 MPEG-2 Audio Multichannel Decoder * * $Id: decode.c 1.12 1997/01/17 04:26:01 rowlands Exp $ * * $Log: decode.c $ * Revision 1.12  1997/01/17 04:26:01  rowlands * Fixed base bitstream joint stereo bugs. * Fixed PCM output file cleanup bugs. * * Revision 1.11  1996/04/18 05:37:23  rowlands * Release following Florence meeting * * Revision 1.10  1996/02/12 07:13:06  rowlands * Release following Munich meeting * * Revision 1.9.1.4  1996/01/29  03:36:47  rowlands * Fixed problem with dynamic crosstalk in 2/2 configuration * Fixed bug in dynamic crosstalk for 3/1 configuration. * * Revision 1.9.1.1  1996/01/20  17:28:45  rowlands * Received from Ralf Schwalbe (Telekom FTZ) - includes prediction * * Revision 1.7.1.3  1995/08/14  08:12:10  tenkate * ML-LSF added Warner ten Kate 7/8/95 (Philips) * change "alloc" and "sblimit" into "alloc_ml" and * "sblimit_ml" where appropriate. * * Revision 1.7.1.1  1995/07/14  06:12:46  rowlands * Updated dynamic crosstalk from FTZ: revision FTZ_03 * * Revision 1.3.3.1  1995/06/16  08:00:46  rowlands * Input from Sang Wook Kim (Samsung AIT) * * Revision 1.3.2.1  1995/06/16  03:27:20  rowlands * Corrected prediction select syntax according to IS * Added dematrixing procedure 2. Corrected dematrix weighting values. * **********************************************************************//********************************************************************** *   date   programmers                comment                        * * 2/25/91  Douglas Wong        start of version 1.0 records          * * 3/06/91  Douglas Wong        rename setup.h to dedef.h             * *                              removed extraneous variables          * *                              removed window_samples (now part of   * *                              filter_samples)                       * * 3/07/91  Davis Pan           changed output file to "codmusic"     * * 5/10/91  Vish (PRISM)        Ported to Macintosh and Unix.         * *                              Incorporated new "out_fifo()" which   * *                              writes out last incomplete buffer.    * *                              Incorporated all AIFF routines which  * *                              are also compatible with SUN.         * *                              Incorporated user interface for       * *                              specifying sound file names.          * *                              Also incorporated user interface for  * *                              writing AIFF compatible sound files.  * * 27jun91  dpwe (Aware)        Added musicout and &sample_frames as  * *                              args to out_fifo (were glob refs).    * *                              Used new 'frame_params' struct.       * *                              Clean,simplify, track clipped output  * *                              and total bits/frame received.        * * 7/10/91  Earle Jennings      changed to floats to FLOAT            * *10/ 1/91  S.I. Sudharsanan,   Ported to IBM AIX platform.           * *          Don H. Lee,                                               * *          Peter W. Farrett                                          * *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   * *                              newly introduced functions are        * *                              buffer_CRC and recover_CRC_error      * *                              Additions and revisions are marked    * *                              with "dhl" for clarity                * * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   * *                              important fixes involved changing     * *                              16-bit ints to long or unsigned in    * *                              bit alloc routines for quant of 65535 * *                              and passing proper function args.     * *                              Removed "Other Joint Stereo" option   * *                              and made bitrate be total channel     * *                              bitrate, irrespective of the mode.    * *                              Fixed many small bugs & reorganized.  * ********************************************************************** *                                                                    * *                                                                    * *  MPEG/audio Phase 2 coding/decoding multichannel                   * *                                                                    * *  Version 1.0                                                       * *                                                                    * *  7/27/93        Susanne Ritscher,  IRT Munich                      * *                                                                    * *                  thanks to                                         * *                  Ralf Schwalbe,    Telekom FTZ Berlin              * *                  Heiko Purnhagen,  Uni Hannover                    * *                                                                    * *  Version 2.0                                                       * *                                                                    * *  8/27/93        Susanne Ritscher, IRT Munich                       * *                 Channel-Switching is working                       * *                                                                    * *  Version 2.1                                                       * *                                                                    * *  9/1/93         Susanne Ritscher,  IRT Munich                      * *                 all channels normalized                            * *                                                                    * *  Version 3.0                                                       * *                                                                    * *  06/16/94       Ralf Schwalbe, Telekom FTZ Berlin                  * *                 all sources and variables adapted due to MPEG-2 -  * *                 DIS from March 1994                                * *                  - dematrix and denormalize procedure              * *                  - new tc - allocation (0-7)                       * *                  - some new structures and variables as a basis    * *                    for further decoding modes                      * ********************************************************************** *								      * *  Version 1.0                                                       * *                                                                    * *  11/04/94       Ralf Schwalbe,  Telekom FTZ Berlin                 * *                  - decoding tc-allocation                          * *                  - some new subroutines, globale variables and     * *                    structures (important to handle the ext. bitst.)* *                  - changed all functions to ANSI-C funktion header * *		    - corrected some bugs to decode bitstreams > 512kB* *								      * *  Version 1.1                                                       * *                                                                    * *  12/07/94       Ralf Schwalbe,  Telekom FTZ Berlin                 * *                  - decoding extension bitstream                    * *                                                                    * *  Version 1.1.1                                                     * *                 Ralf Schwalbe, Telekom FTZ Berlin                  * *                  - fixed some bugs                                 * *                                                                    * *  Version 1.2                                                       * *                                                                    * *  6/21/95       Ralf Schwalbe, Deutsche Telekom FTZ Berlin          * *            	    - decoding dynamic crosstalk                      * *                  - decoding phantom center                         *  *                  - decoding MPEG1 compatible part only (stereo)    * *                  - corrected some settings and bugs                * *                                                                    *  *  7/12/95	  Ralf Schwalbe, Deutsche Telekom FTZ Berlin          * *		    - corrected dynamic crosstalk 		      * *		    - 3/2,3/1,3/0,2/1, channel configurations         * *                    are working                                     * *		  						      * * 10/31/95	  Ralf Schwalbe, Deutsche Telekom FTZ Berlin	      * *		    - decoding of LFE-channel is working  	      * *		    - corrected any settings and bugs		      * *		    - corrected table-switch for channel mode < 3/2   * *		      and tc-allocation / dyn-crosstalk		      * *		    - still a problem with compl. bitstream 18/19     * *								      *	 * 01/12/96	  Ralf Schwalbe, Deutsche Telekom TZ Darmstadt	      * *		    - decoder prediction installed		      * *		    - problem with compl. bitstream 19 solved,        * *                                                                    *          *  Version 2.0                                                       * *                                                                    * * 01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven    * *		    - simultaneous use of tc allocation and dynamic   * *		      crosstalk working for all configurations	      * *		    - prediction working for all configurations	      * *		    - layer 1 MC working			      * *		    - variable bit rate and extension bitstreams      * *		    - fully compliant to 13818-3.2                    * *                                                                    *				      *		     **********************************************************************//********************************************************************** *                                                                    * *  06/06/95       Yeon Bae Thomas Kim,  Samsung AIT                  * *                 ancillary data is working                          * *								      * **********************************************************************/ /*********************************************************************/#include        "common.h"#include        "decoder.h"/***************************************************************/*/* This module contains the core of the decoder ie all the/* computational routines. (Layer I and II only)/* Functions are common to both layer unless/* otherwise specified./*/***************************************************************//*****************************************************************/*/* The following routines decode the system information/*/****************************************************************//************************* Layer II  ****************************/void decode_info(Bit_stream *bs,		 frame_params *fr_ps){   layer *hdr = fr_ps->header;   hdr->version = get1bit (bs);   hdr->lay = 4 - getbits (bs, 2);   hdr->error_protection = !get1bit (bs); /* error protect. TRUE/FALSE */   hdr->bitrate_index = getbits (bs, 4);   hdr->sampling_frequency = getbits (bs, 2);   hdr->padding = get1bit (bs);   hdr->extension = get1bit (bs);   hdr->mode = getbits (bs, 2);   hdr->mode_ext = getbits (bs, 2);   hdr->copyright = get1bit (bs);   hdr->original = get1bit (bs);   hdr->emphasis = getbits (bs, 2);}/**********************************************************************//*																	  *//*  7.7.93 Susanne Ritscher Systeminformation for multi-channel       *//* 27.5.94 Ralf Schwalbe    Systeminformation and names due to		  *//*					MPEG 2 DIS from March 1994  */					                        /*								*//**********************************************************************/void mc_header(Bit_stream *bs,	       frame_params *fr_ps){   layer *hdr = fr_ps->header;   hdr->ext_bit_stream_present = get1bit (bs);   if( hdr->ext_bit_stream_present == 1)	hdr->n_ad_bytes =  getbits (bs, 8);   hdr->center = getbits (bs, 2);   hdr->surround = getbits (bs, 2);   hdr->lfe = get1bit (bs);   hdr->audio_mix = get1bit (bs);     /* large or small room  R.S. */   hdr->dematrix_procedure = getbits (bs, 2);   hdr->no_of_multi_lingual_ch = getbits (bs, 3);   hdr->multi_lingual_fs = get1bit (bs);   hdr->multi_lingual_layer = get1bit (bs);   hdr->copyright_ident_bit = get1bit (bs);   hdr->copyright_ident_start = get1bit (bs);}/* R.S. prediction table MPEG-2 IS November, 1995 *//* FdB  prediction table MPEG-2 CD 13818-3.2 March, 1996 */int pred_coef_table[6][16] = {{6,4,4,4,2,2,2,0,2,2,2,0,0,0,0,0},			      {4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},			      {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},			      {4,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0},			      {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},			      {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};void mc_composite_status_info(Bit_stream *bs,			      frame_params *fr_ps, int tca_log, int dynx_log){   layer *hdr = fr_ps->header;   int sbgr, j, pci;   hdr->tc_sbgr_select = get1bit (bs);   hdr->dyn_cross_on = get1bit (bs);   hdr->mc_prediction_on = get1bit (bs);   if(hdr->tc_sbgr_select == 1)   {	hdr->tc_allocation = getbits (bs, fr_ps->alloc_bits);	/* tc_allocation is valid for all sbgr R.S. */	for(sbgr = 0; sbgr < 12; sbgr++)   		hdr->tc_alloc[sbgr] = hdr->tc_allocation;   }   else   {	hdr->tc_allocation = 0;	for(sbgr = 0; sbgr < 12; sbgr++)		hdr->tc_alloc[sbgr] = getbits (bs, fr_ps->alloc_bits);   }   if (tca_log)      for (sbgr = 0; sbgr < 12; sbgr++)	 printf ("tc_alloc[ %2d ] = %2d\n", sbgr, hdr->tc_alloc[sbgr]);   if( hdr->dyn_cross_on == 1)   {		hdr->dyn_cross_LR = get1bit (bs);		for(sbgr = 0; sbgr < 12; sbgr++)		{			hdr->dyn_cross_mode[sbgr] = getbits (bs, fr_ps->dyn_cross_bits);			/* 960816 FdB dyn_second_stereo added */			if (hdr->surround == 3)				hdr->dyn_second_stereo[sbgr] = get1bit (bs);		}   }   else   {		hdr->dyn_cross_LR = 0;		for(sbgr = 0; sbgr < 12; sbgr++)			hdr->dyn_cross_mode[sbgr] = 0;   }   if (dynx_log)      for (sbgr = 0; sbgr < 12; sbgr++)	 printf ("dynx_mod[ %2d ] = %2d\n", sbgr, hdr->dyn_cross_mode[sbgr]);   if( hdr->mc_prediction_on == 1)   {	  for(sbgr = 0; sbgr < 8; sbgr++) 	  {  		if( (hdr->mc_prediction[sbgr] = get1bit (bs)) == 1 )		{/* R.S. read from npredcoef-table max number of coef. for 3/2 configuration *//* and then the predsi info -> 0    : no prediction    *//*			    -> 1..3 : 1..3 coefficient */		    for(pci=0; pci< pred_coef_table[fr_ps->pred_mode][hdr->dyn_cross_mode[sbgr]] ; pci++)			hdr->mc_predsi[sbgr][pci] = getbits (bs, 2);		}	  }   }}#ifdef Augmentation_7chvoid mc_aug_composite_status_info (Bit_stream *bs, frame_params *fr_ps, int tca_log, int dynx_log){   layer *hdr = fr_ps->header;   int sbgr, j, pci;   hdr->aug_mtx_proc = getbits (bs, 2);   hdr->aug_dyn_cross_on = get1bit (bs);   hdr->aug_future_ext = get1bit (bs);   if(hdr->aug_mtx_proc == 0)   {	for(sbgr = 0; sbgr < 12; sbgr++)   		hdr->tc_aug_alloc[sbgr] = getbits (bs, 3);   }   else if(hdr->aug_mtx_proc == 1)   {	for(sbgr = 0; sbgr < 12; sbgr++)		hdr->tc_aug_alloc[sbgr] = getbits (bs, 2);   }   else	for(sbgr = 0; sbgr < 12; sbgr++)		hdr->tc_aug_alloc[sbgr] = 0;   if (tca_log)      for (sbgr = 0; sbgr < 12; sbgr++)	 printf ("tc_aug_alloc[ %2d ] = %2d\n", sbgr, hdr->tc_aug_alloc[sbgr]);   if( hdr->aug_dyn_cross_on == 1)   {	for(sbgr = 0; sbgr < 12; sbgr++)		hdr->dyn_cross_aug_mode[sbgr] = getbits (bs, 5);   }   else	for(sbgr = 0; sbgr < 12; sbgr++)		hdr->dyn_cross_aug_mode[sbgr] = 0;   if (dynx_log)      for (sbgr = 0; sbgr < 12; sbgr++)	 printf ("dynx_aug_mod[ %2d ] = %2d\n", sbgr, hdr->dyn_cross_aug_mode[sbgr]);}#endif/*******************************************************************/*/* The bit allocation information is decoded. Layer I/* has 4 bit per subband whereas Layer II is Ws and bit rate/* dependent./*/********************************************************************/void I_decode_bitalloc (Bit_stream   *bs,			frame_params *fr_ps,			unsigned int bit_alloc[7][SBLIMIT],				int	     bits_log){   int i,j;   int stereo  = fr_ps->stereo;   int sblimit = fr_ps->sblimit;   int jsbound = fr_ps->jsbound;   int b;   for (i=0;i<jsbound;i++)      for (j=0;j<stereo;j++)	 bit_alloc[j][i] = getbits (bs, 4);   for (i=jsbound; i<SBLIMIT; i++)   {      b = getbits (bs, 4);      for (j=0; j<stereo; j++)	 bit_alloc[j][i] = b;   }

⌨️ 快捷键说明

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