@ -660,43 +660,21 @@ static inline void prefetch_motion(MpegEncContext *s, uint8_t **pix, int dir)
s - > vdsp . prefetch ( pix [ 1 ] + off , pix [ 2 ] - pix [ 1 ] , 2 ) ;
}
/**
* motion compensation of a single macroblock
* @ param s context
* @ param dest_y luma destination pointer
* @ param dest_cb chroma cb / u destination pointer
* @ param dest_cr chroma cr / v destination pointer
* @ param dir direction ( 0 - > forward , 1 - > backward )
* @ param ref_picture array [ 3 ] of pointers to the 3 planes of the reference picture
* @ param pix_op halfpel motion compensation function ( average or put normally )
* @ param qpix_op qpel motion compensation function ( average or put normally )
* the motion vectors are taken from s - > mv and the MV type from s - > mv_type
*/
static av_always_inline void MPV_motion_internal ( MpegEncContext * s ,
static inline void apply_obmc ( MpegEncContext * s ,
uint8_t * dest_y ,
uint8_t * dest_cb ,
uint8_t * dest_cr ,
int dir ,
uint8_t * * ref_picture ,
op_pixels_func ( * pix_op ) [ 4 ] ,
qpel_mc_func ( * qpix_op ) [ 16 ] ,
int is_mpeg12 )
op_pixels_func ( * pix_op ) [ 4 ] )
{
int dxy , mx , my , src_x , src_y , motion_x , motion_y ;
int mb_x , mb_y , i ;
uint8_t * ptr , * dest ;
mb_x = s - > mb_x ;
mb_y = s - > mb_y ;
prefetch_motion ( s , ref_picture , dir ) ;
if ( ! is_mpeg12 & & s - > obmc & & s - > pict_type ! = AV_PICTURE_TYPE_B ) {
LOCAL_ALIGNED_8 ( int16_t , mv_cache , [ 4 ] , [ 4 ] [ 2 ] ) ;
Picture * cur_frame = & s - > current_picture ;
const int xy = s - > mb_x + s - > mb_y * s - > mb_stride ;
int mb_x = s - > mb_x ;
int mb_y = s - > mb_y ;
const int xy = mb_x + mb_y * s - > mb_stride ;
const int mot_stride = s - > b8_stride ;
const int mot_xy = mb_x * 2 + mb_y * 2 * mot_stride ;
int mx , my , i ;
av_assert2 ( ! s - > mb_skipped ) ;
@ -767,7 +745,41 @@ static av_always_inline void MPV_motion_internal(MpegEncContext *s,
chroma_4mv_motion ( s , dest_cb , dest_cr ,
ref_picture , pix_op [ 1 ] ,
mx , my ) ;
}
/**
* motion compensation of a single macroblock
* @ param s context
* @ param dest_y luma destination pointer
* @ param dest_cb chroma cb / u destination pointer
* @ param dest_cr chroma cr / v destination pointer
* @ param dir direction ( 0 - > forward , 1 - > backward )
* @ param ref_picture array [ 3 ] of pointers to the 3 planes of the reference picture
* @ param pix_op halfpel motion compensation function ( average or put normally )
* @ param qpix_op qpel motion compensation function ( average or put normally )
* the motion vectors are taken from s - > mv and the MV type from s - > mv_type
*/
static av_always_inline void MPV_motion_internal ( MpegEncContext * s ,
uint8_t * dest_y ,
uint8_t * dest_cb ,
uint8_t * dest_cr ,
int dir ,
uint8_t * * ref_picture ,
op_pixels_func ( * pix_op ) [ 4 ] ,
qpel_mc_func ( * qpix_op ) [ 16 ] ,
int is_mpeg12 )
{
int dxy , mx , my , src_x , src_y , motion_x , motion_y ;
int mb_x , mb_y , i ;
uint8_t * ptr , * dest ;
mb_x = s - > mb_x ;
mb_y = s - > mb_y ;
prefetch_motion ( s , ref_picture , dir ) ;
if ( ! is_mpeg12 & & s - > obmc & & s - > pict_type ! = AV_PICTURE_TYPE_B ) {
apply_obmc ( s , dest_y , dest_cb , dest_cr , ref_picture , pix_op ) ;
return ;
}