From ebfe622bb1ca57cecb932e42926745cba7161913 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 20 Dec 2013 11:20:24 +0100 Subject: mpegvideo: drop support for real (non-emulated) edges Several decoders disable those anyway and they are not measurably faster on x86. They might be somewhat faster on other platforms due to missing emu edge SIMD, but the gain is not large enough (and those decoders relevant enough) to justify the added complexity. --- libavcodec/mpegvideo_motion.c | 78 +++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 43 deletions(-) (limited to 'libavcodec/mpegvideo_motion.c') diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c index fafbaa9f03..42def5ee88 100644 --- a/libavcodec/mpegvideo_motion.c +++ b/libavcodec/mpegvideo_motion.c @@ -59,16 +59,14 @@ static void gmc1_motion(MpegEncContext *s, ptr = ref_picture[0] + src_y * linesize + src_x; - if (s->flags & CODEC_FLAG_EMU_EDGE) { - if ((unsigned)src_x >= FFMAX(s->h_edge_pos - 17, 0) || - (unsigned)src_y >= FFMAX(s->v_edge_pos - 17, 0)) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, - linesize, linesize, - 17, 17, - src_x, src_y, - s->h_edge_pos, s->v_edge_pos); - ptr = s->edge_emu_buffer; - } + if ((unsigned)src_x >= FFMAX(s->h_edge_pos - 17, 0) || + (unsigned)src_y >= FFMAX(s->v_edge_pos - 17, 0)) { + s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, + linesize, linesize, + 17, 17, + src_x, src_y, + s->h_edge_pos, s->v_edge_pos); + ptr = s->edge_emu_buffer; } if ((motion_x | motion_y) & 7) { @@ -105,17 +103,15 @@ static void gmc1_motion(MpegEncContext *s, offset = (src_y * uvlinesize) + src_x; ptr = ref_picture[1] + offset; - if (s->flags & CODEC_FLAG_EMU_EDGE) { - if ((unsigned)src_x >= FFMAX((s->h_edge_pos >> 1) - 9, 0) || - (unsigned)src_y >= FFMAX((s->v_edge_pos >> 1) - 9, 0)) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, - uvlinesize, uvlinesize, - 9, 9, - src_x, src_y, - s->h_edge_pos >> 1, s->v_edge_pos >> 1); - ptr = s->edge_emu_buffer; - emu = 1; - } + if ((unsigned)src_x >= FFMAX((s->h_edge_pos >> 1) - 9, 0) || + (unsigned)src_y >= FFMAX((s->v_edge_pos >> 1) - 9, 0)) { + s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, + uvlinesize, uvlinesize, + 9, 9, + src_x, src_y, + s->h_edge_pos >> 1, s->v_edge_pos >> 1); + ptr = s->edge_emu_buffer; + emu = 1; } s->dsp.gmc1(dest_cb, ptr, uvlinesize, 8, motion_x & 15, motion_y & 15, 128 - s->no_rounding); @@ -212,7 +208,7 @@ static inline int hpel_motion(MpegEncContext *s, dxy |= (motion_y & 1) << 1; src += src_y * s->linesize + src_x; - if (s->unrestricted_mv && (s->flags & CODEC_FLAG_EMU_EDGE)) { + if (s->unrestricted_mv) { if ((unsigned)src_x > FFMAX(s->h_edge_pos - (motion_x & 1) - 8, 0) || (unsigned)src_y > FFMAX(s->v_edge_pos - (motion_y & 1) - 8, 0)) { s->vdsp.emulated_edge_mc(s->edge_emu_buffer, src, @@ -622,16 +618,14 @@ static void chroma_4mv_motion(MpegEncContext *s, offset = src_y * s->uvlinesize + src_x; ptr = ref_picture[1] + offset; - if (s->flags & CODEC_FLAG_EMU_EDGE) { - if ((unsigned)src_x > FFMAX((s->h_edge_pos >> 1) - (dxy & 1) - 8, 0) || - (unsigned)src_y > FFMAX((s->v_edge_pos >> 1) - (dxy >> 1) - 8, 0)) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, - s->uvlinesize, s->uvlinesize, - 9, 9, src_x, src_y, - s->h_edge_pos >> 1, s->v_edge_pos >> 1); - ptr = s->edge_emu_buffer; - emu = 1; - } + if ((unsigned)src_x > FFMAX((s->h_edge_pos >> 1) - (dxy & 1) - 8, 0) || + (unsigned)src_y > FFMAX((s->v_edge_pos >> 1) - (dxy >> 1) - 8, 0)) { + s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, + s->uvlinesize, s->uvlinesize, + 9, 9, src_x, src_y, + s->h_edge_pos >> 1, s->v_edge_pos >> 1); + ptr = s->edge_emu_buffer; + emu = 1; } pix_op[dxy](dest_cb, ptr, s->uvlinesize, 8); @@ -782,17 +776,15 @@ static inline void apply_8x8(MpegEncContext *s, dxy &= ~12; ptr = ref_picture[0] + (src_y * s->linesize) + (src_x); - if (s->flags & CODEC_FLAG_EMU_EDGE) { - if ((unsigned)src_x > FFMAX(s->h_edge_pos - (motion_x & 3) - 8, 0) || - (unsigned)src_y > FFMAX(s->v_edge_pos - (motion_y & 3) - 8, 0)) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, - s->linesize, s->linesize, - 9, 9, - src_x, src_y, - s->h_edge_pos, - s->v_edge_pos); - ptr = s->edge_emu_buffer; - } + if ((unsigned)src_x > FFMAX(s->h_edge_pos - (motion_x & 3) - 8, 0) || + (unsigned)src_y > FFMAX(s->v_edge_pos - (motion_y & 3) - 8, 0)) { + s->vdsp.emulated_edge_mc(s->edge_emu_buffer, ptr, + s->linesize, s->linesize, + 9, 9, + src_x, src_y, + s->h_edge_pos, + s->v_edge_pos); + ptr = s->edge_emu_buffer; } dest = dest_y + ((i & 1) * 8) + (i >> 1) * 8 * s->linesize; qpix_op[1][dxy](dest, ptr, s->linesize); -- cgit v1.2.3