mpeg2dec.c
上传用户:hkgotone
上传日期:2013-02-17
资源大小:293k
文件大小:18k
源码类别:

Windows Mobile

开发平台:

C/C++

  1. /* mpeg2dec.c, main(), initialization, option processing                    */
  2. /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
  3. /*
  4.  * Disclaimer of Warranty
  5.  *
  6.  * These software programs are available to the user without any license fee or
  7.  * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
  8.  * any and all warranties, whether express, implied, or statuary, including any
  9.  * implied warranties or merchantability or of fitness for a particular
  10.  * purpose.  In no event shall the copyright-holder be liable for any
  11.  * incidental, punitive, or consequential damages of any kind whatsoever
  12.  * arising from the use of these programs.
  13.  *
  14.  * This disclaimer of warranty extends to the user of these programs and user's
  15.  * customers, employees, agents, transferees, successors, and assigns.
  16.  *
  17.  * The MPEG Software Simulation Group does not represent or warrant that the
  18.  * programs furnished hereunder are free of infringement of any third-party
  19.  * patents.
  20.  *
  21.  * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
  22.  * are subject to royalty fees to patent holders.  Many of these patents are
  23.  * general enough such that they are unavoidable regardless of implementation
  24.  * design.
  25.  *
  26.  */
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <ctype.h>
  30. #include <fcntl.h>
  31. #define GLOBAL
  32. #include "config.h"
  33. #include "global.h"
  34. /* private prototypes */
  35. static int  video_sequence _ANSI_ARGS_((int *framenum));
  36. static int Decode_Bitstream _ANSI_ARGS_((void));
  37. static int  Headers _ANSI_ARGS_((void));
  38. static void Initialize_Sequence _ANSI_ARGS_((void));
  39. static void Initialize_Decoder _ANSI_ARGS_((void));
  40. static void Deinitialize_Sequence _ANSI_ARGS_((void));
  41. static void Process_Options _ANSI_ARGS_((int argc, char *argv[]));
  42. #if OLD
  43. static int  Get_Val _ANSI_ARGS_((char *argv[]));
  44. #endif
  45. /* #define DEBUG */
  46. static void Clear_Options();
  47. #ifdef DEBUG
  48. static void Print_Options();
  49. #endif
  50. int main(argc,argv)
  51. int argc;
  52. char *argv[];
  53. {
  54.   int ret, code;
  55.   Clear_Options();
  56.   /* decode command line arguments */
  57.   Process_Options(argc,argv);
  58. #ifdef DEBUG
  59.   Print_Options();
  60. #endif
  61.   ld = &base; /* select base layer context */
  62.   /* open MPEG base layer bitstream file(s) */
  63.   /* NOTE: this is either a base layer stream or a spatial enhancement stream */
  64.   if ((base.Infile=open(Main_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
  65.   {
  66.     fprintf(stderr,"Base layer input file %s not foundn", Main_Bitstream_Filename);
  67.     exit(1);
  68.   }
  69.   if(base.Infile != 0)
  70.   {
  71.     Initialize_Buffer(); 
  72.   
  73.     if(Show_Bits(8)==0x47)
  74.     {
  75.       sprintf(Error_Text,"Decoder currently does not parse transport streamsn");
  76.       Error(Error_Text);
  77.     }
  78.     next_start_code();
  79.     code = Show_Bits(32);
  80.     switch(code)
  81.     {
  82.     case SEQUENCE_HEADER_CODE:
  83.       break;
  84.     case PACK_START_CODE:
  85.       System_Stream_Flag = 1;
  86.     case VIDEO_ELEMENTARY_STREAM:
  87.       System_Stream_Flag = 1;
  88.       break;
  89.     default:
  90.       sprintf(Error_Text,"Unable to recognize stream typen");
  91.       Error(Error_Text);
  92.       break;
  93.     }
  94.     lseek(base.Infile, 0l, 0);
  95.     Initialize_Buffer(); 
  96.   }
  97.   if(base.Infile!=0)
  98.   {
  99.     lseek(base.Infile, 0l, 0);
  100.   }
  101.   Initialize_Buffer(); 
  102.   if(Two_Streams)
  103.   {
  104.     ld = &enhan; /* select enhancement layer context */
  105.     if ((enhan.Infile = open(Enhancement_Layer_Bitstream_Filename,O_RDONLY|O_BINARY))<0)
  106.     {
  107.       sprintf(Error_Text,"enhancment layer bitstream file %s not foundn",
  108.         Enhancement_Layer_Bitstream_Filename);
  109.       Error(Error_Text);
  110.     }
  111.     Initialize_Buffer();
  112.     ld = &base;
  113.   }
  114.   Initialize_Decoder();
  115.   ret = Decode_Bitstream();
  116.   close(base.Infile);
  117.   if (Two_Streams)
  118.     close(enhan.Infile);
  119.   return 0;
  120. }
  121. /* IMPLEMENTAION specific rouintes */
  122. static void Initialize_Decoder()
  123. {
  124.   int i;
  125.   /* Clip table */
  126.   if (!(Clip=(unsigned char *)malloc(1024)))
  127.     Error("Clip[] malloc failedn");
  128.   Clip += 384;
  129.   for (i=-384; i<640; i++)
  130.     Clip[i] = (i<0) ? 0 : ((i>255) ? 255 : i);
  131.   /* IDCT */
  132.   if (Reference_IDCT_Flag)
  133.     Initialize_Reference_IDCT();
  134.   else
  135.     Initialize_Fast_IDCT();
  136. }
  137. /* mostly IMPLEMENTAION specific rouintes */
  138. static void Initialize_Sequence()
  139. {
  140.   int cc, size;
  141.   static int Table_6_20[3] = {6,8,12};
  142.   /* check scalability mode of enhancement layer */
  143.   if (Two_Streams && (enhan.scalable_mode!=SC_SNR) && (base.scalable_mode!=SC_DP))
  144.     Error("unsupported scalability moden");
  145.   /* force MPEG-1 parameters for proper decoder behavior */
  146.   /* see ISO/IEC 13818-2 section D.9.14 */
  147.   if (!base.MPEG2_Flag)
  148.   {
  149.     progressive_sequence = 1;
  150.     progressive_frame = 1;
  151.     picture_structure = FRAME_PICTURE;
  152.     frame_pred_frame_dct = 1;
  153.     chroma_format = CHROMA420;
  154.     matrix_coefficients = 5;
  155.   }
  156.   /* round to nearest multiple of coded macroblocks */
  157.   /* ISO/IEC 13818-2 section 6.3.3 sequence_header() */
  158.   mb_width = (horizontal_size+15)/16;
  159.   mb_height = (base.MPEG2_Flag && !progressive_sequence) ? 2*((vertical_size+31)/32)
  160.                                         : (vertical_size+15)/16;
  161.   Coded_Picture_Width = 16*mb_width;
  162.   Coded_Picture_Height = 16*mb_height;
  163.   /* ISO/IEC 13818-2 sections 6.1.1.8, 6.1.1.9, and 6.1.1.10 */
  164.   Chroma_Width = (chroma_format==CHROMA444) ? Coded_Picture_Width
  165.                                            : Coded_Picture_Width>>1;
  166.   Chroma_Height = (chroma_format!=CHROMA420) ? Coded_Picture_Height
  167.                                             : Coded_Picture_Height>>1;
  168.   
  169.   /* derived based on Table 6-20 in ISO/IEC 13818-2 section 6.3.17 */
  170.   block_count = Table_6_20[chroma_format-1];
  171.   for (cc=0; cc<3; cc++)
  172.   {
  173.     if (cc==0)
  174.       size = Coded_Picture_Width*Coded_Picture_Height;
  175.     else
  176.       size = Chroma_Width*Chroma_Height;
  177.     if (!(backward_reference_frame[cc] = (unsigned char *)malloc(size)))
  178.       Error("backward_reference_frame[] malloc failedn");
  179.     if (!(forward_reference_frame[cc] = (unsigned char *)malloc(size)))
  180.       Error("forward_reference_frame[] malloc failedn");
  181.     if (!(auxframe[cc] = (unsigned char *)malloc(size)))
  182.       Error("auxframe[] malloc failedn");
  183.     if(Ersatz_Flag)
  184.       if (!(substitute_frame[cc] = (unsigned char *)malloc(size)))
  185.         Error("substitute_frame[] malloc failedn");
  186.     if (base.scalable_mode==SC_SPAT)
  187.     {
  188.       /* this assumes lower layer is 4:2:0 */
  189.       if (!(llframe0[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
  190.         Error("llframe0 malloc failedn");
  191.       if (!(llframe1[cc] = (unsigned char *)malloc((lower_layer_prediction_horizontal_size*lower_layer_prediction_vertical_size)/(cc?4:1))))
  192.         Error("llframe1 malloc failedn");
  193.     }
  194.   }
  195.   /* SCALABILITY: Spatial */
  196.   if (base.scalable_mode==SC_SPAT)
  197.   {
  198.     if (!(lltmp = (short *)malloc(lower_layer_prediction_horizontal_size*((lower_layer_prediction_vertical_size*vertical_subsampling_factor_n)/vertical_subsampling_factor_m)*sizeof(short))))
  199.       Error("lltmp malloc failedn");
  200.   }
  201. #ifdef DISPLAY
  202.   if (Output_Type==T_X11)
  203.   {
  204.     Initialize_Display_Process("");
  205.     Initialize_Dither_Matrix();
  206.   }
  207. #endif /* DISPLAY */
  208. }
  209. void Error(text)
  210. char *text;
  211. {
  212.   fprintf(stderr,text);
  213.   exit(1);
  214. }
  215. /* Trace_Flag output */
  216. void Print_Bits(code,bits,len)
  217. int code,bits,len;
  218. {
  219.   int i;
  220.   for (i=0; i<len; i++)
  221.     printf("%d",(code>>(bits-1-i))&1);
  222. }
  223. /* option processing */
  224. static void Process_Options(argc,argv)
  225. int argc;                  /* argument count  */
  226. char *argv[];              /* argument vector */
  227. {
  228.   int i, LastArg, NextArg;
  229.   /* at least one argument should be present */
  230.   if (argc<2)
  231.   {
  232.     printf("n%s, %sn",Version,Author);
  233.     printf("Usage:  mpeg2decode {options}n
  234. Options: -b  file  main bitstream (base or spatial enhancement layer)n
  235.          -cn file  conformance report (n: level)n
  236.          -e  file  enhancement layer bitstream (SNR or Data Partitioning)n
  237.          -f        store/display interlaced video in frame formatn
  238.          -g        concatenated file format for substitution method (-x)n
  239.          -in file  information & statistics report  (n: level)n
  240.          -l  file  file name pattern for lower layer sequencen
  241.                    (for spatial scalability)n
  242.          -on file  output format (0:YUV 1:SIF 2:TGA 3:PPM 4:X11 5:X11HiQ)n
  243.          -q        disable warnings to stderrn
  244.          -r        use double precision reference IDCTn
  245.          -t        enable low level tracing to stdoutn
  246.          -u  file  print user_data to stdio or filen
  247.          -vn       verbose output (n: level)n
  248.          -x  file  filename pattern of picture substitution sequencenn
  249. File patterns:  for sequential filenames, "printf" style, e.g. rec%%dn
  250.                  or rec%%d%%c for fieldwise storagen
  251. Levels:        0:none 1:sequence 2:picture 3:slice 4:macroblock 5:blocknn
  252. Example:       mpeg2decode -b bitstream.mpg -f -r -o0 rec%%dn
  253.          n");
  254.     exit(0);
  255.   }
  256.   Output_Type = -1;
  257.   i = 1;
  258.   /* command-line options are proceeded by '-' */
  259.   while(i < argc)
  260.   {
  261.     /* check if this is the last argument */
  262.     LastArg = ((argc-i)==1);
  263.     /* parse ahead to see if another flag immediately follows current
  264.        argument (this is used to tell if a filename is missing) */
  265.     if(!LastArg)
  266.       NextArg = (argv[i+1][0]=='-');
  267.     else
  268.       NextArg = 0;
  269.     /* second character, [1], after '-' is the switch */
  270.     if(argv[i][0]=='-')
  271.     {
  272.       switch(toupper(argv[i][1]))
  273.       {
  274.         /* third character. [2], is the value */
  275.       case 'B':
  276.         Main_Bitstream_Flag = 1;
  277.         if(NextArg || LastArg)
  278.         {
  279.           printf("ERROR: -b must be followed the main bitstream filenamen");
  280. }
  281.         else
  282.           Main_Bitstream_Filename = argv[++i]; 
  283.         break;
  284.       case 'C':
  285. #ifdef VERIFY
  286.         Verify_Flag = atoi(&argv[i][2]); 
  287.         if((Verify_Flag < NO_LAYER) || (Verify_Flag > ALL_LAYERS))
  288.         {
  289.           printf("ERROR: -c level (%d) out of range [%d,%d]n",
  290.             Verify_Flag, NO_LAYER, ALL_LAYERS);
  291.           exit(ERROR);
  292.         }
  293. #else  /* VERIFY */
  294.         printf("This program not compiled for Verify_Flag optionn");
  295. #endif /* VERIFY */
  296.         break;
  297.       case 'E':
  298.         Two_Streams = 1; /* either Data Partitioning (DP) or SNR Scalability enhancment */
  299.                    
  300.         if(NextArg || LastArg)
  301.         {
  302.           printf("ERROR: -e must be followed by filenamen");
  303.           exit(ERROR);
  304.         }
  305.         else
  306.           Enhancement_Layer_Bitstream_Filename = argv[++i]; 
  307.         break;
  308.       case 'F':
  309.         Frame_Store_Flag = 1;
  310.         break;
  311.       case 'G':
  312.         Big_Picture_Flag = 1;
  313.         break;
  314.       case 'I':
  315. #ifdef VERIFY
  316.         Stats_Flag = atoi(&argv[i][2]); 
  317. #else /* VERIFY */
  318.         printf("WARNING: This program not compiled for -i optionn");
  319. #endif /* VERIFY */     
  320.         break;
  321.     
  322.       case 'L':  /* spatial scalability flag */
  323.         Spatial_Flag = 1;
  324.        if(NextArg || LastArg)
  325.        {
  326.          printf("ERROR: -l must be followed by filenamen");
  327.          exit(ERROR);
  328.        }
  329.        else
  330.          Lower_Layer_Picture_Filename = argv[++i]; 
  331.         break;
  332.       case 'O':
  333.   
  334.         Output_Type = atoi(&argv[i][2]); 
  335.   
  336.         if((Output_Type==4) || (Output_Type==5))
  337.           Output_Picture_Filename = "";  /* no need of filename */
  338.         else if(NextArg || LastArg)  
  339.         {
  340.           printf("ERROR: -o must be followed by filenamen");
  341.           exit(ERROR);
  342.         }
  343.         else
  344.         /* filename is separated by space, so it becomes the next argument */
  345.           Output_Picture_Filename = argv[++i]; 
  346. #ifdef DISPLAY
  347.         if (Output_Type==T_X11HIQ)
  348.         {
  349.           hiQdither = 1;
  350.           Output_Type=T_X11;
  351.         }
  352. #endif /* DISPLAY */
  353.         break;
  354.       case 'Q':
  355.         Quiet_Flag = 1;
  356.         break;
  357.       case 'R':
  358.         Reference_IDCT_Flag = 1;
  359.         break;
  360.     
  361.       case 'T':
  362. #ifdef TRACE
  363.         Trace_Flag = 1;
  364. #else /* TRACE */
  365.         printf("WARNING: This program not compiled for -t optionn");
  366. #endif /* TRACE */
  367.         break;
  368.       case 'U':
  369.         User_Data_Flag = 1;
  370.       case 'V':
  371. #ifdef VERBOSE
  372.         Verbose_Flag = atoi(&argv[i][2]); 
  373. #else /* VERBOSE */
  374.         printf("This program not compiled for -v optionn");
  375. #endif /* VERBOSE */
  376.         break;
  377.       case 'X':
  378.         Ersatz_Flag = 1;
  379.        if(NextArg || LastArg)
  380.        {
  381.          printf("ERROR: -x must be followed by filenamen"); 
  382.          exit(ERROR);
  383.        }
  384.        else
  385.         Substitute_Picture_Filename = argv[++i]; 
  386.         break;
  387.       default:
  388.         fprintf(stderr,"undefined option -%c ignored. Exiting programn", 
  389.           argv[i][1]);
  390.         exit(ERROR);
  391.     
  392.       } /* switch() */
  393.     } /* if argv[i][0] == '-' */
  394.     
  395.     i++;
  396.    /* check for bitstream filename argument (there must always be one, at the very end
  397.    of the command line arguments */
  398.   } /* while() */
  399.   /* options sense checking */
  400.   if(Main_Bitstream_Flag!=1)
  401.   {
  402.     printf("There must be a main bitstream specified (-b filename)n");
  403.   }
  404.   /* force display process to show frame pictures */
  405.   if((Output_Type==4 || Output_Type==5) && Frame_Store_Flag)
  406.     Display_Progressive_Flag = 1;
  407.   else
  408.     Display_Progressive_Flag = 0;
  409. #ifdef VERIFY
  410.   /* parse the bitstream, do not actually decode it completely */
  411.   
  412. #if 0
  413.   if(Output_Type==-1)
  414.   {
  415.     Decode_Layer = Verify_Flag;
  416.     printf("FYI: Decoding bitstream elements up to: %sn", 
  417.       Layer_Table[Decode_Layer]);
  418.   }
  419.   else
  420. #endif
  421.     Decode_Layer = ALL_LAYERS;
  422. #endif /* VERIFY */
  423.   /* no output type specified */
  424.   if(Output_Type==-1)
  425.   {
  426.     Output_Type = 9; 
  427.     Output_Picture_Filename = "";
  428.   }
  429. #ifdef DISPLAY
  430.   if (Output_Type==T_X11)
  431.   {
  432.     if(Frame_Store_Flag)
  433.       Display_Progressive_Flag = 1;
  434.     else
  435.       Display_Progressive_Flag = 0;
  436.     Frame_Store_Flag = 1; /* to avoid calling dither() twice */
  437.   }
  438. #endif
  439. }
  440. #ifdef OLD
  441. /* 
  442.    this is an old routine used to convert command line arguments
  443.    into integers 
  444. */
  445. static int Get_Val(argv)
  446. char *argv[];
  447. {
  448.   int val;
  449.   if (sscanf(argv[1]+2,"%d",&val)!=1)
  450.     return 0;
  451.   while (isdigit(argv[1][2]))
  452.     argv[1]++;
  453.   return val;
  454. }
  455. #endif
  456. static int Headers()
  457. {
  458.   int ret;
  459.   ld = &base;
  460.   
  461.   /* return when end of sequence (0) or picture
  462.      header has been parsed (1) */
  463.   ret = Get_Hdr();
  464.   if (Two_Streams)
  465.   {
  466.     ld = &enhan;
  467.     if (Get_Hdr()!=ret && !Quiet_Flag)
  468.       fprintf(stderr,"streams out of syncn");
  469.     ld = &base;
  470.   }
  471.   return ret;
  472. }
  473. static int Decode_Bitstream()
  474. {
  475.   int ret;
  476.   int Bitstream_Framenum;
  477.   Bitstream_Framenum = 0;
  478.   for(;;)
  479.   {
  480. #ifdef VERIFY
  481.     Clear_Verify_Headers();
  482. #endif /* VERIFY */
  483.     ret = Headers();
  484.     
  485.     if(ret==1)
  486.     {
  487.       ret = video_sequence(&Bitstream_Framenum);
  488.     }
  489.     else
  490.       return(ret);
  491.   }
  492. }
  493. static void Deinitialize_Sequence()
  494. {
  495.   int i;
  496.   /* clear flags */
  497.   base.MPEG2_Flag=0;
  498.   for(i=0;i<3;i++)
  499.   {
  500.     free(backward_reference_frame[i]);
  501.     free(forward_reference_frame[i]);
  502.     free(auxframe[i]);
  503.     if (base.scalable_mode==SC_SPAT)
  504.     {
  505.      free(llframe0[i]);
  506.      free(llframe1[i]);
  507.     }
  508.   }
  509.   if (base.scalable_mode==SC_SPAT)
  510.     free(lltmp);
  511. #ifdef DISPLAY
  512.   if (Output_Type==T_X11) 
  513.     Terminate_Display_Process();
  514. #endif
  515. }
  516. static int video_sequence(Bitstream_Framenumber)
  517. int *Bitstream_Framenumber;
  518. {
  519.   int Bitstream_Framenum;
  520.   int Sequence_Framenum;
  521.   int Return_Value;
  522.   Bitstream_Framenum = *Bitstream_Framenumber;
  523.   Sequence_Framenum=0;
  524.   Initialize_Sequence();
  525.   /* decode picture whose header has already been parsed in 
  526.      Decode_Bitstream() */
  527.   Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
  528.   /* update picture numbers */
  529.   if (!Second_Field)
  530.   {
  531.     Bitstream_Framenum++;
  532.     Sequence_Framenum++;
  533.   }
  534.   /* loop through the rest of the pictures in the sequence */
  535.   while ((Return_Value=Headers()))
  536.   {
  537.     Decode_Picture(Bitstream_Framenum, Sequence_Framenum);
  538.     if (!Second_Field)
  539.     {
  540.       Bitstream_Framenum++;
  541.       Sequence_Framenum++;
  542.     }
  543.   }
  544.   /* put last frame */
  545.   if (Sequence_Framenum!=0)
  546.   {
  547.     Output_Last_Frame_of_Sequence(Bitstream_Framenum);
  548.   }
  549.   Deinitialize_Sequence();
  550. #ifdef VERIFY
  551.     Clear_Verify_Headers();
  552. #endif /* VERIFY */
  553.   *Bitstream_Framenumber = Bitstream_Framenum;
  554.   return(Return_Value);
  555. }
  556. static void Clear_Options()
  557. {
  558.   Verbose_Flag = 0;
  559.   Output_Type = 0;
  560.   Output_Picture_Filename = " ";
  561.   hiQdither  = 0;
  562.   Output_Type = 0;
  563.   Frame_Store_Flag = 0;
  564.   Spatial_Flag = 0;
  565.   Lower_Layer_Picture_Filename = " ";
  566.   Reference_IDCT_Flag = 0;
  567.   Trace_Flag = 0;
  568.   Quiet_Flag = 0;
  569.   Ersatz_Flag = 0;
  570.   Substitute_Picture_Filename  = " ";
  571.   Two_Streams = 0;
  572.   Enhancement_Layer_Bitstream_Filename = " ";
  573.   Big_Picture_Flag = 0;
  574.   Main_Bitstream_Flag = 0;
  575.   Main_Bitstream_Filename = " ";
  576.   Verify_Flag = 0;
  577.   Stats_Flag  = 0;
  578.   User_Data_Flag = 0; 
  579. }
  580. #ifdef DEBUG
  581. static void Print_Options()
  582. {
  583.   
  584.   printf("Verbose_Flag                         = %dn", Verbose_Flag);
  585.   printf("Output_Type                          = %dn", Output_Type);
  586.   printf("Output_Picture_Filename              = %sn", Output_Picture_Filename);
  587.   printf("hiQdither                            = %dn", hiQdither);
  588.   printf("Output_Type                          = %dn", Output_Type);
  589.   printf("Frame_Store_Flag                     = %dn", Frame_Store_Flag);
  590.   printf("Spatial_Flag                         = %dn", Spatial_Flag);
  591.   printf("Lower_Layer_Picture_Filename         = %sn", Lower_Layer_Picture_Filename);
  592.   printf("Reference_IDCT_Flag                  = %dn", Reference_IDCT_Flag);
  593.   printf("Trace_Flag                           = %dn", Trace_Flag);
  594.   printf("Quiet_Flag                           = %dn", Quiet_Flag);
  595.   printf("Ersatz_Flag                          = %dn", Ersatz_Flag);
  596.   printf("Substitute_Picture_Filename          = %sn", Substitute_Picture_Filename);
  597.   printf("Two_Streams                          = %dn", Two_Streams);
  598.   printf("Enhancement_Layer_Bitstream_Filename = %sn", Enhancement_Layer_Bitstream_Filename);
  599.   printf("Big_Picture_Flag                     = %dn", Big_Picture_Flag);
  600.   printf("Main_Bitstream_Flag                  = %dn", Main_Bitstream_Flag);
  601.   printf("Main_Bitstream_Filename              = %sn", Main_Bitstream_Filename);
  602.   printf("Verify_Flag                          = %dn", Verify_Flag);
  603.   printf("Stats_Flag                           = %dn", Stats_Flag);
  604.   printf("User_Data_Flag                       = %dn", User_Data_Flag);
  605. }
  606. #endif