00001 #ifndef MPEGFILE_H
00002 #define MPEGFILE_H
00003
00004
00005
00006
00007
00008
00009 typedef struct {
00010 int type;
00011 union { int showno, last_Iframe;};
00012 long seekvalue;
00013
00014 long packet_seekvalue;
00015 long bytes_to_advance;
00016 } PicInfo;
00017
00018
00019 typedef struct {
00020
00021 int Infile;
00022 unsigned char Rdbfr[2048];
00023 unsigned char *Rdptr;
00024 unsigned char Inbfr[16];
00025
00026 unsigned int Bfr;
00027 unsigned char *Rdmax;
00028 int Incnt;
00029 int Bitcnt;
00030
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
00043 int scalable_mode;
00044
00045 int q_scale_type;
00046 int alternate_scan;
00047
00048 int pict_scal;
00049
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
00061 int hiQdither;
00062
00063
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;
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
00082 char *Output_Picture_Filename;
00083 char *Substitute_Picture_Filename;
00084 const char *Main_Bitstream_Filename;
00085 char *Enhancement_Layer_Bitstream_Filename;
00086
00087
00088 char Error_Text[256];
00089 unsigned char *Clip;
00090
00091
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
00100 unsigned char *llframe0[3];
00101 unsigned char *llframe1[3];
00102
00103 short *lltmp;
00104 char *Lower_Layer_Picture_Filename;
00105
00106
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
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
00124
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
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
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
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
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
00181 int frame_center_horizontal_offset[3];
00182 int frame_center_vertical_offset[3];
00183
00184
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
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
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
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
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
00238 int number_of_frames;
00239 PicInfo *picinfolist;
00240
00241
00242 int Bitstream_Frame_number, Sequence_Frame_number;
00243
00244
00245 layer_data base, enhan, *ld;
00246
00247
00248
00249 MpegFile(const char *filename, const char* indexFilename);
00250 MpegFile() {};
00251 ~MpegFile();
00252
00253
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