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

📄 common.c

📁 MPEG 2的音频编码软件。喜欢多媒体的开发人员可以看看。
💻 C
📖 第 1 页 / 共 5 页
字号:
/**********************************************************************
 * ISO MPEG Audio Subgroup Software Simulation Group (1996)
 * ISO 13818-3 MPEG-2 Audio Multichannel Encoder
 *
 * $Id: common.c 1.8 1996/02/12 07:13:35 rowlands Exp $
 *
 * $Log: common.c $
 * Revision 1.8  1996/02/12 07:13:35  rowlands
 * Release following Munich meeting
 *
 * Revision 1.5.2.1  1995/11/06  04:19:12  rowlands
 * Received from Uwe Felderhoff (IRT)
 *
 * Revision 1.6.1  1995/08/14  07:49:33  tenkate
 * ML-LSF added Warner ten Kate 7/8/95 (Philips)
 * allocation table alloc_4 read to allocml
 *
 * Revision 1.6  1995/07/31  07:44:27  tenkate
 * void hdr_to_frps updated for phantom coding, 25/07/95 WtK
 *
 * Revision 1.3.2.1  1995/06/16  03:46:42  rowlands
 * Input from Susanne Ritscher (IRT)
 *
 * Revision 1.3.3.1  1995/06/16  08:25:11  rowlands
 * Input from Sang Wook Kim (Samsung AIT)
 *
 **********************************************************************/

/**********************************************************************
 *   date   programmers         comment                               *
 * 2/25/91  Doulas Wong,        start of version 1.0 records          *
 *          Davis Pan                                                 *
 * 5/10/91  W. Joseph Carter    Created this file for all common      *
 *                              functions and global variables.       *
 *                              Ported to Macintosh and Unix.         *
 *                              Added Jean-Georges Fritsch's          *
 *                              "bitstream.c" package.                *
 *                              Added routines to handle AIFF PCM     *
 *                              sound files.                          *
 *                              Added "mem_alloc()" and "mem_free()"  *
 *                              routines for memory allocation        *
 *                              portability.                          *
 *                              Added routines to convert between     *
 *                              Apple SANE extended floating point    *
 *                              format and IEEE double precision      *
 *                              floating point format.  For AIFF.     *
 * 02jul91 dpwe (Aware Inc)     Moved allocation table input here;    *
 *                              Tables read from subdir TABLES_PATH.  *
 *                              Added some debug printout fns (Write*)*
 * 7/10/91 Earle Jennings       replacement of the one float by FLOAT *
 *                              port to MsDos from MacIntosh version  *
 * 8/ 5/91 Jean-Georges Fritsch fixed bug in open_bit_stream_r()      *
 *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        *
 *                              I_CRC_calc, II_CRC_calc and           *
 *                              update_CRC. Additions and revisions   *
 *                              are marked with dhl for clarity       *
 *10/18/91 Jean-Georges Fritsch fixed bug in update_CRC(),            *
 *                              II_CRC_calc() and I_CRC_calc()        *
 * 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.  *
 *3/20/92 Jean-Georges Fritsch  fixed bug in start-of-frame search    *
 *  8jul92 Susanne Ritscher     MS-DOS, MSC 6.0 port fixes.           *
 * 19aug92 Soren H. Nielsen     Fixed bug in I_CRC_calc and in        *
 *                              II_CRC_calc. Added function: new_ext  *
 * 			        for better MS-DOS compatability       *
 *26nov92 Susanne Ritscher 	  AIFF for MS-DOS 		      *
 **********************************************************************
 *                                                                    *
 *                                                                    *
 *  MPEG/audio Phase 2 coding/decoding multichannel                   *
 *                                                                    *
 *  7/27/93        Susanne Ritscher,  IRT Munich                      *
 *                                                                    *
 *  8/27/93        Susanne Ritscher, IRT Munich                       *
 *                 Channel-Switching is working                       *
 *  9/1/93         Susanne Ritscher,  IRT Munich                      *
 *                 all channels normalized                            *
 *  9/20/93        channel-switching is only performed at a           *
 *                 certain limit of TC_ALLOC dB, which is included    *
 *                 in encoder.h                                       *
 *                                                                    *
 *  Version 1.0                                                       *
 *                                                                    *
 *  07/12/94       Susanne Ritscher,  IRT Munich                      *
 *                                                                    *
 *  Version 1.1                                                       *
 *                                                                    *
 *  02/23/95	   Susanne Ritscher,  IRT Munich                      *
 *                 corrected some bugs                                *
 *                 extension bitstream is working                     *
 *                                                                    *
 *  Version 2.0                                                       *
 *                                                                    *
 *  01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven   *
 *		    - dynamic crosstalk working for all configurations*
 *		    - prediction working for all configurations	      *
 *		    - extension bitstream fixed			      *
 *		    - fully compliant to DIS 13818-3.2                *
 *                                                                    *				      *		    
 **********************************************************************/
