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
}
-/* 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);
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 = "";
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 */
DeInitialize_Decoder();
+#if 0
+ std::ofstream out2("/tmp/etiam.raw");
+ out2.write((char*)image_buffer, 352*240*3*10);
+ out2.close();
+#endif
+
return ret;
}