+#define FIELD16X8( MOTION ) \
+{ \
+ picture_t * p_pred; \
+ \
+ if( p_mb->i_mb_type & MB_MOTION_FORWARD ) \
+ { \
+ if( p_mb->b_P_second \
+ && (p_mb->b_motion_field != p_mb->ppi_field_select[0][0]) )\
+ p_pred = p_mb->p_picture; \
+ else \
+ p_pred = p_mb->p_forward; \
+ \
+ MOTION( p_mb, p_pred, p_mb->ppi_field_select[0][0], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[0][0][0], \
+ p_mb->pppi_motion_vectors[0][0][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 0, 0 ); \
+ \
+ if( p_mb->b_P_second \
+ && (p_mb->b_motion_field != p_mb->ppi_field_select[1][0]) )\
+ p_pred = p_mb->p_picture; \
+ else \
+ p_pred = p_mb->p_forward; \
+ \
+ MOTION( p_mb, p_pred, p_mb->ppi_field_select[1][0], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[1][0][0], \
+ p_mb->pppi_motion_vectors[1][0][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 8, 0 ); \
+ \
+ if( p_mb->i_mb_type & MB_MOTION_BACKWARD ) \
+ { \
+ MOTION( p_mb, p_mb->p_backward, \
+ p_mb->ppi_field_select[0][1], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[0][1][0], \
+ p_mb->pppi_motion_vectors[0][1][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 0, 1 ); \
+ \
+ MOTION( p_mb, p_mb->p_backward, \
+ p_mb->ppi_field_select[1][1], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[1][1][0], \
+ p_mb->pppi_motion_vectors[1][1][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 8, 1 ); \
+ } \
+ } \
+ \
+ else /* MB_MOTION_BACKWARD */ \
+ { \
+ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[0][1], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[0][1][0], \
+ p_mb->pppi_motion_vectors[0][1][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 0, 0 ); \
+ \
+ MOTION( p_mb, p_mb->p_backward, p_mb->ppi_field_select[1][1], \
+ p_mb->b_motion_field, \
+ p_mb->pppi_motion_vectors[1][1][0], \
+ p_mb->pppi_motion_vectors[1][1][1], \
+ p_mb->i_l_stride, p_mb->i_c_stride, 8, 8, 0 ); \
+ } \
+}