From 0b711ca3f3e5643bac9ddef775f2b16187b66835 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Fri, 18 Jan 2013 23:37:41 +0100 Subject: [PATCH] dsputil: drop non-compliant "fast" qpel mc functions Signed-off-by: Diego Biurrun --- libavcodec/dsputil.c | 16 ------- libavcodec/dsputil.h | 3 -- libavcodec/h263dec.c | 5 +-- libavcodec/h264.c | 11 +---- libavcodec/x86/dsputil_avg_template.c | 51 ---------------------- libavcodec/x86/dsputil_mmx.c | 61 --------------------------- 6 files changed, 3 insertions(+), 144 deletions(-) diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index 8e9c98d0d8..d1bc2c9c04 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -2629,8 +2629,6 @@ int ff_check_alignment(void){ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx) { - int i, j; - ff_check_alignment(); #if CONFIG_ENCODERS @@ -2832,9 +2830,6 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx) c->shrink[2]= ff_shrink44; c->shrink[3]= ff_shrink88; - memset(c->put_2tap_qpel_pixels_tab, 0, sizeof(c->put_2tap_qpel_pixels_tab)); - memset(c->avg_2tap_qpel_pixels_tab, 0, sizeof(c->avg_2tap_qpel_pixels_tab)); - #undef FUNC #undef FUNCC #define FUNC(f, depth) f ## _ ## depth @@ -2931,17 +2926,6 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx) if (ARCH_SH4) ff_dsputil_init_sh4 (c, avctx); if (ARCH_BFIN) ff_dsputil_init_bfin (c, avctx); - for (i = 0; i < 4; i++) { - for (j = 0; j < 16; j++) { - if(!c->put_2tap_qpel_pixels_tab[i][j]) - c->put_2tap_qpel_pixels_tab[i][j] = - c->put_h264_qpel_pixels_tab[i][j]; - if(!c->avg_2tap_qpel_pixels_tab[i][j]) - c->avg_2tap_qpel_pixels_tab[i][j] = - c->avg_h264_qpel_pixels_tab[i][j]; - } - } - ff_init_scantable_permutation(c->idct_permutation, c->idct_permutation_type); } diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 32a1e3e1d6..8924e46ffe 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -322,9 +322,6 @@ typedef struct DSPContext { qpel_mc_func put_h264_qpel_pixels_tab[4][16]; qpel_mc_func avg_h264_qpel_pixels_tab[4][16]; - qpel_mc_func put_2tap_qpel_pixels_tab[4][16]; - qpel_mc_func avg_2tap_qpel_pixels_tab[4][16]; - me_cmp_func pix_abs[2][4]; /* huffyuv specific */ diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 7e64538198..169fd35281 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -615,10 +615,7 @@ retry: s->next_p_frame_damaged=0; } - if((s->avctx->flags2 & CODEC_FLAG2_FAST) && s->pict_type==AV_PICTURE_TYPE_B){ - s->me.qpel_put= s->dsp.put_2tap_qpel_pixels_tab; - s->me.qpel_avg= s->dsp.avg_2tap_qpel_pixels_tab; - }else if((!s->no_rounding) || s->pict_type==AV_PICTURE_TYPE_B){ + if((!s->no_rounding) || s->pict_type==AV_PICTURE_TYPE_B){ s->me.qpel_put= s->dsp.put_qpel_pixels_tab; s->me.qpel_avg= s->dsp.avg_qpel_pixels_tab; }else{ diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 5b7b18c7be..2e2b272714 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -2593,15 +2593,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0) int last_pic_structure, last_pic_droppable; int needs_reinit = 0; - /* FIXME: 2tap qpel isn't implemented for high bit depth. */ - if ((s->avctx->flags2 & CODEC_FLAG2_FAST) && - !h->nal_ref_idc && !h->pixel_shift) { - s->me.qpel_put = s->dsp.put_2tap_qpel_pixels_tab; - s->me.qpel_avg = s->dsp.avg_2tap_qpel_pixels_tab; - } else { - s->me.qpel_put = s->dsp.put_h264_qpel_pixels_tab; - s->me.qpel_avg = s->dsp.avg_h264_qpel_pixels_tab; - } + s->me.qpel_put = s->dsp.put_h264_qpel_pixels_tab; + s->me.qpel_avg = s->dsp.avg_h264_qpel_pixels_tab; first_mb_in_slice = get_ue_golomb(&s->gb); diff --git a/libavcodec/x86/dsputil_avg_template.c b/libavcodec/x86/dsputil_avg_template.c index 1a4343d76e..4fc188c982 100644 --- a/libavcodec/x86/dsputil_avg_template.c +++ b/libavcodec/x86/dsputil_avg_template.c @@ -802,54 +802,3 @@ static void DEF(avg_pixels16_xy2)(uint8_t *block, const uint8_t *pixels, int lin DEF(avg_pixels8_xy2)(block , pixels , line_size, h); DEF(avg_pixels8_xy2)(block+8, pixels+8, line_size, h); } - -#define QPEL_2TAP_L3(OPNAME) \ -static void DEF(OPNAME ## 2tap_qpel16_l3)(uint8_t *dst, uint8_t *src, int stride, int h, int off1, int off2){\ - __asm__ volatile(\ - "1: \n\t"\ - "movq (%1,%2), %%mm0 \n\t"\ - "movq 8(%1,%2), %%mm1 \n\t"\ - PAVGB" (%1,%3), %%mm0 \n\t"\ - PAVGB" 8(%1,%3), %%mm1 \n\t"\ - PAVGB" (%1), %%mm0 \n\t"\ - PAVGB" 8(%1), %%mm1 \n\t"\ - STORE_OP( (%1,%4),%%mm0)\ - STORE_OP(8(%1,%4),%%mm1)\ - "movq %%mm0, (%1,%4) \n\t"\ - "movq %%mm1, 8(%1,%4) \n\t"\ - "add %5, %1 \n\t"\ - "decl %0 \n\t"\ - "jnz 1b \n\t"\ - :"+g"(h), "+r"(src)\ - :"r"((x86_reg)off1), "r"((x86_reg)off2),\ - "r"((x86_reg)(dst-src)), "r"((x86_reg)stride)\ - :"memory"\ - );\ -}\ -static void DEF(OPNAME ## 2tap_qpel8_l3)(uint8_t *dst, uint8_t *src, int stride, int h, int off1, int off2){\ - __asm__ volatile(\ - "1: \n\t"\ - "movq (%1,%2), %%mm0 \n\t"\ - PAVGB" (%1,%3), %%mm0 \n\t"\ - PAVGB" (%1), %%mm0 \n\t"\ - STORE_OP((%1,%4),%%mm0)\ - "movq %%mm0, (%1,%4) \n\t"\ - "add %5, %1 \n\t"\ - "decl %0 \n\t"\ - "jnz 1b \n\t"\ - :"+g"(h), "+r"(src)\ - :"r"((x86_reg)off1), "r"((x86_reg)off2),\ - "r"((x86_reg)(dst-src)), "r"((x86_reg)stride)\ - :"memory"\ - );\ -} - -#ifndef SKIP_FOR_3DNOW -#define STORE_OP(a,b) PAVGB" "#a","#b" \n\t" -QPEL_2TAP_L3(avg_) -#undef STORE_OP -#define STORE_OP(a,b) -QPEL_2TAP_L3(put_) -#undef STORE_OP -#undef QPEL_2TAP_L3 -#endif /* SKIP_FOR_3DNOW */ diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/x86/dsputil_mmx.c index 74f7df5002..7a122ab653 100644 --- a/libavcodec/x86/dsputil_mmx.c +++ b/libavcodec/x86/dsputil_mmx.c @@ -1557,63 +1557,6 @@ QPEL_OP(put_, ff_pw_16, _, PUT_OP, mmxext) QPEL_OP(avg_, ff_pw_16, _, AVG_MMXEXT_OP, mmxext) QPEL_OP(put_no_rnd_, ff_pw_15, _no_rnd_, PUT_OP, mmxext) -/***********************************/ -/* bilinear qpel: not compliant to any spec, only for -lavdopts fast */ - -#define QPEL_2TAP_XY(OPNAME, SIZE, MMX, XY, HPEL) \ -static void OPNAME ## 2tap_qpel ## SIZE ## _mc ## XY ## _ ## MMX(uint8_t *dst, \ - uint8_t *src, \ - int stride) \ -{ \ - OPNAME ## pixels ## SIZE ## HPEL(dst, src, stride, SIZE); \ -} - -#define QPEL_2TAP_L3(OPNAME, SIZE, MMX, XY, S0, S1, S2) \ -static void OPNAME ## 2tap_qpel ## SIZE ## _mc ## XY ## _ ## MMX(uint8_t *dst, \ - uint8_t *src, \ - int stride) \ -{ \ - OPNAME ## 2tap_qpel ## SIZE ## _l3_ ## MMX(dst, src + S0, stride, SIZE, \ - S1, S2); \ -} - -#define QPEL_2TAP(OPNAME, SIZE, MMX) \ -QPEL_2TAP_XY(OPNAME, SIZE, MMX, 20, _x2_ ## MMX) \ -QPEL_2TAP_XY(OPNAME, SIZE, MMX, 02, _y2_ ## MMX) \ -QPEL_2TAP_XY(OPNAME, SIZE, MMX, 22, _xy2_mmx) \ -static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc00_ ## MMX = \ - OPNAME ## qpel ## SIZE ## _mc00_ ## MMX; \ -static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc21_ ## MMX = \ - OPNAME ## 2tap_qpel ## SIZE ## _mc20_ ## MMX; \ -static const qpel_mc_func OPNAME ## 2tap_qpel ## SIZE ## _mc12_ ## MMX = \ - OPNAME ## 2tap_qpel ## SIZE ## _mc02_ ## MMX; \ -static void OPNAME ## 2tap_qpel ## SIZE ## _mc32_ ## MMX(uint8_t *dst, \ - uint8_t *src, \ - int stride) \ -{ \ - OPNAME ## pixels ## SIZE ## _y2_ ## MMX(dst, src + 1, stride, SIZE); \ -} \ -static void OPNAME ## 2tap_qpel ## SIZE ## _mc23_ ## MMX(uint8_t *dst, \ - uint8_t *src, \ - int stride) \ -{ \ - OPNAME ## pixels ## SIZE ## _x2_ ## MMX(dst, src + stride, \ - stride, SIZE); \ -} \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 10, 0, 1, 0) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 30, 1, -1, 0) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 01, 0, stride, 0) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 03, stride, -stride, 0) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 11, 0, stride, 1) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 31, 1, stride, -1) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 13, stride, -stride, 1) \ -QPEL_2TAP_L3(OPNAME, SIZE, MMX, 33, stride + 1, -stride, -1) \ - -QPEL_2TAP(put_, 16, mmxext) -QPEL_2TAP(avg_, 16, mmxext) -QPEL_2TAP(put_, 8, mmxext) -QPEL_2TAP(avg_, 8, mmxext) - void ff_put_rv40_qpel8_mc33_mmx(uint8_t *dst, uint8_t *src, int stride) { put_pixels8_xy2_mmx(dst, src, stride, 8); @@ -2042,13 +1985,9 @@ static void dsputil_init_mmxext(DSPContext *c, AVCodecContext *avctx, #if HAVE_INLINE_ASM SET_QPEL_FUNCS(avg_qpel, 0, 16, mmxext, ); SET_QPEL_FUNCS(avg_qpel, 1, 8, mmxext, ); - SET_QPEL_FUNCS(avg_2tap_qpel, 0, 16, mmxext, ); - SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmxext, ); SET_QPEL_FUNCS(put_qpel, 0, 16, mmxext, ); SET_QPEL_FUNCS(put_qpel, 1, 8, mmxext, ); - SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmxext, ); - SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, mmxext, ); SET_QPEL_FUNCS(put_no_rnd_qpel, 0, 16, mmxext, ); SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmxext, ); -- GitLab