1 /*****************************************************************************
2 * vpar_blocks.h : video parser blocks management
4 *****************************************************************************
5 *****************************************************************************
16 *****************************************************************************/
18 /*****************************************************************************
19 * macroblock_t : information on a macroblock
20 *****************************************************************************/
21 typedef struct macroblock_s
23 int i_mb_type; /* macroblock type */
25 int i_current_structure;
26 boolean_t b_P_coding_type; /* Is it P_CODING_TYPE ? */
27 picture_t * p_picture;
28 int i_l_x, i_l_y; /* position of macroblock (lum) */
29 int i_c_x, i_c_y; /* position of macroblock (chroma) */
30 int i_chroma_nb_blocks; /* nb of bks for a chr comp */
31 int i_l_stride; /* number of yuv_data_t to ignore
32 * when changing lines */
33 int i_c_stride; /* idem, for chroma */
35 /* IDCT information */
36 dctelem_t ppi_blocks[12][64]; /* blocks */
37 f_idct_t pf_idct[12]; /* sparse IDCT or not ? */
38 int pi_sparse_pos[12];
40 /* Motion compensation information */
41 f_motion_t pf_motion; /* function to use for motion comp */
42 f_chroma_motion_t pf_chroma_motion;
43 picture_t * p_backward;
44 picture_t * p_forward;
45 int ppi_field_select[2][2];
46 int pppi_motion_vectors[2][2][2];
50 boolean_t b_motion_field;
52 /* AddBlock information */
53 f_addb_t pf_addb[12]; /* pointer to the Add function */
54 yuv_data_t * p_data[12]; /* pointer to the position
55 * in the final picture */
56 int i_addb_l_stride, i_addb_c_stride;
59 /*****************************************************************************
60 * macroblock_parsing_t : parser context descriptor #3
61 *****************************************************************************/
64 int i_mb_type, i_motion_type, i_mv_count, i_mv_format;
68 int i_coded_block_pattern;
71 int i_l_x, i_l_y, i_c_x, i_c_y;
72 } macroblock_parsing_t;
74 /*****************************************************************************
75 * lookup_t : entry type for lookup tables *
76 *****************************************************************************/
78 typedef struct lookup_s
84 /******************************************************************************
85 * ac_lookup_t : special entry type for lookup tables about ac coefficients
86 *****************************************************************************/
88 typedef struct dct_lookup_s
95 /*****************************************************************************
97 *****************************************************************************/
98 /* Macroblock types */
101 #define MB_MOTION_BACKWARD 4
102 #define MB_MOTION_FORWARD 8
106 #define MOTION_FIELD 1
107 #define MOTION_FRAME 2
108 #define MOTION_16X8 2
111 /* Macroblock Address Increment types */
112 #define MB_ADDRINC_ESCAPE 8
113 #define MB_ADDRINC_STUFFING 15
115 /* Error constant for lookup tables */
116 #define MB_ERROR (-1)
119 #define SCAN_ZIGZAG 0
122 /* Constant for block decoding */
124 #define DCT_ESCAPE 65
126 /*****************************************************************************
128 *****************************************************************************/
129 extern int pi_default_intra_quant[];
130 extern int pi_default_nonintra_quant[];
131 extern u8 pi_scan[2][64];
133 /*****************************************************************************
135 *****************************************************************************/
136 void vpar_InitCrop( struct vpar_thread_s* p_vpar );
137 void vpar_InitMbAddrInc( struct vpar_thread_s * p_vpar );
138 void vpar_InitPMBType( struct vpar_thread_s * p_vpar );
139 void vpar_InitBMBType( struct vpar_thread_s * p_vpar );
140 void vpar_InitCodedPattern( struct vpar_thread_s * p_vpar );
141 void vpar_InitDCTTables( struct vpar_thread_s * p_vpar );
142 void vpar_ParseMacroblock( struct vpar_thread_s * p_vpar, int * pi_mb_address,
143 int i_mb_previous, int i_mb_base );
144 int vpar_CodedPattern420( struct vpar_thread_s* p_vpar );
145 int vpar_CodedPattern422( struct vpar_thread_s* p_vpar );
146 int vpar_CodedPattern444( struct vpar_thread_s* p_vpar );
147 int vpar_IMBType( struct vpar_thread_s* p_vpar );
148 int vpar_PMBType( struct vpar_thread_s* p_vpar );
149 int vpar_BMBType( struct vpar_thread_s* p_vpar );
150 int vpar_DMBType( struct vpar_thread_s* p_vpar );