/*****************************************************************************
* Prototypes
*****************************************************************************/
-void vdec_MotionField( struct macroblock_s* );
-void vdec_MotionFrame( struct macroblock_s* );
+
+/* Empty function for intra macroblocks motion compensation */
+void vdec_DummyRecon ( struct macroblock_s* );
+
+/* Motion compensation for skipped macroblocks */
+void vdec_MotionField ( struct macroblock_s* );
+void vdec_MotionFrame ( struct macroblock_s* );
+
+/* Motion compensation for non skipped macroblocks */
+void vdec_FieldRecon ( struct macroblock_s* );
+void vdec_16x8Recon ( struct macroblock_s* );
+void vdec_FrameRecon ( struct macroblock_s* );
+void vdec_DMVRecon ( struct macroblock_s* );
+
+/* Motion compensation functions for the 3 chroma formats */
+void vdec_Motion420();
+void vdec_Motion422();
+void vdec_Motion444();
#endif
} vpar_thread_t;
+/* Chroma types */
+#define CHROMA_420 1
+#define CHROMA_422 2
+#define CHROMA_444 3
+
/*****************************************************************************
* Prototypes
*****************************************************************************/
int i_c_x, i_c_y; /* position of macroblock (chroma) */
int i_chroma_nb_blocks; /* nb of bks for a chr comp */
int i_l_stride; /* number of data_t to ignore
- * when changing lines */
+ * when changing lines */
int i_c_stride; /* idem, for chroma */
-
+
/* IDCT information */
elem_t ppi_blocks[12][64]; /* blocks */
f_idct_t pf_idct[12]; /* sparse IDCT or not ? */
/* Motion compensation information */
f_motion_t pf_motion; /* function to use for motion comp */
f_chroma_motion_t pf_chroma_motion;
- picture_t * p_backw_top;
- picture_t * p_backw_bot;
- picture_t * p_forw_top;
- picture_t * p_forw_bot;
+ picture_t * p_backward;
+ picture_t * p_forward;
int ppi_field_select[2][2];
int pppi_motion_vectors[2][2][2];
int pi_dm_vector[2];
#define SCAN_ZIGZAG 0
#define SCAN_ALT 1
-/*****************************************************************************
- * Constants
- *****************************************************************************/
-extern int * pi_default_intra_quant;
-extern int * pi_default_nonintra_quant;
-extern u8 pi_scan[2][64];
-
/*****************************************************************************
* Prototypes
*****************************************************************************/
* Function pointers
*****************************************************************************/
struct vpar_thread_s;
+struct macroblock_s;
typedef void (*f_slice_header_t)( struct vpar_thread_s*, int*, int, u32);
-typedef void (*f_chroma_pattern_t)( struct vpar_thread_s* );
+typedef int (*f_chroma_pattern_t)( struct vpar_thread_s* );
typedef int (*f_macroblock_type_t)( struct vpar_thread_s* );
/*****************************************************************************
f_slice_header_t pf_slice_header;
quant_matrix_t intra_quant, nonintra_quant;
quant_matrix_t chroma_intra_quant, chroma_nonintra_quant;
- void (*pf_decode_mv)( struct vpar_thread_s *, int );
+ void (*pf_decode_mv)( struct vpar_thread_s *, struct macroblock_s *, int );
f_chroma_pattern_t pf_decode_pattern;
/* Chromatic information */
boolean_t b_frame_structure;
f_macroblock_type_t pf_macroblock_type;
- /* Scalability variables */
- int i_spatial_temporal_weight_code_table_index;
-
boolean_t b_error;
} picture_parsing_t;
/*****************************************************************************
* Prototypes
*****************************************************************************/
-void vpar_SynchroChoose( struct vpar_thread_s * p_vpar, int i_coding_type,
+boolean_t vpar_SynchroChoose( struct vpar_thread_s * p_vpar, int i_coding_type,
int i_structure );
void vpar_SynchroTrash( struct vpar_thread_s * p_vpar, int i_coding_type,
int i_structure );