/***********************************************************************
 *                                                                    *
 *  06/06/95	   Sang Wook Kim,  Samsung AIT                        *
 *                 corrected some bugs                                *
 *                                                                    *
 **********************************************************************/
/***********************************************************************
*
*  Global Include Files
*
***********************************************************************/

#include        "common.h"

/*
#undef	PrintCRCDebug
#undef	PrintBitDebug
*/
#ifdef  MACINTOSH

#include        <SANE.h>
#include        <pascal.h>

#endif

#include <ctype.h>

/***********************************************************************
*
*  Global Variable Definitions
*
***********************************************************************/

char *mode_names[4] = { "stereo", "j-stereo", "dual-ch", "single-ch" };
char *layer_names[3] = { "I", "II", "III" };

double  s_freq[4] = {44.1, 48, 32, 0};

int	  bitrate[3][16] = {
			 {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,0},
			 {0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,0},
			 {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}
        };

double /*far*/ multiple[64] = {
2.00000000000000, 1.58740105196820, 1.25992104989487,
1.00000000000000, 0.79370052598410, 0.62996052494744, 0.50000000000000,
0.39685026299205, 0.31498026247372, 0.25000000000000, 0.19842513149602,
0.15749013123686, 0.12500000000000, 0.09921256574801, 0.07874506561843,
0.06250000000000, 0.04960628287401, 0.03937253280921, 0.03125000000000,
0.02480314143700, 0.01968626640461, 0.01562500000000, 0.01240157071850,
0.00984313320230, 0.00781250000000, 0.00620078535925, 0.00492156660115,
0.00390625000000, 0.00310039267963, 0.00246078330058, 0.00195312500000,
0.00155019633981, 0.00123039165029, 0.00097656250000, 0.00077509816991,
0.00061519582514, 0.00048828125000, 0.00038754908495, 0.00030759791257,
0.00024414062500, 0.00019377454248, 0.00015379895629, 0.00012207031250,
0.00009688727124, 0.00007689947814, 0.00006103515625, 0.00004844363562,
0.00003844973907, 0.00003051757813, 0.00002422181781, 0.00001922486954,
0.00001525878906, 0.00001211090890, 0.00000961243477, 0.00000762939453,
0.00000605545445, 0.00000480621738, 0.00000381469727, 0.00000302772723,
0.00000240310869, 0.00000190734863, 0.00000151386361, 0.00000120155435,
1E-20
};

int sbgrp[32] = { 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 10, 10,
		 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11};
int sb_groups[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 15, 26 /*31*/};


int transmission_channel7[8][2] = {	/* for 5/2 config */
		{10, 11}, 
		{ 7, 11}, 
		{10,  8}, 
		{ 7,  8}, 
		{10,  9}, 
		{ 7,  9}, 
		{ 9, 11}, 
		{ 9,  8}, 
		};		   

int transmission_channel5[8][5] = {	/* for 3/2 config */
                   {0, 1, 2, 3, 4}, 
		   {0, 1, 5, 3, 4}, 
		   {0, 1, 6, 3, 4}, 
		   {0, 1, 2, 5, 4}, 
		   {0, 1, 2, 3, 6}, 
		   {0, 1, 2, 5, 6}, 
		   {0, 1, 6, 5, 4}, 
		   {0, 1, 5, 3, 6}, 
		   };

int transmission_channel4a[6][4] = {	/* for 3/1 config */
                   {0, 1, 2, 3}, 
		   {0, 1, 5, 3}, 
		   {0, 1, 6, 3}, 
		   {0, 1, 2, 5}, 
		   {0, 1, 2, 6}, 
		   {0, 1, 5, 6}, 
		   };

int transmission_channel4b[4][4] = {	/* for 2/2 config */
                   {0, 1, 2, 3}, 
		   {0, 1, 5, 3}, 
		   {0, 1, 2, 6}, 
		   {0, 1, 5, 6}, 
		   };

