global.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:15k
源码类别:

DVD

开发平台:

Unix_Linux

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