From ca318bf3308c47a630a8df2a565cc545d3421774 Mon Sep 17 00:00:00 2001 From: malaterre Date: Thu, 27 Oct 2005 19:57:21 +0000 Subject: [PATCH] ENH: Cleanup got the thing mostly working --- src/gdcmMpeg.cxx | 345 ++--------------------------------------------- 1 file changed, 12 insertions(+), 333 deletions(-) diff --git a/src/gdcmMpeg.cxx b/src/gdcmMpeg.cxx index a707e01d..8f42f756 100644 --- a/src/gdcmMpeg.cxx +++ b/src/gdcmMpeg.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmMpeg.cxx,v $ Language: C++ - Date: $Date: 2005/10/27 19:05:36 $ - Version: $Revision: 1.6 $ + Date: $Date: 2005/10/27 19:57:21 $ + Version: $Revision: 1.7 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -321,327 +321,7 @@ static void Initialize_Decoder() } -/* option processing */ -static void Process_Options(int argc, const char *argv[]) -//int argc; /* argument count */ -//char *argv[]; /* argument vector */ -{ - int i, LastArg, NextArg; - - /* at least one argument should be present */ - if (argc<2) - { - printf("\n%s, %s\n",Version,Author); - printf("Usage: mpeg2decode {options}\n" -"Options: -b file main bitstream (base or spatial enhancement layer)\n" -" -cn file conformance report (n: level)\n" -" -e file enhancement layer bitstream (SNR or Data Partitioning)\n" -" -f store/display interlaced video in frame format\n" -" -g concatenated file format for substitution method (-x)\n" -" -in file information & statistics report (n: level)\n" -" -l file file name pattern for lower layer sequence\n"); -printf(" (for spatial scalability)\n" -" -on file output format (0:YUV 1:SIF 2:TGA 3:PPM 4:X11 5:X11HiQ)\n" -" -q disable warnings to stderr\n" -" -r use double precision reference IDCT\n" -" -t enable low level tracing to stdout\n" -" -u file print user_data to stdio or file\n" -" -vn verbose output (n: level)\n" -" -x file filename pattern of picture substitution sequence\n\n"); -printf("File patterns: for sequential filenames, \"printf\" style, e.g. rec%%d\n" -" or rec%%d%%c for fieldwise storage\n" -"Levels: 0:none 1:sequence 2:picture 3:slice 4:macroblock 5:block\n\n" -"Example: mpeg2decode -b bitstream.mpg -f -r -o0 rec%%d\n" -" \n"); - exit(0); - } - - - Output_Type = -1; - i = 1; - - /* command-line options are proceeded by '-' */ - - while(i < argc) - { - /* check if this is the last argument */ - LastArg = ((argc-i)==1); - - /* parse ahead to see if another flag immediately follows current - argument (this is used to tell if a filename is missing) */ - if(!LastArg) - NextArg = (argv[i+1][0]=='-'); - else - NextArg = 0; - - /* second character, [1], after '-' is the switch */ - if(argv[i][0]=='-') - { - switch(toupper(argv[i][1])) - { - /* third character. [2], is the value */ - case 'B': - Main_Bitstream_Flag = 1; - - if(NextArg || LastArg) - { - printf("ERROR: -b must be followed the main bitstream filename\n"); - } - else - Main_Bitstream_Filename = argv[++i]; - - break; - - - case 'C': - -#ifdef VERIFY - Verify_Flag = atoi(&argv[i][2]); - - if((Verify_Flag < NO_LAYER) || (Verify_Flag > ALL_LAYERS)) - { - printf("ERROR: -c level (%d) out of range [%d,%d]\n", - Verify_Flag, NO_LAYER, ALL_LAYERS); - exit(ERROR); - } -#else /* VERIFY */ - printf("This program not compiled for Verify_Flag option\n"); -#endif /* VERIFY */ - break; - - case 'E': - Two_Streams = 1; /* either Data Partitioning (DP) or SNR Scalability enhancment */ - - if(NextArg || LastArg) - { - printf("ERROR: -e must be followed by filename\n"); - exit(ERROR); - } - else - Enhancement_Layer_Bitstream_Filename = argv[++i]; - - break; - - - case 'F': - Frame_Store_Flag = 1; - break; - - case 'G': - Big_Picture_Flag = 1; - break; - - - case 'I': -#ifdef VERIFY - Stats_Flag = atoi(&argv[i][2]); -#else /* VERIFY */ - printf("WARNING: This program not compiled for -i option\n"); -#endif /* VERIFY */ - break; - - case 'L': /* spatial scalability flag */ - Spatial_Flag = 1; - - if(NextArg || LastArg) - { - printf("ERROR: -l must be followed by filename\n"); - exit(ERROR); - } - else - Lower_Layer_Picture_Filename = argv[++i]; - - break; - - case 'O': - - Output_Type = atoi(&argv[i][2]); - - if((Output_Type==4) || (Output_Type==5)) - Output_Picture_Filename = ""; /* no need of filename */ - else if(NextArg || LastArg) - { - printf("ERROR: -o must be followed by filename\n"); - exit(ERROR); - } - else - /* filename is separated by space, so it becomes the next argument */ - Output_Picture_Filename = argv[++i]; - -#ifdef DISPLAY - if (Output_Type==T_X11HIQ) - { - hiQdither = 1; - Output_Type=T_X11; - } -#endif /* DISPLAY */ - break; - - case 'Q': - Quiet_Flag = 1; - break; - - case 'R': - Reference_IDCT_Flag = 1; - break; - - case 'T': -#ifdef TRACE - Trace_Flag = 1; -#else /* TRACE */ - printf("WARNING: This program not compiled for -t option\n"); -#endif /* TRACE */ - break; - - case 'U': - User_Data_Flag = 1; - - case 'V': -#ifdef VERBOSE - Verbose_Flag = atoi(&argv[i][2]); -#else /* VERBOSE */ - printf("This program not compiled for -v option\n"); -#endif /* VERBOSE */ - break; - - - case 'X': - Ersatz_Flag = 1; - - if(NextArg || LastArg) - { - printf("ERROR: -x must be followed by filename\n"); - exit(ERROR); - } - else - Substitute_Picture_Filename = argv[++i]; - - break; - - - - default: - fprintf(stderr,"undefined option -%c ignored. Exiting program\n", - argv[i][1]); - - exit(ERROR); - - } /* switch() */ - } /* if argv[i][0] == '-' */ - - i++; - - /* check for bitstream filename argument (there must always be one, at the very end - of the command line arguments */ - - } /* while() */ - - - /* options sense checking */ - - if(Main_Bitstream_Flag!=1) - { - printf("There must be a main bitstream specified (-b filename)\n"); - } - - /* force display process to show frame pictures */ - if((Output_Type==4 || Output_Type==5) && Frame_Store_Flag) - Display_Progressive_Flag = 1; - else - Display_Progressive_Flag = 0; - -#ifdef VERIFY - /* parse the bitstream, do not actually decode it completely */ - - -#if 0 - if(Output_Type==-1) - { - Decode_Layer = Verify_Flag; - printf("FYI: Decoding bitstream elements up to: %s\n", - Layer_Table[Decode_Layer]); - } - else -#endif - Decode_Layer = ALL_LAYERS; - -#endif /* VERIFY */ - - /* no output type specified */ - if(Output_Type==-1) - { - Output_Type = 9; - Output_Picture_Filename = ""; - } - - -#ifdef DISPLAY - if (Output_Type==T_X11) - { - if(Frame_Store_Flag) - Display_Progressive_Flag = 1; - else - Display_Progressive_Flag = 0; - - Frame_Store_Flag = 1; /* to avoid calling dither() twice */ - } -#endif - - -} - -static void Clear_Options() -{ - Verbose_Flag = 0; - Output_Type = 0; - Output_Picture_Filename = " "; - hiQdither = 0; - Output_Type = 0; - Frame_Store_Flag = 0; - Spatial_Flag = 0; - Lower_Layer_Picture_Filename = " "; - Reference_IDCT_Flag = 0; - Trace_Flag = 0; - Quiet_Flag = 0; - Ersatz_Flag = 0; - Substitute_Picture_Filename = " "; - Two_Streams = 0; - Enhancement_Layer_Bitstream_Filename = " "; - Big_Picture_Flag = 0; - Main_Bitstream_Flag = 0; - Main_Bitstream_Filename = " "; - Verify_Flag = 0; - Stats_Flag = 0; - User_Data_Flag = 0; -} -static void Print_Options() -{ - - printf("Verbose_Flag = %d\n", Verbose_Flag); - printf("Output_Type = %d\n", Output_Type); - printf("Output_Picture_Filename = %s\n", Output_Picture_Filename); - printf("hiQdither = %d\n", hiQdither); - printf("Output_Type = %d\n", Output_Type); - printf("Frame_Store_Flag = %d\n", Frame_Store_Flag); - printf("Spatial_Flag = %d\n", Spatial_Flag); - printf("Lower_Layer_Picture_Filename = %s\n", Lower_Layer_Picture_Filename); - printf("Reference_IDCT_Flag = %d\n", Reference_IDCT_Flag); - printf("Trace_Flag = %d\n", Trace_Flag); - printf("Quiet_Flag = %d\n", Quiet_Flag); - printf("Ersatz_Flag = %d\n", Ersatz_Flag); - printf("Substitute_Picture_Filename = %s\n", Substitute_Picture_Filename); - printf("Two_Streams = %d\n", Two_Streams); - printf("Enhancement_Layer_Bitstream_Filename = %s\n", Enhancement_Layer_Bitstream_Filename); - printf("Big_Picture_Flag = %d\n", Big_Picture_Flag); - printf("Main_Bitstream_Flag = %d\n", Main_Bitstream_Flag); - printf("Main_Bitstream_Filename = %s\n", Main_Bitstream_Filename); - printf("Verify_Flag = %d\n", Verify_Flag); - printf("Stats_Flag = %d\n", Stats_Flag); - printf("User_Data_Flag = %d\n", User_Data_Flag); - -} - -bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t length) +bool ReadMPEGFile (std::ifstream *fp, char *image_buffer, size_t length) { #if 1 fp->read((char*)image_buffer, length); @@ -657,19 +337,10 @@ bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t length) base.read_stream = my_read; base.close_stream = my_close; -// Clear_Options(); -// int argc = 7; -// const char *argv[] = {"mpeg2decode", "-b", "/tmp/etiam.mpeg", "-f", "-r", "-o3", "/tmp/rec%d"}; -// -// /* decode command line arguments */ -// Process_Options(argc,argv); -// Print_Options(); - Verbose_Flag = 0; - Output_Type = 3; + Output_Type = T_MEM; //store in mem Output_Picture_Filename = "/tmp/rec%d"; hiQdither = 0; - Output_Type = 3; Frame_Store_Flag = 1; Spatial_Flag = 0; Lower_Layer_Picture_Filename = ""; @@ -683,9 +354,11 @@ bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t length) Big_Picture_Flag = 0; Main_Bitstream_Flag = 1; Main_Bitstream_Filename = "/tmp/etiam.mpeg"; + Main_Bitstream_Filename = "/tmp/ts.mpg"; Verify_Flag = 0; Stats_Flag = 0; User_Data_Flag = 0; + OUTMEM = (char*)image_buffer; ld = &base; /* select base layer context */ @@ -787,6 +460,12 @@ bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t length) DeInitialize_Decoder(); +#if 0 + std::ofstream out2("/tmp/etiam.raw"); + out2.write((char*)image_buffer, 352*240*3*10); + out2.close(); +#endif + return ret; } -- 2.48.1