MUSICOUT.C
上传用户:njqiyou
上传日期:2007-01-08
资源大小:574k
文件大小:50k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Multichannel Decoder
  4.  *
  5.  * $Id: musicout.c 1.11 1996/04/18 05:37:23 rowlands Exp $
  6.  *
  7.  * $Log: musicout.c $
  8.  * Revision 1.11  1996/04/18 05:37:23  rowlands
  9.  * Release following Florence meeting
  10.  *
  11.  * Revision 1.10  1996/02/12 07:13:06  rowlands
  12.  * Release following Munich meeting
  13.  *
  14.  * Revision 1.9.1.1  1996/01/20  17:28:45  rowlands
  15.  * Received from Ralf Schwalbe (Telekom FTZ) - includes prediction
  16.  *
  17.  * Revision 1.7.1.3  1995/08/14  08:13:37  tenkate
  18.  * ML-LSF added Warner ten Kate 7/8/95 (Philips)
  19.  * debugging
  20.  * change "alloc" and "sblimit" into "alloc_ml" and
  21.  * "sblimit_ml" where appropriate.
  22.  * adapt sample-loops to 6 or 12 depending on half or full ML rate.
  23.  *
  24.  * Revision 1.7.1.1  1995/07/14  06:12:46  rowlands
  25.  * Updated dynamic crosstalk from FTZ: revision FTZ_03
  26.  *
  27.  * Revision 1.3.3.1  1995/06/16  08:00:46  rowlands
  28.  * Input from Sang Wook Kim (Samsung AIT)
  29.  *
  30.  * Revision 1.3.1.1  1995/06/14  04:36:30  rowlands
  31.  * Added support for dematrixing procedure 2.
  32.  *
  33.  **********************************************************************/
  34. /**********************************************************************
  35.  *   date   programmers                comment                        *
  36.  * 2/25/91  Douglas Wong        start of version 1.0 records          *
  37.  * 3/06/91  Douglas Wong        rename setup.h to dedef.h             *
  38.  *                              removed extraneous variables          *
  39.  *                              removed window_samples (now part of   *
  40.  *                              filter_samples)                       *
  41.  * 3/07/91  Davis Pan           changed output file to "codmusic"     *
  42.  * 5/10/91  Vish (PRISM)        Ported to Macintosh and Unix.         *
  43.  *                              Incorporated new "out_fifo()" which   *
  44.  *                              writes out last incomplete buffer.    *
  45.  *                              Incorporated all AIFF routines which  *
  46.  *                              are also compatible with SUN.         *
  47.  *                              Incorporated user interface for       *
  48.  *                              specifying sound file names.          *
  49.  *                              Also incorporated user interface for  *
  50.  *                              writing AIFF compatible sound files.  *
  51.  * 27jun91  dpwe (Aware)        Added musicout and &sample_frames as  *
  52.  *                              args to out_fifo (were glob refs).    *
  53.  *                              Used new 'frame_params' struct.       *
  54.  *                              Clean,simplify, track clipped output  *
  55.  *                              and total bits/frame received.        *
  56.  * 7/10/91  Earle Jennings      changed to floats to FLOAT            *
  57.  *10/ 1/91  S.I. Sudharsanan,   Ported to IBM AIX platform.           *
  58.  *          Don H. Lee,                                               *
  59.  *          Peter W. Farrett                                          *
  60.  *10/ 3/91  Don H. Lee          implemented CRC-16 error protection   *
  61.  *                              newly introduced functions are        *
  62.  *                              buffer_CRC and recover_CRC_error      *
  63.  *                              Additions and revisions are marked    *
  64.  *                              with "dhl" for clarity                *
  65.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  66.  *                              important fixes involved changing     *
  67.  *                              16-bit ints to long or unsigned in    *
  68.  *                              bit alloc routines for quant of 65535 *
  69.  *                              and passing proper function args.     *
  70.  *                              Removed "Other Joint Stereo" option   *
  71.  *                              and made bitrate be total channel     *
  72.  *                              bitrate, irrespective of the mode.    *
  73.  *                              Fixed many small bugs & reorganized.  *
  74.  **********************************************************************
  75.  *                                                                    *
  76.  *                                                                    *
  77.  *  MPEG/audio Phase 2 coding/decoding multichannel                   *
  78.  *                                                                    *
  79.  *  Version 1.0                                                       *
  80.  *                                                                    *
  81.  *  7/27/93        Susanne Ritscher,  IRT Munich                      *
  82.  *                                                                    *
  83.  *                  thanks to                                         *
  84.  *                  Ralf Schwalbe,    Telekom FTZ Berlin              *
  85.  *                  Heiko Purnhagen,  Uni Hannover                    *
  86.  *                                                                    *
  87.  *  Version 2.0                                                       *
  88.  *                                                                    *
  89.  *  8/27/93        Susanne Ritscher, IRT Munich                       *
  90.  *                 Channel-Switching is working                       *
  91.  *                                                                    *
  92.  *  Version 2.1                                                       *
  93.  *                                                                    *
  94.  *  9/1/93         Susanne Ritscher,  IRT Munich                      *
  95.  *                 all channels normalized                            *
  96.  *                                                                    *
  97.  *  Version 3.0                                                       *
  98.  *                                                                    *
  99.  *  06/16/94       Ralf Schwalbe, Telekom FTZ Berlin                  *
  100.  *                 all sources and variables adapted due to MPEG-2 -  *
  101.  *                 DIS from March 1994                                *
  102.  *                  - dematrix and denormalize procedure              *
  103.  *                  - new tc - allocation (0-7)                       *
  104.  *                  - some new structures and variables as a basis    *
  105.  *                    for further decoding modes                      *
  106.  **********************************************************************
  107.  *       *
  108.  *  Version 1.0                                                       *
  109.  *                                                                    *
  110.  *  11/04/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
  111.  *                  - decoding tc-allocation                          *
  112.  *                  - some new subroutines, globale variables and     *
  113.  *                    structures (important to handle the ext. bitst.)*
  114.  *                  - changed all functions to ANSI-C funktion header *
  115.  *     - corrected some bugs to decode bitstreams > 512kB*
  116.  *       *
  117.  *  Version 1.1                                                       *
  118.  *                                                                    *
  119.  *  12/07/94       Ralf Schwalbe,  Telekom FTZ Berlin                 *
  120.  *                  - decoding extension bitstream                    *
  121.  *                                                                    *
  122.  *  Version 1.1.1                                                     *
  123.  *                 Ralf Schwalbe, Telekom FTZ Berlin                  *
  124.  *                  - fixed some bugs                                 *
  125.  *                                                                    *
  126.  *  Version 1.2                                                       *
  127.  *                                                                    *
  128.  *  6/21/95       Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
  129.  *                 - decoding dynamic crosstalk                      *
  130.  *                  - decoding phantom center                         * 
  131.  *                  - decoding MPEG1 compatible part only (stereo)    *
  132.  *                  - corrected some settings and bugs                *
  133.  *        *
  134.  *  7/12/95   Ralf Schwalbe, Deutsche Telekom FTZ Berlin          *
  135.  *     - corrected dynamic crosstalk        *
  136.  *     - 3/2,3/1,3/0,2/1, channel configurations         *
  137.  *                    are working                                     *
  138.  *          *
  139.  * 10/31/95   Ralf Schwalbe, Deutsche Telekom FTZ Berlin       *
  140.  *     - decoding of LFE-channel is working         *
  141.  *     - corrected any settings and bugs       *
  142.  *     - corrected table-switch for channel mode < 3/2   *
  143.  *       and tc-allocation / dyn-crosstalk       *
  144.  *     - still a problem with compl. bitstream 18/19     *
  145.  * 01/12/96   Ralf Schwalbe, Deutsche Telekom TZ Darmstadt       *
  146.  *     - decoder prediction installed       *
  147.  *     - problem with compl. bitstream 19 solved,        *
  148.  * 03/27/96   Ralf Schwalbe, Deutsche Telekom TZ Darmstadt        *
  149.  *     - Multilingual mode adapted for max. 7 channels   *
  150.  *                                                                    *       *     
  151.  *  Version 2.0                                                       *
  152.  *                                                                    *
  153.  * 01/28/97       Frans de Bont, Philips Sound & Vision, Eindhoven    *
  154.  *     - simultaneous use of tc allocation and dynamic   *
  155.  *       crosstalk working for all configurations       *
  156.  *     - prediction working for all configurations       *
  157.  *     - layer 1 MC working       *
  158.  *     - variable bit rate and extension bitstreams      *
  159.  *     - fully compliant to 13818-3.2                    *
  160.  *                                                                    *       *     
  161.  **********************************************************************/
  162. /**********************************************************************
  163.  *                                                                    *
  164.  *  06/06/95       Yeon Bae Thomas Kim,  Samsung AIT                  *
  165.  *                 ancillary data is working                          *
  166.  *       *
  167.  *  06/06/95       Sang Wook Kim,  Samsung AIT                        *
  168.  *                 corrected some bugs                                *
  169.  *       *
  170.  **********************************************************************/
  171. #include        "common.h"
  172. #include        "decoder.h"
  173. /********************************************************************
  174. *
  175. *        This part contains the MPEG I / II decoder for Layers II.
  176. *
  177. *        Core of the Layer II decoder.  Default layer is Layer II.
  178. *
  179. *********************************************************************/
  180. /* Global variable definitions for "musicout.c" */
  181. char     *programName;
  182. int     Frame_Bits,Bitrate;
  183. double    S_freq;
  184. /* Implementations */
  185. main (int argc, char **argv)  /* R.S. 7 channels for ML */
  186. {
  187. typedef long PCM[7][3][SBLIMIT];
  188. PCM  *pcm_sample;
  189. PCM  *pcm_sample_ml; /* 10/03/1995 JMZ Multilingual*/
  190. typedef unsigned int SAM[7][3][SBLIMIT];
  191. SAM  *sample;
  192. SAM  *sample_ml; /* 10/03/1995 JMZ Multilingual*/
  193. typedef double FRA[7][SBLIMIT][3][12]; /* 7.10.93 R.S. mem - alloc for DOS */ 
  194. FRA  *fraction;
  195. FRA  *fraction_ml; /*JMZ 09/03/1995 Multilingual */
  196. typedef double FRA_HELP[12][7][3][SBLIMIT]; /* 10/03/1995 JMZ Multilingual*/
  197. FRA_HELP *fraction_help;
  198. FRA_HELP *fraction_help_ml;
  199. typedef double FRA_BUF[2][8][36+PREDDEL];   
  200. FRA_BUF  *pred_buf; 
  201. typedef double VE[7][HAN_SIZE];
  202. VE  *w;
  203. frame_params      fr_ps;
  204. layer    info;
  205. Bit_stream        bs_mpg, bs_ext, bs_mc;
  206. FILE              *musicout, *lfe;
  207. FILE              *musicout_ml; /* 10/03/1995 JMZ Multilingual*/
  208. unsigned long     sample_frames;
  209. unsigned long     sample_frames_ml;
  210. int   i,jj, j, k, ii, stereo, done=FALSE, clip, sync,f;
  211. int               error_protection, crc_check = 1;
  212. int   crc_error_count, total_error_count;
  213. int               crc_error_count_mc, total_error_count_mc;
  214. #ifdef Augmentation_7ch
  215. int               crc_error_count_aug, total_error_count_aug;
  216. #endif
  217. unsigned int      old_crc, new_crc;
  218. unsigned int      I_bit_alloc[3][7][SBLIMIT];
  219. unsigned int      bit_alloc[7][SBLIMIT], scfsi[7][SBLIMIT],
  220.   scale_index[7][3][SBLIMIT]; 
  221. unsigned int      bit_alloc_ml[7][SBLIMIT], scfsi_ml[7][SBLIMIT],
  222.   scale_index_ml[7][3][SBLIMIT]; /* 09/03/1995 JMZ Multilingual */
  223. unsigned long     bitsPerSlot, samplesPerFrame;
  224. IFF_AIFF          pcm_aiff_data;
  225. char           encoded_file_name[MAX_NAME_SIZE];
  226. char           encoded_file_name1[MAX_NAME_SIZE]; /* 8/11/92.sr*/
  227. char              decoded_file_name[MAX_NAME_SIZE];
  228. char              decoded_file_name_ml[MAX_NAME_SIZE];/* 10/03/1995 JMZ Multilingual*/
  229. char   ext_bitstream_name[MAX_NAME_SIZE];
  230. char   frame_name[MAX_NAME_SIZE];
  231. char   lfe_file_name[MAX_NAME_SIZE];
  232. char              t[50];
  233. int               need_aiff;
  234. int   l, m, print_out = 0, ml =0;
  235. int   ch_start,lfe_init = 1;
  236. int   tca_log = 0, dynx_log = 0, bits_log = 0, rate_log = 0, scfsi_log = 0, any_log = 0;
  237. short int   lfe_tmp[12];
  238. unsigned int   sym_sample_ml[12][7][3][SBLIMIT]; /* 18/03/1996 FDB Multilingual*/
  239. int   part, layer_I_frames;
  240. int   mpeg = 2; /* R.S. mpeg default for mc */
  241. int   channels=2, mc_channel=0;
  242. unsigned long   frameNum = 0L;
  243. unsigned long   frameMod = 1L;
  244. unsigned long   frameBits;
  245. /*****************************************************************************/
  246. int hi, hu, ho;
  247. FILE *fp1;
  248. FILE *fp2;
  249. FILE *fp3;
  250. FILE *fp4;
  251. FILE *fp5;
  252. FILE *fp6;
  253. /******************************************************************************/
  254. #ifdef  MACINTOSH
  255. console_options.nrows = MAC_WINDOW_SIZE;
  256. argc = ccommand(&argv);
  257. #endif
  258. /* Most large variables are declared dynamically to ensure
  259.    compatibility with smaller machines */
  260. pcm_sample = (PCM *) mem_alloc((long) sizeof(PCM), "PCM Samp");
  261. pcm_sample_ml = (PCM *) mem_alloc((long) sizeof(PCM), "PCM Samp");
  262. sample     = (SAM *) mem_alloc((long) sizeof(SAM), "Sample");
  263. sample_ml   = (SAM *) mem_alloc((long) sizeof(SAM), "Sample");
  264. fraction   = (FRA *) mem_alloc((long) sizeof(FRA), "fraction");  /* R.S. */
  265. fraction_ml   = (FRA *) mem_alloc((long) sizeof(FRA), "fraction");  /* R.S. */
  266. fraction_help = (FRA_HELP *) mem_alloc((long) sizeof(FRA_HELP), "fraction");
  267. fraction_help_ml = (FRA_HELP *) mem_alloc((long) sizeof(FRA_HELP), "fraction");
  268. pred_buf  = (FRA_BUF *) mem_alloc((long) sizeof(FRA_BUF), "pred_buf");
  269. w = (VE *) mem_alloc((long) sizeof(VE), "w");
  270. bs_mpg.header_size = 0;
  271. bs_mpg.bits = (unsigned char *) mem_alloc ((long) 13824, "MPG Bits");
  272. bs_ext.header_size = 0;
  273. bs_ext.bits = (unsigned char *) mem_alloc ((long) 16376, "EXT Bits");
  274. bs_mc.bits  = (unsigned char *) mem_alloc ((long) 30208, "MC Bits");
  275. fr_ps.header = &info;
  276. fr_ps.bs_mpg = &bs_mpg;
  277. fr_ps.bs_ext = &bs_ext;
  278. fr_ps.bs_mc  = &bs_mc;
  279. fr_ps.tab_num = -1;                /* no table loaded */
  280. fr_ps.tab_num_mc = -1;                /* no table loaded */
  281. fr_ps.tab_num_ml = -1;
  282. fr_ps.alloc = NULL;
  283. fr_ps.alloc_mc = NULL;
  284. fr_ps.alloc_ml = NULL;
  285. info.mode_ext = 0;
  286. info.version = MPEG_AUDIO_ID;
  287. info.bitrate_index = 0;
  288. info.lfe = 0;         /* no low frequency effect channel present! */
  289. info.no_of_multi_lingual_ch = 0;
  290. info.multi_lingual_fs = 0;
  291. info.multi_lingual_layer = 0;
  292. info.ext_bit_stream_present = 0;
  293. info.ext_length = 0;
  294. info.n_ad_bytes = 0;    /* 7.12.94 R.S. */
  295. info.lfe = 0;
  296. for (i=0;i<HAN_SIZE;i++) for (j=0;j<5;j++) (*w)[j][i] = 0.0;
  297. program_information();
  298. programName = argv[0];
  299. if(argc==1)
  300. {        /* no command line args -> interact */
  301.    do
  302.    {
  303.   printf ("Enter encoded file name <required>: ");
  304.   gets (encoded_file_name);
  305.   f = strlen(encoded_file_name)-4;   /*cut off extension.8/11/92.sr*/
  306.   if (encoded_file_name[0] == NULL_CHAR)
  307.  printf ("Encoded file name is required. n");
  308.    } while (encoded_file_name[0] == NULL_CHAR);
  309.    printf (">>> Encoded file name is: %s n", encoded_file_name);
  310.    strcpy(encoded_file_name1, encoded_file_name);  /*8/11/92.sr*/
  311.    strcpy(&encoded_file_name1[f], DFLT_OPEXT_DEC);   /*.dec-extension.8/11/92.sr*/
  312.    printf ("Enter MPEG decoded file name <%s>: ", encoded_file_name1);
  313.    gets (decoded_file_name);
  314.    if (decoded_file_name[0] == NULL_CHAR)
  315. strcpy(decoded_file_name, encoded_file_name1);
  316. /* JMZ 10/03/1995 Multilingual */
  317.    printf (">>> MPEG decoded file name is: %s n", decoded_file_name);
  318.            /* encoded_file_name1 only for help */
  319.    strcpy(encoded_file_name1, encoded_file_name);
  320.    strcpy(&encoded_file_name1[f], DFLT_IPEXT_EXT);   /* .ext */
  321.    printf (">>> Enter MPEG 2 decoded extension filename <%s>: ", encoded_file_name1);
  322.    gets(ext_bitstream_name);
  323.    if( ext_bitstream_name[0] == NULL_CHAR )
  324. strcpy(ext_bitstream_name, encoded_file_name1);
  325.    printf("Extension bitstream <%s> will be decoded n",ext_bitstream_name);
  326.    /* 6/21/95 Ralf Schwalbe: stand a chance to decode MPEG1 compatible part */
  327.    if ((open_bit_stream_r (&bs_ext, ext_bitstream_name, BUFFER_SIZE)) == 0)
  328.    { 
  329. printf("No extension bitstream <%s> present n",ext_bitstream_name);
  330. printf("Do you want to decode an MPEG 2 bitstream ? (<y>/n) : ");
  331. gets(t);
  332.     if (*t == 'N' || *t == 'n') 
  333. {
  334. mpeg = 1;
  335. printf("An MPEG-1 Layer II bitstream will be decoded n");
  336. }
  337.     else
  338. {
  339. mpeg = 2;
  340. printf("An MPEG-2 Layer II bitstream will be decoded n");
  341. }
  342.    } 
  343.    printf("Do you wish to write an AIFF compatible sound file ? (<y>/n) : ");
  344.    gets(t);
  345.    if (*t == 'N' || *t == 'n') need_aiff = FALSE;
  346.    else                        need_aiff = TRUE;
  347.    if (need_aiff)
  348. printf(">>> An AIFF compatible sound file will be writtenn");
  349.    else printf(">>> A non-headered PCM sound file will be writtenn");
  350.    
  351.    printf("Do you want to print out all decoding information ? (y/<n>) :");
  352.    gets(t);
  353.    if( *t == 'y' || *t == 'Y' ) print_out = 1;
  354.    else        print_out = 0;
  355.    printf(
  356.   "Do you wish to exit (last chance before decoding) ? (y/<n>) : ");
  357.    gets(t);
  358.    if (*t == 'y' || *t == 'Y') exit(0);
  359. }
  360. else /************** interpret CL Args *****************/
  361. /* default: -write an AIFF file
  362.       -print encoded bitstream information  */
  363. {        
  364.    int i=0, err=0;
  365. #ifdef UNIX /* default values */
  366.    need_aiff = TRUE;
  367.    print_out = 0;   /* 10/31/95 Ralf Schwalbe: set print_out off in CL Args */
  368.    mpeg = 2;
  369. #else
  370.    need_aiff = FALSE;
  371. #endif
  372.    encoded_file_name[0] = NULL_CHAR;
  373.    decoded_file_name[0] = NULL_CHAR;
  374.    ext_bitstream_name[0] = NULL_CHAR;
  375.    while(++i<argc && err == 0)
  376.    {
  377.   char c, *token, *arg, *nextArg;
  378.   int  argUsed;
  379.   token = argv[i];
  380.   if(*token++ == '-')
  381.   {
  382.  if(i+1 < argc) nextArg = argv[i+1];
  383.  else           nextArg = "";
  384.  argUsed = 0;
  385.  while((c = *token++) != 0)
  386.  {
  387. if(*token /* NumericQ(token) */) arg = token;
  388. else                             arg = nextArg;
  389. switch(c)
  390. {
  391.    case 'a':  need_aiff = FALSE;
  392.       break;
  393.    case 'b':  bits_log = 1;
  394.       break;
  395.     
  396.    case 'd':  dynx_log = 1;
  397.       break;
  398.     
  399.    case 'h':  bs_mpg.header_size = 2304;
  400.       bs_ext.header_size = 2304;
  401.       break;
  402.    case 'i':  print_out = 1;
  403.       break;
  404.     
  405.    case 'm':  mpeg = 1;
  406.       break;
  407. #ifdef Augmentation_7ch
  408.    case 'n':  mpeg = 3;
  409.       break;
  410. #endif
  411.    case 'r':  rate_log = 1;
  412.       break;
  413.     
  414.    case 's':  scfsi_log = 1;
  415.       break;
  416.     
  417.    case 't':  tca_log = 1;
  418.       break;
  419.     
  420.    default:   fprintf(stderr,"%s: unrecognized option %cn",
  421.   programName, c);
  422.       err = 1;
  423.       break;
  424. }
  425. if(argUsed)
  426. {
  427. if(arg == token) token = ""; /* no more from token */
  428. else  ++i; /* skip arg we used */
  429. arg = ""; argUsed = 0;
  430. }
  431.  }
  432.   }
  433.   else
  434.   {
  435.      if (encoded_file_name[0] == NULL_CHAR)
  436.      {
  437. strcpy (encoded_file_name, argv[i]);
  438. f = strlen (encoded_file_name);
  439. strcpy (&encoded_file_name[f], DFLT_IPEXT_MPG);
  440. strcpy (ext_bitstream_name, encoded_file_name);
  441. strcpy (&ext_bitstream_name[f], DFLT_IPEXT_EXT);
  442.      }
  443.      else if (decoded_file_name[0] == NULL_CHAR)
  444.      {
  445. strcpy (decoded_file_name, argv[i]);
  446. f = strlen (decoded_file_name);
  447. strcpy (&decoded_file_name[f], DFLT_OPEXT_DEC);
  448.      }
  449.      else
  450.      {
  451. fprintf (stderr, "%s: excess arg %sn", programName, argv[i]);
  452. err = 1;
  453.      }
  454.   }
  455.        } /* end while argc */
  456.        if (bits_log || dynx_log || rate_log || scfsi_log || tca_log)
  457.   any_log = 1;
  458.        if (err || encoded_file_name[0] == NULL_CHAR)
  459.           usage ();  /* never returns */
  460.        if ((open_bit_stream_r (&bs_ext, ext_bitstream_name, BUFFER_SIZE)) == 0)
  461.        {
  462. printf("No extension bitstream <%s> present n", ext_bitstream_name);
  463. ext_bitstream_name[0] = NULL_CHAR;
  464.        }
  465.        
  466.        if (decoded_file_name[0] == NULL_CHAR)
  467.        {
  468.   f = strlen (encoded_file_name) - 4;
  469.   strcpy (decoded_file_name, encoded_file_name);
  470.   strcpy (&decoded_file_name[f], DFLT_OPEXT_DEC);
  471.        }
  472.     }  /* else arg-line end */
  473.     /* JMZ 10/03/1995 Multilingual */
  474.     strcpy(decoded_file_name_ml, decoded_file_name);
  475.     strcat(decoded_file_name_ml, DFLT_OPEXT_ML);
  476. /* report results of dialog / command line */
  477.     printf("Input file = '%s' nOutput file = '%s' ",
  478.    encoded_file_name, decoded_file_name);
  479.     if (mpeg >= 2 && ext_bitstream_name[0] != NULL_CHAR)
  480.      printf("Ext_bitstream = '%s'n", ext_bitstream_name);
  481.     if(mpeg == 1)
  482.     printf(">>>nA MPEG 1 Layer-1/2 bitstream will be decodedn");
  483.    else
  484. printf(">>>nA MPEG 2 Layer-1/2 bitstream will be decodedn");  
  485.   
  486.     if(need_aiff) printf("Output file written in AIFF formatn");
  487.     if ((musicout = fopen(decoded_file_name, "w+b")) == NULL)
  488.     {
  489.    fprintf (stderr, "Could not create "%s".n", decoded_file_name);
  490.    exit (1);
  491.     }
  492.     if (open_bit_stream_r (&bs_mpg, encoded_file_name, BUFFER_SIZE) == 0)
  493.     {
  494. fprintf (stderr, "Could not open "%s".n", encoded_file_name);
  495. exit (1);
  496.     }
  497.     if (need_aiff)
  498.   if (aiff_seek_to_sound_data(musicout) == -1)
  499.   {
  500.   fprintf (stderr, "Could not seek to PCM sound data in "%s".n",
  501.  decoded_file_name);
  502.   exit (1);
  503.    }
  504.     sample_frames = 0;
  505.     sample_frames_ml = 0;
  506.     total_error_count = total_error_count_mc = 0;
  507. #ifdef Augmentation_7ch
  508.     total_error_count_aug = 0;
  509. #endif
  510.     while (!end_bs (&bs_mpg))
  511.     {
  512.     /****************************************************************/
  513.     /*                                                              */
  514.     /*                  START OF FRAME LOOP                         */
  515.     /*                                                              */
  516.     /****************************************************************/
  517.    sync = seek_sync_mpg (&bs_mpg);
  518.    frameBits = bs_mpg.totbits;
  519.    if (!sync)
  520.    {
  521.   printf("nFrame cannot be located, end of input stream n");
  522.   done = TRUE;
  523.   /* finally write out the buffer */
  524.   out_fifo (*pcm_sample, 3, &fr_ps, done, musicout, &sample_frames, channels);
  525.   out_fifo_ml (*pcm_sample_ml, 3, &fr_ps, done, musicout_ml, &sample_frames_ml);
  526.   break;
  527.    }
  528.    info.lfe = 0;   /* R.S. ! */
  529.    decode_info (&bs_mpg, &fr_ps);
  530.    hdr_to_frps (&fr_ps);
  531.    stereo = fr_ps.stereo;
  532.    error_protection = info.error_protection;
  533.    crc_error_count = 0;
  534.    if (frameNum == 0) WriteHdr (&fr_ps, stdout);  /* printout layer/mode */
  535.    if (frameNum % frameMod == 0)
  536.    {
  537. fprintf(stderr, "{%4lu}r", frameNum++); fflush(stderr);
  538. if (frameNum / frameMod >= 100) frameMod *= 10;
  539.    }
  540.    else
  541. frameNum++;
  542.    Frame_Bits = 144*Bitrate/S_freq; 
  543.    if(info.padding)
  544. Frame_Bits++;    /* R.Schwalbe add a padding byte */
  545.    Frame_Bits*=8;  /* R.Schwalbe to get bits per frame *8 */
  546.    if (error_protection) buffer_CRC(&bs_mpg, &old_crc);
  547.           
  548.            /* 7/8/95 added message WtK 7/8/95 */
  549.    if (info.lay == 3)
  550.    {
  551.      fprintf (stderr, "nLayer = %d, not supported.nexit.nn",info.lay); break;
  552.      exit (1);
  553.    }
  554.    
  555.    bs_mc.totbits = bs_mc.curpos = 0;
  556.    if (info.lay == 1)
  557.    {
  558.       if (mpeg > 1)
  559.  layer_I_frames = 3;
  560.       else
  561.         layer_I_frames = 1;
  562.       for (part = 0; part < layer_I_frames; part++)
  563.       {
  564.  bitsPerSlot = 32;
  565.  samplesPerFrame = 384;
  566.  ch_start = 0;
  567.  channels = stereo;
  568.  if (part > 0)
  569.  {
  570.     sync = seek_sync_mpg (&bs_mpg);
  571.     frameBits = bs_mpg.totbits;
  572.     if (!sync)
  573.     {
  574.    fprintf (stderr, "2nd or 3th Frame cannot be located, end of input streamn");
  575.    exit (1);
  576.     }
  577.     decode_info (&bs_mpg, &fr_ps);
  578.     hdr_to_frps (&fr_ps);
  579.  
  580.     stereo = fr_ps.stereo;
  581.     error_protection = info.error_protection;
  582.     crc_error_count = 0;
  583.     Frame_Bits = 12*Bitrate/S_freq; 
  584.     if (info.padding)
  585.  Frame_Bits++;    /* R.Schwalbe add a padding byte */
  586.     Frame_Bits *=32;  /* R.Schwalbe to get bits per frame *32 */
  587.     if (error_protection)
  588.        buffer_CRC (&bs_mpg, &old_crc);
  589.           
  590.     /* 7/8/95 added message WtK 7/8/95 */
  591.     if (info.lay != 1)
  592.     {
  593.       fprintf (stderr, "Change of Layer = %d, not supported.nexit.nn", info.lay);
  594.       exit (1);
  595.     }
  596.  }
  597.  I_decode_bitalloc (&bs_mpg, &fr_ps, I_bit_alloc[part], bits_log);
  598.  I_decode_scale (&bs_mpg, &fr_ps, I_bit_alloc[part], scale_index, part, scfsi_log);
  599.  if (error_protection)
  600.  {
  601. I_CRC_calc (&fr_ps, I_bit_alloc[part], &new_crc);
  602. if (new_crc != old_crc)
  603. {
  604.    printf(" n ERROR in LAYER 1 - CRC! n");
  605.    crc_error_count++;
  606.    total_error_count++;
  607.    recover_CRC_error (*pcm_sample, crc_error_count,
  608.  &fr_ps, musicout, &sample_frames, channels);
  609. }
  610. else
  611.    crc_error_count = 0;
  612.  }
  613.  clip = 0;
  614.  for (i=0;i<12;i++)
  615.  {
  616. I_buffer_sample (&bs_mpg, &fr_ps, (*sample), I_bit_alloc[part]);
  617. if (!any_log)
  618. {
  619. I_dequantize_sample ((*sample), part, I_bit_alloc[part], *fraction, &fr_ps, &i);
  620. I_denormalize_sample (*fraction, scale_index, part, &fr_ps, &i);
  621. }
  622.  }   /* end of for loop */
  623.  if (mpeg > 1)
  624.  {
  625.     while (bs_mpg.curpos < bs_mpg.totbits-1)
  626.        bs_mc.bits[bs_mc.totbits++] = bs_mpg.bits[bs_mpg.curpos++];
  627.     if (part == 0)
  628.     {
  629.        mc_header (&bs_mc, &fr_ps);
  630.        mc_hdr_to_frps (&fr_ps);
  631.     }
  632.     bs_mc.totbits -= fr_ps.header->n_ad_bytes * 8;
  633.  }
  634.       }
  635.       if (mpeg > 1)
  636.       {
  637.  if (fr_ps.header->ext_bit_stream_present)
  638.  {
  639.     sync = seek_sync_ext (&bs_ext, &fr_ps);
  640.     frameBits += bs_ext.totbits;
  641.     if (!sync)
  642.     {
  643.        fprintf(stderr, "Extension frame cannot be located, end of input streamn");
  644.        exit (1);
  645.     }
  646.     while (bs_ext.curpos < bs_ext.totbits)
  647.        bs_mc.bits[bs_mc.totbits++] = bs_ext.bits[bs_ext.curpos++];
  648.  }
  649.  for (i=0; i < channels; i++)
  650.     for (j=0; j < SBLIMIT; j++)
  651.        if (I_bit_alloc[0][i][j] > 0)
  652.           bit_alloc[i][j] = I_bit_alloc[0][i][j];
  653.        else if (I_bit_alloc[1][i][j] > 0)
  654.           bit_alloc[i][j] = I_bit_alloc[1][i][j];
  655.        else if (I_bit_alloc[2][i][j] > 0)
  656.           bit_alloc[i][j] = I_bit_alloc[2][i][j];
  657.        else
  658.           bit_alloc[i][j] = 0;
  659.       }
  660.    }
  661.    else if (info.lay == 2 )
  662.    {
  663.       layer_I_frames = 3;
  664.       bitsPerSlot = 8;
  665.       samplesPerFrame = 1152;
  666.       ch_start = 0;
  667.       channels = stereo;
  668.       II_decode_bitalloc (&bs_mpg, &fr_ps, bit_alloc, bits_log);
  669.       II_decode_scale (&bs_mpg, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log);
  670.       if (error_protection)
  671.       {
  672.  II_CRC_calc(&fr_ps, bit_alloc, scfsi, &new_crc);
  673.  if (new_crc != old_crc)
  674.  {
  675.     printf(" n ERROR in LAYER 2 - CRC! n");
  676.     crc_error_count++;
  677.     total_error_count++;
  678.     recover_CRC_error (*pcm_sample, crc_error_count,
  679.        &fr_ps, musicout, &sample_frames, channels);
  680.  }
  681.  else crc_error_count = 0;
  682.       }
  683.       clip = 0;
  684.       for (i=0;i<12;i++)
  685.       {
  686.  II_buffer_sample (&bs_mpg, &fr_ps, (*sample), bit_alloc);
  687. if (!any_log)
  688. {
  689.  II_dequantize_sample ((*sample), bit_alloc, *fraction, &fr_ps, &i);
  690.  II_denormalize_sample (*fraction, scale_index, &fr_ps, i>>2, &i);
  691. }
  692.       }   /* end of for loop */
  693.       if (mpeg > 1)
  694.       {
  695.  while (bs_mpg.curpos < bs_mpg.totbits)
  696.     bs_mc.bits[bs_mc.totbits++] = bs_mpg.bits[bs_mpg.curpos++];
  697.  mc_header (&bs_mc, &fr_ps);
  698.  mc_hdr_to_frps (&fr_ps);
  699.  bs_mc.totbits -= fr_ps.header->n_ad_bytes * 8;
  700.  if (fr_ps.header->ext_bit_stream_present)
  701.  {
  702.     sync = seek_sync_ext (&bs_ext, &fr_ps);
  703.     frameBits += bs_ext.totbits;
  704.     if (!sync)
  705.     {
  706.        fprintf(stderr, "Extension frame cannot be located, end of input streamn");
  707.        exit (1);
  708.     }
  709.     while (bs_ext.curpos < bs_ext.totbits)
  710.        bs_mc.bits[bs_mc.totbits++] = bs_ext.bits[bs_ext.curpos++];
  711.  }
  712.       }
  713.    }
  714.    /**********************************************************/
  715.    /*      multichannel - decoding                */
  716.    /*             7.07.93 Susanne Ritscher                   */
  717.    /*            13.10.93 Ralf Schwalbe                      */
  718.    /*        30.05.94 Ralf Schwalbe    */
  719.    /**********************************************************/
  720.    if (rate_log)
  721.      printf ("frame: %5d bitrate: %8.3f kbpsn", frameNum, frameBits * S_freq / samplesPerFrame);
  722.    else if (mpeg >= 2)
  723.    {
  724.      if ( (frameNum==1) && (fr_ps.header->no_of_multi_lingual_ch>0) )
  725.      {
  726.        /*frameNum==1 NOT frameNum==0*/
  727.        if (fr_ps.header->no_of_multi_lingual_ch>7)
  728.        {
  729.  printf("nn***Warning. There are %d multilingual channels.n", fr_ps.header->no_of_multi_lingual_ch);
  730.  printf    ("            This decoder supports only upto 7 channels.nn");
  731.        }
  732.        printf("There are %d multilingual channels, coded at ",fr_ps.header->no_of_multi_lingual_ch);
  733.        if (fr_ps.header->multi_lingual_fs==0) printf("full"); else printf("half");
  734.        printf(" sampling rate.n They are outputted in "%s".n",decoded_file_name_ml);
  735.        if ((musicout_ml = fopen(decoded_file_name_ml, "w+b")) == NULL)
  736.        {
  737.  fprintf (stderr, "***Error. Could not create "%s".nExitn", decoded_file_name_ml);
  738.  exit (1);
  739.        }
  740.        if(need_aiff)
  741.        {
  742.  printf("Multilingual file written in AIFF formatn");
  743.  if (aiff_seek_to_sound_data (musicout_ml) == -1)
  744.  {
  745.     fprintf (stderr, "Could not seek to ML PCM sound data in "%s".n",
  746.     decoded_file_name_ml);
  747.     exit (1);
  748.  }  
  749.        }
  750.      }
  751.      mc_channel = fr_ps.mc_channel;
  752.      crc_error_count_mc = 0;
  753.      buffer_CRC (&bs_mc, &old_crc);   /* read CRC - check from header */
  754.      mc_composite_status_info (&bs_mc, &fr_ps, tca_log, dynx_log);
  755.      
  756.      if (frameNum == 1) 
  757.     if (info.lfe)
  758.     printf ("mc-channel=%d, MPEG2-ext-length=%d kbit/s lfe-channel presentn",
  759.      mc_channel, (int) (info.ext_length * s_freq[info.sampling_frequency] / 144));
  760.   else
  761.     printf ("mc-channel=%d, MPEG2-ext-length=%d kbit/sn",
  762.      mc_channel, (int) (info.ext_length * s_freq[info.sampling_frequency] / 144));
  763.      /* Achtung: fr_ps.jsbound = 27; wird in Abh鋘gikeit von fs gesetzt*/
  764.      ch_start = stereo;
  765.      channels = stereo + mc_channel;
  766.      /* decoding bitallocation's */
  767.    
  768.      II_decode_bitalloc_mc (&bs_mc, &fr_ps, bit_alloc, &ch_start, &channels, bits_log);
  769.      II_decode_scale (&bs_mc, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log);
  770.      /* mandatory CRC check is set */
  771.      if (crc_check)
  772.      {
  773. mc_error_check (&fr_ps, bit_alloc, scfsi, &new_crc, ch_start, channels);
  774. if (new_crc != old_crc)
  775. {
  776.    crc_error_count_mc++;
  777.    total_error_count_mc++;
  778.    for (i = 0; i < SBLIMIT; i ++)
  779.       for (ii = ch_start; ii < channels; ++ii)
  780.  bit_alloc[ii][i] = 0;
  781.    printf ("nERROR in MC-CRC -> mc frame can't be decoded !n");
  782. }
  783. else
  784.    crc_error_count_mc = 0;
  785.      }  /* endif crc_check */
  786.      clip = 0;
  787.      for (i = 0; i < 12; i++)
  788.      {
  789. II_buffer_sample_mc (&bs_mc, &fr_ps, (*sample), bit_alloc, ch_start, channels, i);
  790. if (!any_log)
  791. {
  792. II_dequantize_sample_mc ((*sample), bit_alloc, *fraction, &fr_ps, ch_start, channels, &i);
  793. II_denormalize_sample_mc (*fraction, scale_index, &fr_ps, i>>2, ch_start, channels, &i);
  794. }
  795.      }
  796.      /* 10/31/95 Ralf Schwalbe LFE */
  797.      if( info.lfe ) 
  798.      { 
  799. if(lfe_init)
  800. {
  801.    f = strlen (encoded_file_name) - 4;
  802.    strcpy (lfe_file_name, encoded_file_name);
  803.    strcpy (&lfe_file_name[f], DFLT_OPEXT_LFE);
  804.    if ((lfe = fopen (lfe_file_name, "w+b")) == NULL)
  805.    {
  806.       fprintf (stderr, "Could not create "%s".n",lfe_file_name );
  807.       exit (1);
  808.    }
  809.    if (need_aiff)
  810.    {
  811.       printf ("LFE file written in AIFF formatn");
  812.       if (aiff_seek_to_sound_data (lfe) == -1)
  813.       {
  814.  fprintf (stderr, "Could not seek to LFE PCM sound data in "%s".n",
  815.  lfe_file_name);
  816.  exit (1);
  817.       }  
  818.    }
  819. }
  820. lfe_init = 0; /* R.S. only one time */
  821. II_lfe_calc(&fr_ps);  
  822.      }
  823. /*********************************************************************/
  824. /* JMZ 09/03/1995 Multilingual , WtK 7/8/95 */
  825.      if (info.no_of_multi_lingual_ch>0) 
  826.      {
  827. /* SWKim060695 add the condion with 32, 44.1kHz case */
  828. if (info.sampling_frequency == 1)
  829.    fr_ps.jsbound = 27;
  830. else
  831.    fr_ps.jsbound = 30;
  832. m = info.no_of_multi_lingual_ch;
  833. II_decode_bitalloc_ml (&bs_mc, &fr_ps, bit_alloc_ml, &m);
  834. II_decode_scale_ml (&bs_mc, &fr_ps, scfsi_ml, bit_alloc_ml, scale_index_ml, &m);
  835.    clip = 0;
  836.    for (i=0; i< ( (info.multi_lingual_fs==0) ? 12 : 6 ); i++) /* ngr : n_of_granules loop */
  837.    {
  838.       II_buffer_sample_ml (&bs_mc, &fr_ps, (*sample_ml), bit_alloc_ml, &m);
  839. if (!any_log)
  840. {
  841.       II_dequantize_sample_ml ((*sample_ml), bit_alloc_ml, *fraction_ml, &fr_ps, &m, &i);
  842.       II_denormalize_sample_ml (*fraction_ml, scale_index_ml, &fr_ps,
  843.       ( (info.multi_lingual_fs==0) ? (i>>2) : (i>>1) ), &m, &i);
  844. }
  845.       for (k = 0; k < info.no_of_multi_lingual_ch; k++)
  846.  for (ii = 0; ii < 3; ii++)
  847.     for (j = 0; j < 32; j++)
  848.        sym_sample_ml[i][k][ii][j] = (*sample_ml)[k][ii][j];
  849.    }
  850.      }
  851. /* JMZ 09/03/1995 Multilingual */
  852. /*********************************************************************/
  853. #ifdef Augmentation_7ch
  854.      if (mpeg == 3)
  855.        if (stereo != 2 || fr_ps.header->surround != 2 || fr_ps.header->center == 0)
  856.        {
  857.  /* no 3/2 mode */
  858.  printf ("WARNING: Stream does not contain 5/2 infon");
  859.  printf ("         Continue decoding of MPEG2 MC partn");
  860.  mpeg = 2;
  861.        }
  862.      if (mpeg == 3)
  863.      {
  864.        crc_error_count_aug = 0;
  865.        mc_aug_composite_status_info (&bs_mc, &fr_ps, tca_log, dynx_log);
  866.        buffer_CRC (&bs_mc, &old_crc);   /* read CRC - check from header */
  867.        
  868.        /* Achtung: fr_ps.jsbound = 27; wird in Abh鋘gikeit von fs gesetzt*/
  869.        ch_start = 5;
  870.        channels = 7;
  871.        /* decoding bitallocation's */
  872.      
  873.        II_decode_bitalloc_aug (&bs_mc, &fr_ps, bit_alloc, &ch_start, &channels, bits_log);
  874.        II_decode_scale (&bs_mc, &fr_ps, scfsi, bit_alloc, scale_index, &ch_start, &channels, scfsi_log);
  875.        /* mandatory CRC check is set */
  876.        if (crc_check)
  877.        {
  878.      mc_aug_error_check(&fr_ps, bit_alloc, scfsi, &new_crc);
  879.      if (new_crc != old_crc)
  880.      {
  881.      crc_error_count_aug++;
  882.      total_error_count_aug++;
  883.      for( i = 0; i < SBLIMIT; i ++)
  884.      for(ii = ch_start; ii < channels; ++ii)
  885.      bit_alloc[ii][i] = 0;
  886.      printf("ERROR in MC-AUG-CRC -> mc aug frame can't be decoded !n");
  887.      }
  888.      else
  889.      crc_error_count_aug = 0;
  890.        }  /* endif crc_check */
  891.        clip = 0;
  892.        for (i=0;i<12;i++)
  893.        {
  894.      II_buffer_sample_aug (&bs_mc, &fr_ps, (*sample), bit_alloc, i);
  895. if (!any_log)
  896. {
  897.      II_dequantize_sample_aug ((*sample), bit_alloc, *fraction, &fr_ps, &i);
  898.      II_denormalize_sample_aug (*fraction, scale_index, &fr_ps, i>>2, &i);
  899. }
  900. }
  901.      }   /* endif mpeg == 3 */
  902. #endif
  903.      if (info.mc_prediction_on)
  904. for (k=0; k<2; k++)
  905.    for (ii=0; ii<8; ii++) 
  906.    {
  907.       for (j=0; j<PREDDEL; j++)
  908.  (*pred_buf)[k][ii][j] = (*pred_buf)[k][ii][j+36];
  909.       for (j =0; j <3; j++)
  910.  for (jj=0;jj<12;jj++)
  911.     (*pred_buf)[k][ii][PREDDEL+j+3*jj] = (*fraction)[k][ii][j][jj];
  912.    }
  913.      /* prediction & dematricing MPEG2 part */
  914. if (!any_log)
  915.      if (crc_error_count_mc == 0)
  916. dematricing_mc (*fraction, &fr_ps, *pred_buf);
  917. #ifdef Augmentation_7ch
  918.      if (mpeg == 3)
  919.      {
  920. if (!any_log)
  921. if (crc_error_count_aug == 0)
  922. {
  923.    dematricing_aug (*fraction, &fr_ps);
  924.    denormalizing_aug (*fraction, &fr_ps);
  925. }
  926.       }
  927.       else
  928. #endif
  929.       if (crc_error_count_mc == 0)
  930. denormalizing_mc (*fraction, &fr_ps, channels);
  931.    }   /* endif mpeg >= 2 */
  932. if (!any_log)
  933.    for (jj=0;jj<4*layer_I_frames;jj++)
  934.       for (k=0; k < channels; k++)
  935.   for (j =0; j <3; j++)
  936.      for (ii=0; ii< SBLIMIT; ii++)
  937. (*fraction_help)[jj][k][j][ii] = (*fraction)[k][ii][j][jj];
  938. if (!any_log)
  939.    for (i=0;i<4*layer_I_frames;i++)
  940.    {   
  941.       for (j=0;j<3;j++) 
  942.          for (k=0; k < channels; k++)
  943.     clip += SubBandSynthesis (&((*fraction_help)[i][k][j][0]), k,
  944.     &((*pcm_sample)[k][j][0]));
  945.    
  946.       out_fifo (*pcm_sample, 3, &fr_ps, done, musicout,
  947.     &sample_frames, channels);
  948.    }
  949. /* 31/10/95 Ralf Schwalbe LFE output */
  950. if (!any_log)
  951.    if (info.lfe) 
  952.    {
  953.       for (jj = 0; jj < 12; jj++)
  954.       {
  955. /* lfe_tmp[jj] = (short int) (info.lfe_spl_fraction[jj] * SCALE); */
  956. double foo = floor (info.lfe_spl_fraction[jj] * SCALE + 0.5);
  957. if (foo >= (long) SCALE)      {lfe_tmp[jj] = SCALE-1; clip++;}
  958. else if (foo < (long) -SCALE) {lfe_tmp[jj] =-SCALE;   clip++;}
  959. else                           lfe_tmp[jj] = foo;
  960.       }
  961.       fwrite (&lfe_tmp[0], 2, 12, lfe); 
  962.    }
  963.    if (clip > 0)
  964.       printf("n%d samples clippedn", clip);
  965. /***************************************************************/
  966. /* 10/03/1995 JMZ Multilingual , WtK 7/8/95 */
  967.    if (info.no_of_multi_lingual_ch>0) 
  968.    {
  969.       for(jj=0;jj<( (info.multi_lingual_fs==0) ? 12 : 6 );jj++)
  970.  for(k=0; k<info.no_of_multi_lingual_ch; k++)
  971.      for(j =0; j <3; j++)
  972. for(ii=0; ii< SBLIMIT; ii++)
  973.       (*fraction_help_ml)[jj][k][j][ii] = (*fraction_ml)[k][ii][j][jj];
  974.       clip = 0;
  975.       for (i=0;i<( (info.multi_lingual_fs==0) ? 12 : 6 );i++)
  976.       {   
  977. for (j=0;j<3;j++) 
  978.   for (k=0; k<info.no_of_multi_lingual_ch; k++)
  979.       clip += SubBandSynthesis_ml(&((*fraction_help_ml)[i][k][j][0]), k,
  980.        &((*pcm_sample_ml)[k][j][0]));
  981. out_fifo_ml(*pcm_sample_ml, 3, &fr_ps, done, musicout_ml, &sample_frames_ml);
  982.       }
  983.       if(clip > 0) printf("n%d MultiLingual samples clippedn", clip);
  984.    }
  985. /* 10/03/1995 JMZ Multilingual */
  986. /**************************************************************/
  987. if( print_out == 1)
  988. {
  989. if(frameNum == 1) 
  990. {
  991. fp6 = fopen("SUB_ML","w+");
  992. fp5 = fopen("DYN_CROSS","w+");
  993. fp4 = fopen("INFODEC", "w+");
  994. fp2 = fopen("BALDEC", "w+");
  995. fp3 = fopen("SCFSIDEC", "w+");
  996. fp1 = fopen("SCFDEC", "w+");
  997. }
  998. /*********************Ausgabe***************************************************/
  999. fprintf(fp1, "******************** FRAME %d *****************************n", frameNum-1);
  1000. fprintf(fp2, "n******************** FRAME %d *****************************n", frameNum-1);
  1001. fprintf(fp3, "n******************** FRAME %d *****************************n", frameNum-1);
  1002. fprintf(fp4, "******************** FRAME %d *****************************n", frameNum-1);
  1003. fprintf(fp6, "******************** FRAME %d *****************************n", frameNum-1);
  1004. fprintf(fp4, "version = %d, ", info.version);
  1005. fprintf(fp4, "lay = %d, ", info.lay);
  1006. fprintf(fp4, "error_protection = %dn", info.error_protection);
  1007. fprintf(fp4, "bitrate_index = %d, ", info.bitrate_index);
  1008. fprintf(fp4, "sampling_frequency = %d,", info.sampling_frequency);
  1009. fprintf(fp4, "padding = %d, ", info.padding);
  1010. fprintf(fp4, "extension = %dn", info.extension);
  1011. fprintf(fp4, "mode = %d, ", info.mode);
  1012. fprintf(fp4, "mode_ext = %d,", info.mode_ext);
  1013. fprintf(fp4, "copyright = %d, ", info.copyright);
  1014. fprintf(fp4, "original = %d, ", info.original);
  1015. fprintf(fp4, "emphasis = %dn", info.emphasis);
  1016. fprintf(fp4, "center = %d, ", info.center);
  1017. fprintf(fp4, "surround = %d, ", info.surround);
  1018. fprintf(fp4, "dematrix_procedure = %d, ", info.dematrix_procedure);
  1019. fprintf(fp4, "lfe = %dn", info.lfe);
  1020. fprintf(fp4, "no_of_multi_lingual_ch = %d, ", info.no_of_multi_lingual_ch);
  1021. fprintf(fp4, "multi_lingual_fs = %d, ", info.multi_lingual_fs);
  1022. fprintf(fp4, "multi_lingual_layer = %dn", info.multi_lingual_layer);
  1023. fprintf(fp4, "dyn_cross_on = %dn", info.dyn_cross_on);
  1024. fprintf(fp4, "mc_prediction_on = %dn", info.mc_prediction_on);
  1025. #ifdef DEBUG_PREDICTION
  1026. if(info.mc_prediction_on == 1)
  1027.    for(hu = 0; hu < 8; ++ hu)
  1028.    {
  1029. fprintf(fp4, "mc_prediction[%d] = %d ", hu, info.mc_prediction[hu]);
  1030. for(ho = 0; ho < 4; ho++)
  1031. {
  1032. fprintf(fp4, "mc_predsi[%d][%d] = %d  ", hu,ho, info.mc_predsi[hu][ho]);
  1033. fprintf(fp4, "mc_delay[%d][%d] = %d  ", hu,ho, info.mc_delay_comp[hu][ho]);
  1034. fprintf(fp4, " n");
  1035. for(hi = 0;hi <3; hi++)
  1036. fprintf(fp4, "pred_coeff[%d][%d][%d] = %d ",hu,ho,hi,info.mc_pred_coeff[hu][ho][hi]);
  1037. fprintf(fp4, " n");
  1038. }
  1039.    }
  1040. #endif
  1041. if(info.dyn_cross_on == 1)
  1042. {
  1043. fprintf(fp5, "n******************** FRAME %d *****************************n", frameNum-1);
  1044. fprintf(fp5,"dyn_cross_LR = %dn",info.dyn_cross_LR);
  1045. for(ho = 0; ho < 12; ho ++)
  1046. {
  1047. fprintf(fp5,"dyn_cross[%d] = %d   ",ho,info.dyn_cross_mode[ho]);
  1048. if((ho+1)%4 == 0) fprintf(fp5,"n");
  1049. }
  1050. if (info.surround == 3)
  1051. for(ho = 0; ho < 12; ho ++)
  1052. {
  1053. fprintf(fp5,"dyn_second_stereo[%d] = %d   ",ho,info.dyn_second_stereo[ho]);
  1054. if((ho+1)%4 == 0) fprintf(fp5,"n");
  1055. }
  1056. }
  1057. fprintf(fp4, "tc_sbgr_select = %dn", info.tc_sbgr_select);
  1058. if(info.tc_sbgr_select == 1)
  1059.   fprintf(fp4, "tc_allocation = %dn", info.tc_allocation);
  1060. else
  1061. {
  1062. for(ho = 0; ho < 12; ho ++)
  1063. {
  1064. if(info.mc_prediction[ho] == 0)
  1065. fprintf(fp4, "tc_alloc[%d] = %dn", ho, info.tc_alloc[ho]);
  1066. else{
  1067. for(hu = 0; hu < 4; hu++)
  1068. fprintf(fp4, "predsi[%d][%d] = %dn", ho, hu, info.mc_predsi[ho][hu]);
  1069. }
  1070. }
  1071. fprintf(fp4, "n");
  1072. }
  1073. for(hu = 0; hu < SBLIMIT; ++hu)
  1074. {
  1075. fprintf(fp2, "n");
  1076. fprintf(fp3, "n");
  1077. for(hi = 0; hi < channels; hi ++)
  1078. {
  1079. fprintf(fp1, "n");
  1080. if (layer_I_frames == 1)
  1081.    fprintf(fp2, "BAL[%d][%02d] = %d   ", hi, hu, I_bit_alloc[0][hi][hu]);
  1082. else
  1083.    fprintf(fp2, "BAL[%d][%02d] = %d   ", hi, hu, bit_alloc[hi][hu]);
  1084. fprintf(fp3, "SCFSI[%d][%02d] = %d   ", hi, hu, scfsi[hi][hu]);
  1085. for( ho = 0; ho < layer_I_frames; ho ++)
  1086. {
  1087.    fprintf(fp1, "SCF[%d][%d][%02d] = %d   ", hi, ho, hu, scale_index[hi][ho][hu]);
  1088. }
  1089. }
  1090. for(hi = 0; hi < info.no_of_multi_lingual_ch; hi ++)
  1091. {
  1092.    fprintf(fp1, "n");
  1093.    /* 960315 added FDB Multi-Lingual bitalloc */
  1094.    fprintf(fp2, "BAL_ML[%d][%02d] = %d   ", hi, hu, bit_alloc_ml[hi][hu]);
  1095.    /* 960315 added FDB Multi-Lingual scf select info */
  1096.    fprintf(fp3, "SCFSI_ML[%d][%02d] = %d   ", hi, hu, scfsi_ml[hi][hu]);
  1097.    /* 960315 added FDB Multi-Lingual scfs */
  1098.    for( ho = 0; ho < 3; ho ++)
  1099.       fprintf(fp1, "SCF_ML[%d][%d][%02d] = %d   ", hi, ho, hu, scale_index_ml[hi][ho][hu]);
  1100.         }
  1101. fprintf(fp1, "n");
  1102. }
  1103. /* 960318 added FDB Multi-Lingual subband samples symbols*/
  1104. for(k=0; k<info.no_of_multi_lingual_ch; k++)
  1105.    for(ii=0; ii< SBLIMIT; ii++)
  1106.    {
  1107.       fprintf(fp6, "SB_SYM_ML[%d][%02d]: ", k, ii);
  1108.       for(jj=0;jj<( (info.multi_lingual_fs==0) ? 12 : 6 );jj++)
  1109.          for(j =0; j <3; j++)
  1110.             fprintf(fp6, " %6d", sym_sample_ml[jj][k][j][ii]);
  1111.       fprintf(fp6, "n");
  1112.    }
  1113. /* 960318 added FDB Multi-Lingual subband samples */
  1114. for(k=0; k<info.no_of_multi_lingual_ch; k++)
  1115.    for(ii=0; ii< SBLIMIT; ii++)
  1116.    {
  1117.       fprintf(fp6, "SB_ML[%d][%02d]: ", k, ii);
  1118.       for(jj=0;jj<( (info.multi_lingual_fs==0) ? 12 : 6 );jj++)
  1119.          for(j =0; j <3; j++)
  1120.             fprintf(fp6, " %12.5e", (*fraction_help_ml)[jj][k][j][ii]);
  1121.       fprintf(fp6, "n");
  1122.    }
  1123. fflush (fp1);
  1124. fflush (fp2);
  1125. fflush (fp3);
  1126. fflush (fp4);
  1127. fflush (fp5);
  1128. fflush (fp6);
  1129. /*******************************************************************************/
  1130. } /* endif of print_out == 1 */
  1131.     /****************************************************************/
  1132.     /*                                                              */
  1133.     /*                   END OF FRAME LOOP                          */
  1134.     /*                                                              */
  1135.     /****************************************************************/
  1136. }/*end of while(!endof(bs)) - loop */
  1137. if (need_aiff)
  1138. {
  1139. #ifdef Augmentation_7ch
  1140.    if (mpeg == 3)
  1141.       pcm_aiff_data.numChannels       = 7;
  1142.    else
  1143. #endif
  1144.       pcm_aiff_data.numChannels       = stereo + mc_channel;
  1145.    pcm_aiff_data.numSampleFrames   = sample_frames;
  1146.    pcm_aiff_data.sampleSize        = 16;
  1147.    pcm_aiff_data.sampleRate        = s_freq[info.sampling_frequency]*1000;
  1148.    strcpy(pcm_aiff_data.sampleType, IFF_ID_SSND);
  1149.    pcm_aiff_data.blkAlgn.offset    = 0;
  1150.    pcm_aiff_data.blkAlgn.blockSize = 0;
  1151.    if (aiff_write_headers(musicout, &pcm_aiff_data) == -1)
  1152.    {
  1153.   fprintf (stderr, "Could not write AIFF headers to "%s"n",
  1154.  decoded_file_name);
  1155.   exit (1);
  1156.            }
  1157.            if (fr_ps.header->no_of_multi_lingual_ch>0)
  1158.    {
  1159.      pcm_aiff_data.numChannels       = fr_ps.header->no_of_multi_lingual_ch;
  1160.      pcm_aiff_data.numSampleFrames   = sample_frames;
  1161.      pcm_aiff_data.sampleSize        = 16;
  1162.      pcm_aiff_data.sampleRate        = s_freq[info.sampling_frequency]*1000;
  1163.      if (fr_ps.header->multi_lingual_fs==1) pcm_aiff_data.sampleRate *= 0.5;
  1164.      strcpy(pcm_aiff_data.sampleType, IFF_ID_SSND);
  1165.      pcm_aiff_data.blkAlgn.offset    = 0;
  1166.      pcm_aiff_data.blkAlgn.blockSize = 0;
  1167.   
  1168.      if (aiff_write_headers(musicout_ml, &pcm_aiff_data) == -1)
  1169.      {
  1170.     fprintf (stderr, "Could not write AIFF headers to "%s"n",
  1171.    decoded_file_name_ml);
  1172.     exit (1);
  1173.      }
  1174.    }
  1175.    if (lfe_init == 0)
  1176.    {
  1177.      pcm_aiff_data.numChannels       = 1;
  1178.      pcm_aiff_data.numSampleFrames   = sample_frames / 96;
  1179.      pcm_aiff_data.sampleSize        = 16;
  1180.      pcm_aiff_data.sampleRate        = (s_freq[info.sampling_frequency]*1000) / 96;
  1181.      strcpy(pcm_aiff_data.sampleType, IFF_ID_SSND);
  1182.      pcm_aiff_data.blkAlgn.offset    = 0;
  1183.      pcm_aiff_data.blkAlgn.blockSize = 0;
  1184.      if (aiff_write_headers(lfe, &pcm_aiff_data) == -1)
  1185.      {
  1186.     fprintf (stderr, "Could not write AIFF headers to "%s"n",
  1187.    lfe_file_name);
  1188.     exit (1);
  1189.      }
  1190.    }
  1191.  }
  1192. close_bit_stream_r(&bs_mpg);
  1193. if (info.ext_bit_stream_present)
  1194. {
  1195.      close_bit_stream_r(&bs_ext);
  1196. }
  1197. fclose(musicout);
  1198. if(info.lfe) fclose(lfe);
  1199. #ifdef  MACINTOSH
  1200. if (need_aiff) set_mac_file_attr(decoded_file_name, VOL_REF_NUM,
  1201.  CREATR_DEC_AIFF, FILTYP_DEC_AIFF);
  1202. else           set_mac_file_attr(decoded_file_name, VOL_REF_NUM,
  1203.  CREATR_DEC_BNRY, FILTYP_DEC_BNRY);
  1204. #endif
  1205. printf("Decoding of "%s" with %lu frames is finishedn", encoded_file_name, frameNum);
  1206. printf("The decoded PCM output file name is "%s"n", decoded_file_name);
  1207. if (need_aiff)
  1208.    printf(""%s" has been written with AIFF header informationn",
  1209.   decoded_file_name);
  1210. if (fr_ps.header->no_of_multi_lingual_ch>0) {
  1211.           printf("There are %d multilingual channels, coded at ",fr_ps.header->no_of_multi_lingual_ch);
  1212.           if (fr_ps.header->multi_lingual_fs==0) printf("full"); else printf("half");
  1213.           printf(" sampling rate.n They are outputted in "%s".n",decoded_file_name_ml);
  1214.           if (need_aiff)
  1215.    printf("Multilingual file has been written with AIFF header informationn");
  1216. }
  1217. if (total_error_count_mc != 0)
  1218.     printf ("There were %d frames,  which were not in multichannel!!n", total_error_count_mc);
  1219. #ifdef Augmentation_7ch
  1220. if (total_error_count_aug != 0)
  1221.     printf ("There were %d frames,  which were not in augmented multichannel!!n", total_error_count_aug);
  1222. #endif
  1223.     if (print_out == 1)
  1224.     {
  1225. fclose (fp1);
  1226. fclose (fp2);
  1227. fclose (fp3);
  1228. fclose (fp4);
  1229. fclose (fp5);
  1230. fclose (fp6);
  1231.     }
  1232.     return (1);
  1233. }
  1234. void usage (void)  /* print syntax & exit */
  1235. {
  1236.    fprintf (stderr,
  1237.       "usage: %s                         queries for all arguments, orn",
  1238.    programName);
  1239.    fprintf (stderr,
  1240.       "       %s [-a] [-h] [-i] [-m] inputBS [outPCM]n", programName);
  1241.    fprintf (stderr,"wheren");
  1242.    fprintf (stderr," -a       write a RAW data sound file  (default: write an AIFF sound file)n");
  1243.    fprintf (stderr," -b       write alloc bits per subband to stdout (default: off)n");
  1244.    fprintf (stderr," -d       write dynx modes to stdout (default: off)n");
  1245.    fprintf (stderr," -h       bitstreams contain a 2304 byte header  (default: no header)n");
  1246.    fprintf (stderr," -i       write decoded bitstream-information in a filen"); 
  1247.       /* default: write encoded information */
  1248.    fprintf (stderr," -m       encoded bitstream is a MPEG 1 Layer-2 filen"); 
  1249.       /* default: decode a MPEG 2 Layer-2 bitstream */
  1250. #ifdef Augmentation_7ch
  1251.    fprintf (stderr," -n       encoded bitstream is a MPEG 2 Layer-2 file with 7.1 augmentationn"); 
  1252.       /* default: decode a MPEG 2 Layer-2 bitstream */
  1253. #endif
  1254.    fprintf (stderr," -s       write scf bits per subband to stdout (default: off)n");
  1255.    fprintf (stderr," -t       write tca modes to stdout (default: off)n");
  1256.    fprintf (stderr," inputBS  input bit stream of encoded audion");
  1257.    fprintf (stderr," outPCM   output PCM sound file (dflt inName)n");
  1258.    exit (1);
  1259. }