+ * macroblock_t : information on a macroblock passed to the video_decoder
+ * thread
+ *****************************************************************************/
+typedef struct macroblock_s
+{
+ picture_t * p_picture; /* current frame in progress */
+
+ int i_mb_type; /* macroblock type */
+ int i_coded_block_pattern;
+ /* which blocks are coded ? */
+ int i_chroma_nb_blocks; /* number of blocks for
+ * chroma components */
+
+ /* IDCT information */
+ dctelem_t ppi_blocks[12][64]; /* blocks */
+ void ( * pf_idct[12] ) ( struct vdec_thread_s *,
+ dctelem_t*, int ); /* sparse IDCT or not ? */
+ int pi_sparse_pos[12]; /* position of the
+ * non-NULL coeff */
+
+ /* Motion compensation information */
+ f_motion_t pf_motion; /* function to use for motion comp */
+ picture_t * p_backward; /* backward reference frame */
+ picture_t * p_forward; /* forward reference frame */
+ int ppi_field_select[2][2]; /* field to use to
+ * form predictions */
+ int pppi_motion_vectors[2][2][2]; /* motion vectors */
+ int ppi_dmv[2][2]; /* differential motion vectors */
+ /* coordinates of the block in the picture */
+ int i_l_x, i_c_x;
+ int i_motion_l_y;
+ int i_motion_c_y;
+ int i_l_stride; /* number of yuv_data_t to
+ * ignore when changing line */
+ int i_c_stride; /* idem, for chroma */
+ boolean_t b_P_second; /* Second field of a P picture ?
+ * (used to determine the predicting
+ * frame) */
+ boolean_t b_motion_field; /* Field we are predicting
+ * (top field or bottom field) */
+
+ /* AddBlock information */
+ yuv_data_t * p_data[12]; /* pointer to the position
+ * in the final picture */
+ int i_addb_l_stride, i_addb_c_stride;
+ /* nb of coeffs to jump when changing lines */
+} macroblock_t;
+
+/*****************************************************************************
+ * macroblock_parsing_t : macroblock context & predictors
+ *****************************************************************************/
+typedef struct
+{
+ unsigned char i_quantizer_scale; /* scale of the quantization
+ * matrices */
+ int pi_dc_dct_pred[3]; /* ISO/IEC 13818-2 7.2.1 */
+ int pppi_pmv[2][2][2]; /* Motion vect predictors, 7.6.3 */
+ int i_motion_dir;/* Used for the next skipped macroblock */
+
+ /* Context used to optimize block parsing */
+ int i_motion_type, i_mv_count, i_mv_format;
+ boolean_t b_dmv, b_dct_type;
+
+ /* Coordinates of the upper-left pixel of the macroblock, in lum and
+ * chroma */
+ int i_l_x, i_l_y, i_c_x, i_c_y;
+} macroblock_parsing_t;
+
+/*****************************************************************************
+ * lookup_t : entry type for lookup tables *