]> Creatis software - gdcm.git/blob - src/gdcmmpeg2/src/mpeg2dec/global.h
COMP: Fix warning
[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_((const 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_((const 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 FreeStaticBuffer _ANSI_ARGS_((void));
122 void Write_Frame _ANSI_ARGS_((unsigned char *src[], int frame));
123
124 #ifdef DISPLAY
125 /* display.c */
126 void Initialize_Display_Process _ANSI_ARGS_((char *name));
127 void Terminate_Display_Process _ANSI_ARGS_((void));
128 void Display_Second_Field _ANSI_ARGS_((void));
129 void dither _ANSI_ARGS_((unsigned char *src[]));
130 void Initialize_Dither_Matrix _ANSI_ARGS_((void));
131 #endif
132
133 /* global variables */
134
135 EXTERN char Version[]
136 #ifdef GLOBAL
137   ="mpeg2decode V1.2a, 96/07/19"
138 #endif
139 ;
140
141 EXTERN char Author[]
142 #ifdef GLOBAL
143   ="(C) 1996, MPEG Software Simulation Group"
144 #endif
145 ;
146
147
148 /* zig-zag and alternate scan patterns */
149 EXTERN unsigned char scan[2][64]
150 #ifdef GLOBAL
151 =
152 {
153   { /* Zig-Zag scan pattern  */
154     0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,
155     12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,
156     35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,
157     58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63
158   },
159   { /* Alternate scan pattern */
160     0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49,
161     41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43,
162     51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45,
163     53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63
164   }
165 }
166 #endif
167 ;
168
169 /* default intra quantization matrix */
170 EXTERN unsigned char default_intra_quantizer_matrix[64]
171 #ifdef GLOBAL
172 =
173 {
174   8, 16, 19, 22, 26, 27, 29, 34,
175   16, 16, 22, 24, 27, 29, 34, 37,
176   19, 22, 26, 27, 29, 34, 34, 38,
177   22, 22, 26, 27, 29, 34, 37, 40,
178   22, 26, 27, 29, 32, 35, 40, 48,
179   26, 27, 29, 32, 35, 40, 48, 58,
180   26, 27, 29, 34, 38, 46, 56, 69,
181   27, 29, 35, 38, 46, 56, 69, 83
182 }
183 #endif
184 ;
185
186 /* non-linear quantization coefficient table */
187 EXTERN unsigned char Non_Linear_quantizer_scale[32]
188 #ifdef GLOBAL
189 =
190 {
191    0, 1, 2, 3, 4, 5, 6, 7,
192    8,10,12,14,16,18,20,22,
193   24,28,32,36,40,44,48,52,
194   56,64,72,80,88,96,104,112
195 }
196 #endif
197 ;
198
199 /* color space conversion coefficients
200  * for YCbCr -> RGB mapping
201  *
202  * entries are {crv,cbu,cgu,cgv}
203  *
204  * crv=(255/224)*65536*(1-cr)/0.5
205  * cbu=(255/224)*65536*(1-cb)/0.5
206  * cgu=(255/224)*65536*(cb/cg)*(1-cb)/0.5
207  * cgv=(255/224)*65536*(cr/cg)*(1-cr)/0.5
208  *
209  * where Y=cr*R+cg*G+cb*B (cr+cg+cb=1)
210  */
211
212 /* ISO/IEC 13818-2 section 6.3.6 sequence_display_extension() */
213
214 EXTERN int Inverse_Table_6_9[8][4]
215 #ifdef GLOBAL
216 =
217 {
218   {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
219   {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
220   {104597, 132201, 25675, 53279}, /* unspecified */
221   {104597, 132201, 25675, 53279}, /* reserved */
222   {104448, 132798, 24759, 53109}, /* FCC */
223   {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
224   {104597, 132201, 25675, 53279}, /* SMPTE 170M */
225   {117579, 136230, 16907, 35559}  /* SMPTE 240M (1987) */
226 }
227 #endif
228 ;
229
230
231
232
233
234 /* output types (Output_Type) */
235 #define T_YUV   0
236 #define T_SIF   1
237 #define T_TGA   2
238 #define T_PPM   3
239 #define T_X11   4
240 #define T_X11HIQ 5
241 #define T_MEM    6
242
243 /* decoder operation control variables */
244 EXTERN int Output_Type;
245 EXTERN int hiQdither;
246
247 /* decoder operation control flags */
248 EXTERN int Quiet_Flag;
249 EXTERN int Trace_Flag;
250 EXTERN int Fault_Flag;
251 EXTERN int Verbose_Flag;
252 EXTERN int Two_Streams;
253 EXTERN int Spatial_Flag;
254 EXTERN int Reference_IDCT_Flag;
255 EXTERN int Frame_Store_Flag;
256 EXTERN int System_Stream_Flag;
257 EXTERN int Display_Progressive_Flag;
258 EXTERN int Ersatz_Flag;
259 EXTERN int Big_Picture_Flag;
260 EXTERN int Verify_Flag;
261 EXTERN int Stats_Flag;
262 EXTERN int User_Data_Flag;
263 EXTERN int Main_Bitstream_Flag;
264
265
266 /* filenames */
267 EXTERN const char *Output_Picture_Filename;
268 EXTERN const char *Substitute_Picture_Filename;
269 EXTERN const char *Main_Bitstream_Filename; 
270 EXTERN const char *Enhancement_Layer_Bitstream_Filename; 
271
272 /* Pointer to allocated memory */
273 EXTERN char *OUTMEM;
274
275 /* buffers for multiuse purposes */
276 EXTERN char Error_Text[256];
277 EXTERN unsigned char *Clip;
278
279 /* pointers to generic picture buffers */
280 EXTERN unsigned char *backward_reference_frame[3];
281 EXTERN unsigned char *forward_reference_frame[3];
282
283 EXTERN unsigned char *auxframe[3];
284 EXTERN unsigned char *current_frame[3];
285 EXTERN unsigned char *substitute_frame[3];
286
287
288 /* pointers to scalability picture buffers */
289 EXTERN unsigned char *llframe0[3];
290 EXTERN unsigned char *llframe1[3];
291
292 EXTERN short *lltmp;
293 EXTERN const char *Lower_Layer_Picture_Filename;
294
295
296
297
298 /* non-normative variables derived from normative elements */
299 EXTERN int Coded_Picture_Width;
300 EXTERN int Coded_Picture_Height;
301 EXTERN int Chroma_Width;
302 EXTERN int Chroma_Height;
303 EXTERN int block_count;
304 EXTERN int Second_Field;
305 EXTERN int profile, level;
306
307 /* normative derived variables (as per ISO/IEC 13818-2) */
308 EXTERN int horizontal_size;
309 EXTERN int vertical_size;
310 EXTERN int mb_width;
311 EXTERN int mb_height;
312 EXTERN double bit_rate;
313 EXTERN double frame_rate; 
314
315
316
317 /* headers */
318
319 /* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
320 EXTERN int aspect_ratio_information;
321 EXTERN int frame_rate_code; 
322 EXTERN int bit_rate_value; 
323 EXTERN int vbv_buffer_size;
324 EXTERN int constrained_parameters_flag;
325
326 /* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
327 EXTERN int profile_and_level_indication;
328 EXTERN int progressive_sequence;
329 EXTERN int chroma_format;
330 EXTERN int low_delay;
331 EXTERN int frame_rate_extension_n;
332 EXTERN int frame_rate_extension_d;
333
334 /* ISO/IEC 13818-2 section 6.2.2.4:  sequence_display_extension() */
335 EXTERN int video_format;  
336 EXTERN int color_description;
337 EXTERN int color_primaries;
338 EXTERN int transfer_characteristics;
339 EXTERN int matrix_coefficients;
340 EXTERN int display_horizontal_size;
341 EXTERN int display_vertical_size;
342
343 /* ISO/IEC 13818-2 section 6.2.3: picture_header() */
344 EXTERN int temporal_reference;
345 EXTERN int picture_coding_type;
346 EXTERN int vbv_delay;
347 EXTERN int full_pel_forward_vector;
348 EXTERN int forward_f_code;
349 EXTERN int full_pel_backward_vector;
350 EXTERN int backward_f_code;
351
352
353 /* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
354 EXTERN int f_code[2][2];
355 EXTERN int intra_dc_precision;
356 EXTERN int picture_structure;
357 EXTERN int top_field_first;
358 EXTERN int frame_pred_frame_dct;
359 EXTERN int concealment_motion_vectors;
360
361 EXTERN int intra_vlc_format;
362
363 EXTERN int repeat_first_field;
364
365 EXTERN int chroma_420_type;
366 EXTERN int progressive_frame;
367 EXTERN int composite_display_flag;
368 EXTERN int v_axis;
369 EXTERN int field_sequence;
370 EXTERN int sub_carrier;
371 EXTERN int burst_amplitude;
372 EXTERN int sub_carrier_phase;
373
374
375
376 /* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */
377 EXTERN int frame_center_horizontal_offset[3];
378 EXTERN int frame_center_vertical_offset[3];
379
380
381
382 /* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */
383 EXTERN int layer_id;
384 EXTERN int lower_layer_prediction_horizontal_size;
385 EXTERN int lower_layer_prediction_vertical_size;
386 EXTERN int horizontal_subsampling_factor_m;
387 EXTERN int horizontal_subsampling_factor_n;
388 EXTERN int vertical_subsampling_factor_m;
389 EXTERN int vertical_subsampling_factor_n;
390
391
392 /* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header */
393 EXTERN int lower_layer_temporal_reference;
394 EXTERN int lower_layer_horizontal_offset;
395 EXTERN int lower_layer_vertical_offset;
396 EXTERN int spatial_temporal_weight_code_table_index;
397 EXTERN int lower_layer_progressive_frame;
398 EXTERN int lower_layer_deinterlaced_field_select;
399
400
401
402
403
404
405 /* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */
406 EXTERN int copyright_flag;
407 EXTERN int copyright_identifier;
408 EXTERN int original_or_copy;
409 EXTERN int copyright_number_1;
410 EXTERN int copyright_number_2;
411 EXTERN int copyright_number_3;
412
413 /* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header()  */
414 EXTERN int drop_flag;
415 EXTERN int hour;
416 EXTERN int minute;
417 EXTERN int sec;
418 EXTERN int frame;
419 EXTERN int closed_gop;
420 EXTERN int broken_link;
421
422
423
424 /* layer specific variables (needed for SNR and DP scalability) */
425 EXTERN struct layer_data {
426   /* bit input */
427   istream *Infile;
428 /*  int  (*open_stream) (char *filename);*/
429   off_t   (*seek_stream) (istream *is, off_t offset,int whence);
430   ssize_t (*read_stream) (istream *is, void *buf, size_t count);
431   int  (*close_stream) (istream *is);
432   unsigned char Rdbfr[2048];
433   unsigned char *Rdptr;
434   unsigned char Inbfr[16];
435   /* from mpeg2play */
436   unsigned int Bfr;
437   unsigned char *Rdmax;
438   int Incnt;
439   int Bitcnt;
440   /* sequence header and quant_matrix_extension() */
441   int intra_quantizer_matrix[64];
442   int non_intra_quantizer_matrix[64];
443   int chroma_intra_quantizer_matrix[64];
444   int chroma_non_intra_quantizer_matrix[64];
445   
446   int load_intra_quantizer_matrix;
447   int load_non_intra_quantizer_matrix;
448   int load_chroma_intra_quantizer_matrix;
449   int load_chroma_non_intra_quantizer_matrix;
450
451   int MPEG2_Flag;
452   /* sequence scalable extension */
453   int scalable_mode;
454   /* picture coding extension */
455   int q_scale_type;
456   int alternate_scan;
457   /* picture spatial scalable extension */
458   int pict_scal;
459   /* slice/macroblock */
460   int priority_breakpoint;
461   int quantizer_scale;
462   int intra_slice;
463   short block[12][64];
464 } base, enhan, *ld;
465
466
467
468 #ifdef VERIFY
469 EXTERN int verify_sequence_header;
470 EXTERN int verify_group_of_pictures_header;
471 EXTERN int verify_picture_header;
472 EXTERN int verify_slice_header;
473 EXTERN int verify_sequence_extension;
474 EXTERN int verify_sequence_display_extension;
475 EXTERN int verify_quant_matrix_extension;
476 EXTERN int verify_sequence_scalable_extension;
477 EXTERN int verify_picture_display_extension;
478 EXTERN int verify_picture_coding_extension;
479 EXTERN int verify_picture_spatial_scalable_extension;
480 EXTERN int verify_picture_temporal_scalable_extension;
481 EXTERN int verify_copyright_extension;
482 #endif /* VERIFY */
483
484
485 EXTERN int Decode_Layer;
486
487 /* verify.c */
488 #ifdef VERIFY
489 void Check_Headers _ANSI_ARGS_((int Bitstream_Framenum, int Sequence_Framenum));
490 void Clear_Verify_Headers _ANSI_ARGS_((void));
491 #endif /* VERIFY */
492
493
494 EXTERN int global_MBA;
495 EXTERN int global_pic;
496 EXTERN int True_Framenum;