You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
Merge commit '95587859cc69e5abe37c9e3af48008032d98e262' into HEAD
* commit '95587859cc69e5abe37c9e3af48008032d98e262': mpegvideo: Move obmc in a separate function Conflicts: libavcodec/mpegvideo_motion.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user