int transmission_channel3[3][5] = {	/* for 3/0 (+ 2/0) and 2/1 config's */
                   {0, 1, 2, 3, 4}, 
		   {0, 1, 5, 3, 4}, 
		   {0, 1, 6, 3, 4}, 
		   };

int no_channel[8][2] = {
		{5, 6}, 
		{2, 6}, 
		{5, 2}, 
		{3, 6}, 
		{5, 4}, 
		{3, 4}, 
		{3, 2}, 
		{2, 4}, 
		};		   


int n_pred_coef[16]; 	
int n_pred_coef4[16]  = { 6, 4, 4, 4, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0 }; 	
int n_pred_coef3[16] = { 4, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 	
int n_pred_coef1[16] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 	

int dyn_bbal5[19][12] = {		/* for 5/2 config */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    };
int dyn_bbal4[15][12] = {		/* for 3/2 config */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {12, 12, 12, 12, 12, 12, 12, 12, 24, 21, 36, 87}, 		   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    };
int dyn_bbal4PhC[15][12] = {		/* for 3/2 config in case of Phantom center coding */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 0, 0},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 12, 29},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 12, 29},     	   
    {12, 12, 12, 12, 12, 12, 12, 12, 24, 21, 24, 58}, 		   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 12, 29},     	   
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    };
int dyn_bbal3[5][12] = {		/* for 3/1 and 2/2 config */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 24, 58},     	   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    };
int dyn_bbal3PhC[5][12] = {		/* for 3/1 config in case of Phantom center coding */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 0, 0},     
    {8, 8, 8, 8, 8, 8, 8, 8, 16, 14, 12, 29},     	   
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    };
int dyn_bbal1[2][12] = {		/* for 3/0 (+2/0) and 2/1 config */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 12, 29},     
    };
int dyn_bbal1PhC[2][12] = {		/* for 3/0 (+2/0) config in case of Phantom center coding */
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
    {4, 4, 4, 4, 4, 4, 4, 4, 8, 7, 0, 0},     
    };


int dyn_ch5[19][2] = {	/* for 5/2 config */
    {1, 1}, 
    {1, 0}, 
    {1, 0}, 
    {1, 0}, 
    {1, 0}, 
    {0, 1}, 
    {0, 0}, 
    {0, 0}, 
    {0, 0}, 
    {0, 0}, 
    {0, 1}, 
    {0, 0}, 
    {0, 0}, 
    {0, 0}, 
    {0, 1}, 
    {0, 0}, 
    {0, 0}, 
    {0, 0}, 
    {0, 0}, 
   };    
 
int dyn_ch4[15][3] = {	/* for 3/2 config */
    {1, 1, 1}, 
    {1, 1, 0}, 
    {1, 0, 1}, 
    {0, 1, 1}, 
    {1, 0, 0}, 
    {0, 1, 0}, 
    {0, 0, 1}, 
    {0, 0, 0}, 
    {1, 1, 0}, 
    {1, 0, 1}, 
    {1, 1, 0}, 
    {1, 0, 0}, 
    {1, 0, 0}, 
    {0, 1, 0}, 
    {1, 0, 0}, 
   };    
 
int dyn_ch3[5][2] = {	/* for 3/1 and 2/2 config */
    {1, 1}, 
    {1, 0}, 
    {0, 1}, 
    {0, 0}, 
    {1, 0}, 
   };    
 
int dyn_ch1[2][3] = {	/* for 3/0 (+2/0) and 2/1 config */
    {1, 1, 1}, 
    {0, 1, 1}, 
   };    
 
int	T2[12], T3[12], T4[12], T5[12], T6[12];	
int	T2outof[12], T3outof[12], T4outof[12]; /* L0 or R0 */	
int	T2from[12], T3from[12], T4from[12];


/***********************************************************************
*
*  Global Function Definitions
*
***********************************************************************/

void program_information(void)
{
 printf("ISO MPEG Audio Subgroup Software Simulation Group (1996)\n");
 printf("ISO 13818-3 MPEG-2 Audio Multichannel Encoder\n");
 printf("%s\n", VERSION);
}

/* The system uses a variety of data files.  By opening them via this
   function, we can accommodate various locations. */

FILE *OpenTableFile(char *name)
{
char fulname[80];
char *envdir;
FILE *f;

     fulname[0] = '\0';

⌨️ 快捷键说明

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