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

DVD

开发平台:

Unix_Linux

  1. /*
  2.  *  mpeg2_internal.h
  3.  *
  4.  *  Copyright (C) Aaron Holtzman <aholtzma@ess.engr.uvic.ca> - Nov 1999
  5.  *
  6.  *  This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
  7.  *
  8.  *  mpeg2dec is free software; you can redistribute it and/or modify
  9.  *  it under the terms of the GNU General Public License as published by
  10.  *  the Free Software Foundation; either version 2, or (at your option)
  11.  *  any later version.
  12.  *   
  13.  *  mpeg2dec is distributed in the hope that it will be useful,
  14.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *  GNU General Public License for more details.
  17.  *   
  18.  *  You should have received a copy of the GNU General Public License
  19.  *  along with GNU Make; see the file COPYING.  If not, write to
  20.  *  the Free Software Foundation, 
  21.  *
  22.  */
  23. //header start codes
  24. #define PICTURE_START_CODE      0x100
  25. #define SLICE_START_CODE_MIN    0x101
  26. #define SLICE_START_CODE_MAX    0x1AF
  27. #define USER_DATA_START_CODE    0x1B2
  28. #define SEQUENCE_HEADER_CODE    0x1B3
  29. #define SEQUENCE_ERROR_CODE     0x1B4
  30. #define EXTENSION_START_CODE    0x1B5
  31. #define SEQUENCE_END_CODE       0x1B7
  32. #define GROUP_START_CODE        0x1B8
  33. #define SYSTEM_START_CODE_MIN   0x1B9
  34. #define SYSTEM_START_CODE_MAX   0x1FF
  35. #define ISO_END_CODE            0x1B9
  36. #define PACK_START_CODE         0x1BA
  37. #define SYSTEM_START_CODE       0x1BB
  38. #define VIDEO_ELEMENTARY_STREAM 0x1e0
  39. //extension start code ids
  40. #define SEQUENCE_EXTENSION_ID                    1
  41. #define SEQUENCE_DISPLAY_EXTENSION_ID            2
  42. #define QUANT_MATRIX_EXTENSION_ID                3
  43. #define COPYRIGHT_EXTENSION_ID                   4
  44. #define SEQUENCE_SCALABLE_EXTENSION_ID           5
  45. #define PICTURE_DISPLAY_EXTENSION_ID             7
  46. #define PICTURE_CODING_EXTENSION_ID              8
  47. #define PICTURE_SPATIAL_SCALABLE_EXTENSION_ID    9
  48. #define PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID  10
  49. // macroblock type 
  50. #define MACROBLOCK_INTRA                        1
  51. #define MACROBLOCK_PATTERN                      2
  52. #define MACROBLOCK_MOTION_BACKWARD              4
  53. #define MACROBLOCK_MOTION_FORWARD               8
  54. #define MACROBLOCK_QUANT                        16
  55. #define SPATIAL_TEMPORAL_WEIGHT_CODE_FLAG       32
  56. #define PERMITTED_SPATIAL_TEMPORAL_WEIGHT_CLASS 64
  57. //picture structure 
  58. #define TOP_FIELD     1
  59. #define BOTTOM_FIELD  2
  60. #define FRAME_PICTURE 3
  61. //picture coding type 
  62. #define I_TYPE 1
  63. #define P_TYPE 2
  64. #define B_TYPE 3
  65. #define D_TYPE 4
  66. // motion_type 
  67. #define MC_FIELD 1
  68. #define MC_FRAME 2
  69. #define MC_16X8  2
  70. #define MC_DMV   3
  71. // mv_format 
  72. #define MV_FIELD 0
  73. #define MV_FRAME 1
  74. // chroma_format 
  75. #define CHROMA_420 1
  76. #define CHROMA_422 2
  77. #define CHROMA_444 3
  78. //The picture struct contains all of the top level state
  79. //information (ie everything except slice and macroblock
  80. //state)
  81. typedef struct picture_s
  82. {
  83. //-- sequence header stuff --
  84. uint_32 horizontal_size;
  85. uint_32 vertical_size;
  86. uint_32 aspect_ratio_information;
  87. uint_32 frame_rate_code;
  88. uint_32 bit_rate_value;
  89. uint_32 vbv_buffer_size;
  90. uint_32 constrained_parameters_flag;
  91. uint_8 *intra_quantizer_matrix;
  92. uint_8 *non_intra_quantizer_matrix;
  93. uint_32 use_custom_intra_quantizer_matrix;
  94. uint_32 use_custom_non_intra_quantizer_matrix;
  95. uint_8 custom_intra_quantization_matrix[64];
  96. uint_8 custom_non_intra_quantization_matrix[64];
  97. //The width and height of the picture snapped to macroblock units
  98. uint_32 coded_picture_width;
  99. uint_32 coded_picture_height;
  100. //--sequence extension stuff--
  101. //a lot of the stuff in the sequence extension stuff we dont' care
  102. //about, so it's not in here
  103. //color format of the sequence (4:2:0, 4:2:2, or 4:4:4)
  104. uint_16 chroma_format;
  105. //bool to indicate that only progressive frames are present in the
  106. //bitstream
  107. uint_16 progressive_sequence;
  108. //-- sequence display extension stuff --
  109. uint_16 video_format;
  110. uint_16 display_horizontal_size;
  111. uint_16 display_vertical_size;
  112.   uint_16 color_description;
  113.   uint_16 color_primaries;
  114.   uint_16 transfer_characteristics;
  115.   uint_16 matrix_coefficients;
  116. //-- group of pictures header stuff --
  117. //these are all part of the time code for this gop
  118. uint_32 drop_flag;
  119. uint_32 hour;
  120. uint_32 minute;
  121. uint_32 sec;
  122. uint_32 frame;
  123. //set if the B frames in this gop don't reference outside of the gop
  124. uint_32 closed_gop;
  125. //set if the previous I frame is missing (ie don't decode)
  126. uint_32 broken_link;
  127. //-- picture header stuff --
  128. //what type of picture this is (I,P,or B) D from MPEG-1 isn't supported
  129. uint_32 picture_coding_type;
  130. uint_32 temporal_reference;
  131. uint_32 vbv_delay;
  132. //MPEG-1 stuff
  133. uint_8 full_pel_forward_vector;
  134. uint_8 forward_f_code;
  135. uint_8 full_pel_backward_vector;
  136. uint_8 backward_f_code;
  137. //-- picture coding extension stuff --
  138. //quantization factor for motion vectors
  139. uint_8 f_code[2][2];
  140. //quantization factor for intra dc coefficients
  141. uint_16 intra_dc_precision;
  142. //what type of picture is this (field or frame)
  143. uint_16 picture_structure;
  144. //bool to indicate the top field is first
  145. uint_16 top_field_first;
  146. //bool to indicate all predictions are frame based
  147. uint_16 frame_pred_frame_dct;
  148. //bool to indicate whether intra blocks have motion vectors 
  149. //(for concealment)
  150. uint_16 concealment_motion_vectors;
  151. //bit to indicate which quantization table to use
  152. uint_16 q_scale_type;
  153. //bool to use different vlc tables
  154. uint_16 intra_vlc_format;
  155. //bool to use different zig-zag pattern
  156. uint_16 alternate_scan;
  157. //wacky field stuff
  158. uint_16 repeat_first_field;
  159. //wacky field stuff
  160. uint_16 progressive_frame;
  161. //wacky analog stuff (not used)
  162. uint_16 composite_display_flag;
  163. //stuff derived from bitstream
  164. //pointer to the zigzag scan we're supposed to be using
  165. uint_8 *scan;
  166. //These are pointers to the planar frame buffers (Y,Cr,CB)
  167. uint_8 *current_frame[3];
  168. uint_8 *forward_reference_frame[3];
  169. uint_8 *backward_reference_frame[3];
  170. } picture_t;
  171. typedef struct slice_s
  172. {
  173.   uint_32 slice_vertical_position_extension;
  174.   uint_32 quantizer_scale_code;
  175.   uint_32 slice_picture_id_enable;
  176.   uint_32 slice_picture_id;
  177.   uint_32 extra_information_slice;
  178. //Motion vectors
  179. sint_32 pmv[2][2][2];
  180. sint_32 dc_dct_pred[3];
  181. uint_32 quantizer_scale;
  182. } slice_t;
  183. typedef struct macroblock_s
  184. {
  185. sint_16 *y_blocks;
  186. sint_16 *cr_blocks;
  187. sint_16 *cb_blocks;
  188. uint_16 mba;
  189. uint_16 macroblock_type;
  190. uint_16 motion_type;
  191. uint_16 motion_vector_count;
  192. sint_16 motion_vertical_field_select[2][2];
  193. sint_16 dmvector[2];
  194. uint_16 mv_format;
  195. uint_16 mvscale;
  196. uint_16 dmv;
  197. uint_16 dct_type;
  198. uint_16 coded_block_pattern; 
  199. uint_16 quantizer_scale_code;
  200. uint_16 skipped;
  201. } macroblock_t;
  202. //The only global variable,
  203. //the config struct
  204. extern mpeg2_config_t config;