]> Creatis software - gdcm.git/blob - src/gdcmmpeg2/src/mpeg2dec/global.h
COMP: Fix compilation on mingw
[gdcm.git] / src / gdcmmpeg2 / src / mpeg2dec / global.h
1 /* global.h, global variables                                               */
2
3 /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
4
5 /*
6  * Disclaimer of Warranty
7  *
8  * These software programs are available to the user without any license fee or
9  * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
10  * any and all warranties, whether express, implied, or statuary, including any
11  * implied warranties or merchantability or of fitness for a particular
12  * purpose.  In no event shall the copyright-holder be liable for any
13  * incidental, punitive, or consequential damages of any kind whatsoever
14  * arising from the use of these programs.
15  *
16  * This disclaimer of warranty extends to the user of these programs and user's
17  * customers, employees, agents, transferees, successors, and assigns.
18  *
19  * The MPEG Software Simulation Group does not represent or warrant that the
20  * programs furnished hereunder are free of infringement of any third-party
21  * patents.
22  *
23  * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
24  * are subject to royalty fees to patent holders.  Many of these patents are
25  * general enough such that they are unavoidable regardless of implementation
26  * design.
27  *
28  */
29
30 #include "mpeg2dec.h"
31
32 /* choose between declaration (GLOBAL undefined)
33  * and definition (GLOBAL defined)
34  * GLOBAL is defined in exactly one file mpeg2dec.c)
35  */
36
37 #ifndef GLOBAL
38 #define EXTERN extern
39 #else
40 #define EXTERN
41 #endif
42
43 /* prototypes of global functions */
44 /* readpic.c */
45 void Substitute_Frame_Buffer _ANSI_ARGS_ ((int bitstream_framenum, 
46   int sequence_framenum));
47
48 /* Get_Bits.c */
49 void Initialize_Buffer _ANSI_ARGS_((void));
50 void Fill_Buffer _ANSI_ARGS_((void));
51 unsigned int Show_Bits _ANSI_ARGS_((int n));
52 unsigned int Get_Bits1 _ANSI_ARGS_((void));
53 void Flush_Buffer _ANSI_ARGS_((int n));
54 unsigned int Get_Bits _ANSI_ARGS_((int n));
55 int Get_Byte _ANSI_ARGS_((void));
56 int Get_Word _ANSI_ARGS_((void));
57
58 /* systems.c */
59 void Next_Packet _ANSI_ARGS_((void));
60 int Get_Long _ANSI_ARGS_((void));
61 void Flush_Buffer32 _ANSI_ARGS_((void));
62 unsigned int Get_Bits32 _ANSI_ARGS_((void));
63
64
65 /* getblk.c */
66 void Decode_MPEG1_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
67 void Decode_MPEG1_Non_Intra_Block _ANSI_ARGS_((int comp));
68 void Decode_MPEG2_Intra_Block _ANSI_ARGS_((int comp, int dc_dct_pred[]));
69 void Decode_MPEG2_Non_Intra_Block _ANSI_ARGS_((int comp));
70
71 /* gethdr.c */
72 int Get_Hdr _ANSI_ARGS_((void));
73 void next_start_code _ANSI_ARGS_((void));
74 int slice_header _ANSI_ARGS_((void));
75 void marker_bit _ANSI_ARGS_((char *text));
76
77 /* getpic.c */
78 void Decode_Picture _ANSI_ARGS_((int bitstream_framenum, 
79   int sequence_framenum));
80 void Output_Last_Frame_of_Sequence _ANSI_ARGS_((int framenum));
81
82 /* getvlc.c */
83 int Get_macroblock_type _ANSI_ARGS_((void));
84 int Get_motion_code _ANSI_ARGS_((void));
85 int Get_dmvector _ANSI_ARGS_((void));
86 int Get_coded_block_pattern _ANSI_ARGS_((void));
87 int Get_macroblock_address_increment _ANSI_ARGS_((void));
88 int Get_Luma_DC_dct_diff _ANSI_ARGS_((void));
89 int Get_Chroma_DC_dct_diff _ANSI_ARGS_((void));
90
91 /* idct.c */
92 void Fast_IDCT _ANSI_ARGS_((short *block));
93 void Initialize_Fast_IDCT _ANSI_ARGS_((void));
94
95 /* Reference_IDCT.c */
96 void Initialize_Reference_IDCT _ANSI_ARGS_((void));
97 void Reference_IDCT _ANSI_ARGS_((short *block));
98
99 /* motion.c */
100 void motion_vectors _ANSI_ARGS_((int PMV[2][2][2], int dmvector[2],
101   int motion_vertical_field_select[2][2], int s, int motion_vector_count, 
102   int mv_format, int h_r_size, int v_r_size, int dmv, int mvscale));
103 void motion_vector _ANSI_ARGS_((int *PMV, int *dmvector,
104   int h_r_size, int v_r_size, int dmv, int mvscale, int full_pel_vector));
105 void Dual_Prime_Arithmetic _ANSI_ARGS_((int DMV[][2], int *dmvector, int mvx, int mvy));
106
107 /* mpeg2dec.c */
108 void Error _ANSI_ARGS_((char *text));
109 void Warning _ANSI_ARGS_((char *text));
110 void Print_Bits _ANSI_ARGS_((int code, int bits, int len));
111
112 /* recon.c */
113 void form_predictions _ANSI_ARGS_((int bx, int by, int macroblock_type, 
114   int motion_type, int PMV[2][2][2], int motion_vertical_field_select[2][2], 
115   int dmvector[2], int stwtype));
116
117 /* spatscal.c */
118 void Spatial_Prediction _ANSI_ARGS_((void));
119
120 /* store.c */
121 void Write_Frame _ANSI_ARGS_((unsigned char *src[], int frame));
122
123 #ifdef DISPLAY
124 /* display.c */
125 void Initialize_Display_Process _ANSI_ARGS_((char *name));
126 void Terminate_Display_Process _ANSI_ARGS_((void));
127 void Display_Second_Field _ANSI_ARGS_((void));
128 void dither _ANSI_ARGS_((unsigned char *src[]));
129 void Initialize_Dither_Matrix _ANSI_ARGS_((void));
130 #endif
131
132 /* global variables */
133
134 EXTERN char Version[]
135 #ifdef GLOBAL
136   ="mpeg2decode V1.2a, 96/07/19"
137 #endif
138 ;
139
140 EXTERN char Author[]
141 #ifdef GLOBAL
142   ="(C) 1996, MPEG Software Simulation Group"
143 #endif
144 ;
145
146
147 /* zig-zag and alternate scan patterns */
148 EXTERN unsigned char scan[2][64]
149 #ifdef GLOBAL
150 =
151 {
152   { /* Zig-Zag scan pattern  */
153     0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
154     12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
155     35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
156     58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
157   },
158   { /* Alternate scan pattern */
159     0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
160     41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
161     51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
162     53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
163   }
164 }
165 #endif
166 ;
167
168 /* default intra quantization matrix */
169 EXTERN unsigned char default_intra_quantizer_matrix[64]
170 #ifdef GLOBAL
171 =
172 {
173   8, 16, 19, 22, 26, 27, 29, 34,
174   16, 16, 22, 24, 27, 29, 34, 37,
175   19, 22, 26, 27, 29, 34, 34, 38,
176   22, 22, 26, 27, 29, 34, 37, 40,
177   22, 26, 27, 29, 32, 35, 40, 48,
178   26, 27, 29, 32, 35, 40, 48, 58,
179   26, 27, 29, 34, 38, 46, 56, 69,
180   27, 29, 35, 38, 46, 56, 69, 83
181 }
182 #endif
183 ;
184
185 /* non-linear quantization coefficient table */
186 EXTERN unsigned char Non_Linear_quantizer_scale[32]
187 #ifdef GLOBAL
188 =
189 {
190    0, 1, 2, 3, 4, 5, 6, 7,
191    8,10,12,14,16,18,20,22,
192   24,28,32,36,40,44,48,52,
193   56,64,72,80,88,96,104,112
194 }
195 #endif
196 ;
197
198 /* color space conversion coefficients
199  * for YCbCr -> RGB mapping
200  *
201  * entries are {crv,cbu,cgu,cgv}
202  *
203  * crv=(255/224)*65536*(1-cr)/0.5
204  * cbu=(255/224)*65536*(1-cb)/0.5
205  * cgu=(255/224)*65536*(cb/cg)*(1-cb)/0.5
206  * cgv=(255/224)*65536*(cr/cg)*(1-cr)/0.5
207  *
208  * where Y=cr*R+cg*G+cb*B (cr+cg+cb=1)
209  */
210
211 /* ISO/IEC 13818-2 section 6.3.6 sequence_display_extension() */
212
213 EXTERN int Inverse_Table_6_9[8][4]
214 #ifdef GLOBAL
215 =
216 {
217   {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
218   {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
219   {104597, 132201, 25675, 53279}, /* unspecified */
220   {104597, 132201, 25675, 53279}, /* reserved */
221   {104448, 132798, 24759, 53109}, /* FCC */
222   {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
223   {104597, 132201, 25675, 53279}, /* SMPTE 170M */
224   {117579, 136230, 16907, 35559}  /* SMPTE 240M (1987) */
225 }
226 #endif
227 ;
228
229
230
231
232
233 /* output types (Output_Type) */
234 #define T_YUV   0
235 #define T_SIF   1
236 #define T_TGA   2
237 #define T_PPM   3
238 #define T_X11   4
239 #define T_X11HIQ 5
240
241 /* decoder operation control variables */
242 EXTERN int Output_Type;
243 EXTERN int hiQdither;
244
245 /* decoder operation control flags */
246 EXTERN int Quiet_Flag;
247 EXTERN int Trace_Flag;
248 EXTERN int Fault_Flag;
249 EXTERN int Verbose_Flag;
250 EXTERN int Two_Streams;
251 EXTERN int Spatial_Flag;
252 EXTERN int Reference_IDCT_Flag;
253 EXTERN int Frame_Store_Flag;
254 EXTERN int System_Stream_Flag;
255 EXTERN int Display_Progressive_Flag;
256 EXTERN int Ersatz_Flag;
257 EXTERN int Big_Picture_Flag;
258 EXTERN int Verify_Flag;
259 EXTERN int Stats_Flag;
260 EXTERN int User_Data_Flag;
261 EXTERN int Main_Bitstream_Flag;
262
263
264 /* filenames */
265 EXTERN char *Output_Picture_Filename;
266 EXTERN char *Substitute_Picture_Filename;
267 EXTERN char *Main_Bitstream_Filename; 
268 EXTERN char *Enhancement_Layer_Bitstream_Filename; 
269
270
271 /* buffers for multiuse purposes */
272 EXTERN char Error_Text[256];
273 EXTERN unsigned char *Clip;
274
275 /* pointers to generic picture buffers */
276 EXTERN unsigned char *backward_reference_frame[3];
277 EXTERN unsigned char *forward_reference_frame[3];
278
279 EXTERN unsigned char *auxframe[3];
280 EXTERN unsigned char *current_frame[3];
281 EXTERN unsigned char *substitute_frame[3];
282
283
284 /* pointers to scalability picture buffers */
285 EXTERN unsigned char *llframe0[3];
286 EXTERN unsigned char *llframe1[3];
287
288 EXTERN short *lltmp;
289 EXTERN char *Lower_Layer_Picture_Filename;
290
291
292
293
294 /* non-normative variables derived from normative elements */
295 EXTERN int Coded_Picture_Width;
296 EXTERN int Coded_Picture_Height;
297 EXTERN int Chroma_Width;
298 EXTERN int Chroma_Height;
299 EXTERN int block_count;
300 EXTERN int Second_Field;
301 EXTERN int profile, level;
302
303 /* normative derived variables (as per ISO/IEC 13818-2) */
304 EXTERN int horizontal_size;
305 EXTERN int vertical_size;
306 EXTERN int mb_width;
307 EXTERN int mb_height;
308 EXTERN double bit_rate;
309 EXTERN double frame_rate; 
310
311
312
313 /* headers */
314
315 /* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
316 EXTERN int aspect_ratio_information;
317 EXTERN int frame_rate_code; 
318 EXTERN int bit_rate_value; 
319 EXTERN int vbv_buffer_size;
320 EXTERN int constrained_parameters_flag;
321
322 /* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
323 EXTERN int profile_and_level_indication;
324 EXTERN int progressive_sequence;
325 EXTERN int chroma_format;
326 EXTERN int low_delay;
327 EXTERN int frame_rate_extension_n;
328 EXTERN int frame_rate_extension_d;
329
330 /* ISO/IEC 13818-2 section 6.2.2.4:  sequence_display_extension() */
331 EXTERN int video_format;  
332 EXTERN int color_description;
333 EXTERN int color_primaries;
334 EXTERN int transfer_characteristics;
335 EXTERN int matrix_coefficients;
336 EXTERN int display_horizontal_size;
337 EXTERN int display_vertical_size;
338
339 /* ISO/IEC 13818-2 section 6.2.3: picture_header() */
340 EXTERN int temporal_reference;
341 EXTERN int picture_coding_type;
342 EXTERN int vbv_delay;
343 EXTERN int full_pel_forward_vector;
344 EXTERN int forward_f_code;
345 EXTERN int full_pel_backward_vector;
346 EXTERN int backward_f_code;
347
348
349 /* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
350 EXTERN int f_code[2][2];
351 EXTERN int intra_dc_precision;
352 EXTERN int picture_structure;
353 EXTERN int top_field_first;
354 EXTERN int frame_pred_frame_dct;
355 EXTERN int concealment_motion_vectors;
356
357 EXTERN int intra_vlc_format;
358
359 EXTERN int repeat_first_field;
360
361 EXTERN int chroma_420_type;
362 EXTERN int progressive_frame;
363 EXTERN int composite_display_flag;
364 EXTERN int v_axis;
365 EXTERN int field_sequence;
366 EXTERN int sub_carrier;
367 EXTERN int burst_amplitude;
368 EXTERN int sub_carrier_phase;
369
370
371
372 /* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */
373 EXTERN int frame_center_horizontal_offset[3];
374 EXTERN int frame_center_vertical_offset[3];
375
376
377
378 /* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */
379 EXTERN int layer_id;
380 EXTERN int lower_layer_prediction_horizontal_size;
381 EXTERN int lower_layer_prediction_vertical_size;
382 EXTERN int horizontal_subsampling_factor_m;
383 EXTERN int horizontal_subsampling_factor_n;
384 EXTERN int vertical_subsampling_factor_m;
385 EXTERN int vertical_subsampling_factor_n;
386
387
388 /* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header */
389 EXTERN int lower_layer_temporal_reference;
390 EXTERN int lower_layer_horizontal_offset;
391 EXTERN int lower_layer_vertical_offset;
392 EXTERN int spatial_temporal_weight_code_table_index;
393 EXTERN int lower_layer_progressive_frame;
394 EXTERN int lower_layer_deinterlaced_field_select;
395
396
397
398
399
400
401 /* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */
402 EXTERN int copyright_flag;
403 EXTERN int copyright_identifier;
404 EXTERN int original_or_copy;
405 EXTERN int copyright_number_1;
406 EXTERN int copyright_number_2;
407 EXTERN int copyright_number_3;
408
409 /* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header()  */
410 EXTERN int drop_flag;
411 EXTERN int hour;
412 EXTERN int minute;
413 EXTERN int sec;
414 EXTERN int frame;
415 EXTERN int closed_gop;
416 EXTERN int broken_link;
417
418
419
420 /* FIXME */
421 #include <sys/types.h>
422 #if defined(_MSC_VER) || defined(__BORLANDC__)
423 typedef int ssize_t;
424 #endif
425
426 /* layer specific variables (needed for SNR and DP scalability) */
427 EXTERN struct layer_data {
428   /* bit input */
429   int Infile;
430   int  (*open_stream) (char *filename);
431   off_t   (*seek_stream) (int infile, off_t offset,int whence);
432   ssize_t (*read_stream) (int infile, void *buf, size_t count);
433   int  (*close_stream) (int infile);
434   unsigned char Rdbfr[2048];
435   unsigned char *Rdptr;
436   unsigned char Inbfr[16];
437   /* from mpeg2play */
438   unsigned int Bfr;
439   unsigned char *Rdmax;
440   int Incnt;
441   int Bitcnt;
442   /* sequence header and quant_matrix_extension() */
443   int intra_quantizer_matrix[64];
444   int non_intra_quantizer_matrix[64];
445   int chroma_intra_quantizer_matrix[64];
446   int chroma_non_intra_quantizer_matrix[64];
447   
448   int load_intra_quantizer_matrix;
449   int load_non_intra_quantizer_matrix;
450   int load_chroma_intra_quantizer_matrix;
451   int load_chroma_non_intra_quantizer_matrix;
452
453   int MPEG2_Flag;
454   /* sequence scalable extension */
455   int scalable_mode;
456   /* picture coding extension */
457   int q_scale_type;
458   int alternate_scan;
459   /* picture spatial scalable extension */
460   int pict_scal;
461   /* slice/macroblock */
462   int priority_breakpoint;
463   int quantizer_scale;
464   int intra_slice;
465   short block[12][64];
466 } base, enhan, *ld;
467
468
469
470 #ifdef VERIFY
471 EXTERN int verify_sequence_header;
472 EXTERN int verify_group_of_pictures_header;
473 EXTERN int verify_picture_header;
474 EXTERN int verify_slice_header;
475 EXTERN int verify_sequence_extension;
476 EXTERN int verify_sequence_display_extension;
477 EXTERN int verify_quant_matrix_extension;
478 EXTERN int verify_sequence_scalable_extension;
479 EXTERN int verify_picture_display_extension;
480 EXTERN int verify_picture_coding_extension;
481 EXTERN int verify_picture_spatial_scalable_extension;
482 EXTERN int verify_picture_temporal_scalable_extension;
483 EXTERN int verify_copyright_extension;
484 #endif /* VERIFY */
485
486
487 EXTERN int Decode_Layer;
488
489 /* verify.c */
490 #ifdef VERIFY
491 void Check_Headers _ANSI_ARGS_((int Bitstream_Framenum, int Sequence_Framenum));
492 void Clear_Verify_Headers _ANSI_ARGS_((void));
493 #endif /* VERIFY */
494
495
496 EXTERN int global_MBA;
497 EXTERN int global_pic;
498 EXTERN int True_Framenum;