Main Page   Class Overview   Pixels   Images   Geometry   Quick Index  

mpegfile.h

00001 #ifndef MPEGFILE_H
00002 #define MPEGFILE_H
00003 
00004 /* MpegFile class                                               */
00005 
00006 //#include "videofile.h"
00007 
00008 
00009 typedef struct {
00010     int type;
00011     union { int showno, last_Iframe;};      
00012     long seekvalue;     /* reference to the last I frame    */
00013     /* for packetized sequence  */
00014     long packet_seekvalue;  /* access point to video packet */
00015     long bytes_to_advance;  /* how many bytes from packet start */
00016 } PicInfo;
00017 
00018 
00019 typedef struct {
00020   /* bit input */
00021   int Infile;
00022   unsigned char Rdbfr[2048];
00023   unsigned char *Rdptr;
00024   unsigned char Inbfr[16];
00025   /* from mpeg2play */
00026   unsigned int Bfr;
00027   unsigned char *Rdmax;
00028   int Incnt;
00029   int Bitcnt;
00030   /* sequence header and quant_matrix_extension() */
00031   int intra_quantizer_matrix[64];
00032   int non_intra_quantizer_matrix[64];
00033   int chroma_intra_quantizer_matrix[64];
00034   int chroma_non_intra_quantizer_matrix[64];
00035 
00036   int load_intra_quantizer_matrix;
00037   int load_non_intra_quantizer_matrix;
00038   int load_chroma_intra_quantizer_matrix;
00039   int load_chroma_non_intra_quantizer_matrix;
00040 
00041   int MPEG2_Flag;
00042   /* sequence scalable extension */
00043   int scalable_mode;
00044   /* picture coding extension */
00045   int q_scale_type;
00046   int alternate_scan;
00047   /* picture spatial scalable extension */
00048   int pict_scal;
00049   /* slice/macroblock */
00050   int priority_breakpoint;
00051   int quantizer_scale;
00052   int intra_slice;
00053   short block[12][64];
00054 } layer_data;
00055 
00056 
00057 class MpegFile {
00058         unsigned char *CurrentData(int number_of_channel);
00059 public:
00060 /* decoder operation control variables */
00061         int hiQdither;
00062  
00063 /* decoder operation control flags */
00064         int Quiet_Flag;
00065         int Trace_Flag;
00066         int Fault_Flag;
00067         int Verbose_Flag;
00068         int Two_Streams;
00069         int Spatial_Flag;
00070         int Reference_IDCT_Flag;
00071         int Frame_Store_Flag;
00072         int System_Stream_Flag;     /*0 : regular stream; 1: packetized*/
00073         int Display_Progressive_Flag;
00074         int Ersatz_Flag;
00075         int Big_Picture_Flag;
00076         int Verify_Flag;
00077         int Stats_Flag;
00078         int User_Data_Flag;
00079         int Main_Bitstream_Flag;
00080 
00081 /* filenames */
00082     char *Output_Picture_Filename;
00083     char *Substitute_Picture_Filename;
00084     const char *Main_Bitstream_Filename;
00085     char *Enhancement_Layer_Bitstream_Filename;
00086 
00087 /* buffers for multiuse purposes */
00088     char Error_Text[256];
00089     unsigned char *Clip;
00090 
00091 /* pointers to generic picture buffers */
00092     unsigned char *backward_reference_frame[3];
00093     unsigned char *forward_reference_frame[3];
00094 
00095     unsigned char *auxframe[3];
00096     unsigned char *current_frame[3];
00097     unsigned char *substitute_frame[3];
00098     
00099 /* pointers to scalability picture buffers */
00100     unsigned char *llframe0[3];
00101     unsigned char *llframe1[3];
00102 
00103     short *lltmp;
00104     char *Lower_Layer_Picture_Filename;
00105 
00106 /* non-normative variables derived from normative elements */
00107     int Coded_Picture_Width;
00108     int Coded_Picture_Height;
00109     int Chroma_Width;
00110     int Chroma_Height;
00111     int block_count;
00112     int Second_Field;
00113     int profile, level;
00114 
00115 /* normative derived variables (as per ISO/IEC 13818-2) */
00116     int horizontal_size;
00117     int vertical_size;
00118     int mb_width;
00119     int mb_height;
00120     double bit_rate;
00121     double frame_rate;
00122 
00123 /* header   */
00124 /* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
00125     int aspect_ratio_information;
00126     int frame_rate_code;
00127     int bit_rate_value;
00128     int vbv_buffer_size;
00129     int constrained_parameters_flag;
00130 
00131 /* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
00132     int profile_and_level_indication;
00133     int progressive_sequence;
00134     int chroma_format;
00135     int low_delay;
00136     int frame_rate_extension_n;
00137     int frame_rate_extension_d;
00138 
00139 /* ISO/IEC 13818-2 section 6.2.2.4:  sequence_display_extension() */
00140     int video_format;
00141     int color_description;
00142     int color_primaries;
00143     int transfer_characteristics;
00144     int matrix_coefficients;
00145     int display_horizontal_size;
00146     int display_vertical_size;
00147 
00148 /* ISO/IEC 13818-2 section 6.2.3: picture_header() */
00149     int temporal_reference;
00150     int picture_coding_type;
00151     int vbv_delay;
00152     int full_pel_forward_vector;
00153     int forward_f_code;
00154     int full_pel_backward_vector;
00155     int backward_f_code;
00156 
00157 
00158 /* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
00159     int f_code[2][2];
00160     int intra_dc_precision;
00161     int picture_structure;
00162     int top_field_first;
00163     int frame_pred_frame_dct;
00164     int concealment_motion_vectors;
00165 
00166     int intra_vlc_format;
00167 
00168     int repeat_first_field;
00169 
00170     int chroma_420_type;
00171     int progressive_frame;
00172     int composite_display_flag;
00173     int v_axis;
00174     int field_sequence;
00175     int sub_carrier;
00176     int burst_amplitude;
00177     int sub_carrier_phase;
00178 
00179 
00180 /* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */
00181     int frame_center_horizontal_offset[3];
00182     int frame_center_vertical_offset[3];
00183 
00184 /* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */
00185     int layer_id;
00186     int lower_layer_prediction_horizontal_size;
00187     int lower_layer_prediction_vertical_size;
00188     int horizontal_subsampling_factor_m;
00189     int horizontal_subsampling_factor_n;
00190     int vertical_subsampling_factor_m;
00191     int vertical_subsampling_factor_n;
00192 
00193 
00194 /* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header 
00195 */
00196     int lower_layer_temporal_reference;
00197     int lower_layer_horizontal_offset;
00198     int lower_layer_vertical_offset;
00199     int spatial_temporal_weight_code_table_index;
00200     int lower_layer_progressive_frame;
00201     int lower_layer_deinterlaced_field_select;
00202 
00203 
00204 /* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */
00205     int copyright_flag;
00206     int copyright_identifier;
00207     int original_or_copy;
00208     int copyright_number_1;
00209     int copyright_number_2;
00210     int copyright_number_3;
00211 
00212 /* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header()  */
00213     int drop_flag;
00214     int hour;
00215     int minute;
00216     int sec;
00217     int frame;
00218     int closed_gop;
00219     int broken_link;
00220 
00221     int Decode_Layer;
00222 
00223     int global_MBA;
00224     int global_pic;
00225     int True_Framenum;
00226 
00227     /****hieu*****/
00228     long infile_read_position;
00229     long infile_read_position_packet;
00230     long infile_read_position_afterpacket;
00231     int encoded_frame_number;
00232     int encoded_frame_number_max;
00233     unsigned char *CurrentDataPtr[3];
00234     int Build_index_mode;
00235     /*************/
00236 
00237 /* indices for access to the nearest I frame    */
00238     int number_of_frames;
00239     PicInfo *picinfolist;
00240 
00241 /* current frame number     */
00242     int Bitstream_Frame_number, Sequence_Frame_number;
00243 
00244 /* layer specific variables (needed for SNR and DP scalability) */
00245     layer_data  base, enhan, *ld;
00246 
00247     /* constructor  & destructor */
00248     /* MpegFile(const char *filename);*/
00249     MpegFile(const char *filename, const char* indexFilename);
00250      MpegFile() {};
00251      ~MpegFile();
00252 
00253     /* overloading methods of VideoFile */
00254     
00255     virtual int Type();
00256     virtual int FrameWidth();
00257     virtual int FrameHeight();
00258     virtual int FrameDepth();
00259     virtual int NumOfFrames();
00260     virtual int CurrentFrame();
00261     virtual int MoveToFrame(int no);
00262     virtual void ExportRGB(int *buff);  
00263     virtual void ExportGrey(int *buff); 
00264     virtual int PixelGrey(int x, int y);
00265     virtual int PixelGrey(long npix);   
00266     virtual void PixelRGB(int x, int y, int &r, int &g, int &b);
00267     virtual void PixelRGB(long npix, int &r, int &g, int &b);
00268 };
00269 
00270 inline int MpegFile::Type() { return 1;}
00271 
00272 inline int MpegFile::FrameWidth() { return horizontal_size; }
00273 
00274 inline int MpegFile::FrameHeight() { return vertical_size;}
00275 
00276 inline int MpegFile::FrameDepth() { return 1;}
00277 
00278 inline int MpegFile::NumOfFrames() { return number_of_frames; }
00279 
00280 inline int MpegFile::CurrentFrame() { return Bitstream_Frame_number;}
00281 
00282 void make_index_forMPEG( const char *filename, const char* idxname);
00283 
00284 
00285 #endif
00286 
00287 
00288 

Generated on Tue Jan 8 13:59:18 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001