* commit '46bb456853b197f4562de7acf5d42abf11ded9be': x86: dsputil: Refactor pixels16 wrapper functions with a macro Conflicts: libavcodec/x86/hpeldsp_avg_template.c Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.0
@@ -461,19 +461,9 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height, | |||||
#if HAVE_YASM | #if HAVE_YASM | ||||
static void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, | |||||
int line_size, int h) | |||||
{ | |||||
ff_avg_pixels8_mmxext(block, pixels, line_size, h); | |||||
ff_avg_pixels8_mmxext(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void ff_put_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
ff_put_pixels8_mmxext(block, pixels, line_size, h); | |||||
ff_put_pixels8_mmxext(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
PIXELS16(static, ff_avg, , , _mmxext) | |||||
PIXELS16(static, ff_put, , , _mmxext) | |||||
#define QPEL_OP(OPNAME, RND, MMX) \ | #define QPEL_OP(OPNAME, RND, MMX) \ | ||||
static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \ | static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \ | ||||
@@ -157,4 +157,16 @@ void ff_deinterlace_line_inplace_mmx(const uint8_t *lum_m4, | |||||
const uint8_t *lum_m1, | const uint8_t *lum_m1, | ||||
const uint8_t *lum, int size); | const uint8_t *lum, int size); | ||||
#define PIXELS16(STATIC, PFX1, PFX2, TYPE, CPUEXT) \ | |||||
STATIC void PFX1 ## _pixels16 ## TYPE ## CPUEXT(uint8_t *block, \ | |||||
const uint8_t *pixels, \ | |||||
ptrdiff_t line_size, \ | |||||
int h) \ | |||||
{ \ | |||||
PFX2 ## PFX1 ## _pixels8 ## TYPE ## CPUEXT(block, pixels, \ | |||||
line_size, h); \ | |||||
PFX2 ## PFX1 ## _pixels8 ## TYPE ## CPUEXT(block + 8, pixels + 8, \ | |||||
line_size, h); \ | |||||
} | |||||
#endif /* AVCODEC_X86_DSPUTIL_MMX_H */ | #endif /* AVCODEC_X86_DSPUTIL_MMX_H */ |
@@ -32,18 +32,6 @@ void ff_put_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h); | ptrdiff_t line_size, int h); | ||||
void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, | void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, | ||||
ptrdiff_t line_size, int h); | ptrdiff_t line_size, int h); | ||||
static void ff_put_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
ff_put_pixels8_mmxext(block, pixels, line_size, h); | |||||
ff_put_pixels8_mmxext(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
ff_avg_pixels8_mmxext(block, pixels, line_size, h); | |||||
ff_avg_pixels8_mmxext(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
void ff_put_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, | void ff_put_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, | ||||
int dstStride, int src1Stride, int h); | int dstStride, int src1Stride, int h); | ||||
void ff_avg_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, | void ff_avg_pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, | ||||
@@ -61,6 +49,9 @@ void ff_avg_pixels16_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, | |||||
#define ff_put_pixels16_l2_sse2 ff_put_pixels16_l2_mmxext | #define ff_put_pixels16_l2_sse2 ff_put_pixels16_l2_mmxext | ||||
#define ff_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext | #define ff_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext | ||||
PIXELS16(static, ff_avg, , , _mmxext) | |||||
PIXELS16(static, ff_put, , , _mmxext) | |||||
#define DEF_QPEL(OPNAME)\ | #define DEF_QPEL(OPNAME)\ | ||||
void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\ | void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\ | ||||
void ff_ ## OPNAME ## _h264_qpel8_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\ | void ff_ ## OPNAME ## _h264_qpel8_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\ | ||||
@@ -1,77 +0,0 @@ | |||||
/* | |||||
* DSP utils : average functions are compiled twice for 3dnow/mmxext | |||||
* Copyright (c) 2000, 2001 Fabrice Bellard | |||||
* Copyright (c) 2002-2004 Michael Niedermayer | |||||
* | |||||
* MMX optimization by Nick Kurshev <nickols_k@mail.ru> | |||||
* mostly rewritten by Michael Niedermayer <michaelni@gmx.at> | |||||
* and improved by Zdenek Kabelac <kabi@users.sf.net> | |||||
* | |||||
* This file is part of FFmpeg. | |||||
* | |||||
* FFmpeg is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU Lesser General Public | |||||
* License as published by the Free Software Foundation; either | |||||
* version 2.1 of the License, or (at your option) any later version. | |||||
* | |||||
* FFmpeg is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
* Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public | |||||
* License along with FFmpeg; if not, write to the Free Software | |||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
//FIXME the following could be optimized too ... | |||||
static void DEF(put_no_rnd_pixels16_x2)(uint8_t *block, | |||||
const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_put_no_rnd_pixels8_x2)(block, pixels, line_size, h); | |||||
DEF(ff_put_no_rnd_pixels8_x2)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(put_pixels16_y2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_put_pixels8_y2)(block, pixels, line_size, h); | |||||
DEF(ff_put_pixels8_y2)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(put_no_rnd_pixels16_y2)(uint8_t *block, | |||||
const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_put_no_rnd_pixels8_y2)(block, pixels, line_size, h); | |||||
DEF(ff_put_no_rnd_pixels8_y2)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(avg_pixels16)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_avg_pixels8)(block, pixels, line_size, h); | |||||
DEF(ff_avg_pixels8)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(avg_pixels16_x2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_avg_pixels8_x2)(block, pixels, line_size, h); | |||||
DEF(ff_avg_pixels8_x2)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(avg_pixels16_y2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_avg_pixels8_y2)(block, pixels, line_size, h); | |||||
DEF(ff_avg_pixels8_y2)(block + 8, pixels + 8, line_size, h); | |||||
} | |||||
static void DEF(avg_pixels16_xy2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(ff_avg_pixels8_xy2)(block, pixels, line_size, h); | |||||
DEF(ff_avg_pixels8_xy2)(block + 8, pixels + 8, line_size, h); | |||||
} |
@@ -105,6 +105,13 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels, | |||||
#undef PAVGBP | #undef PAVGBP | ||||
#undef PAVGB | #undef PAVGB | ||||
#undef STATIC | #undef STATIC | ||||
PIXELS16(static, avg_no_rnd, , _y2, _mmx) | |||||
PIXELS16(static, put_no_rnd, , _y2, _mmx) | |||||
PIXELS16(static, avg_no_rnd, , _xy2, _mmx) | |||||
PIXELS16(static, put_no_rnd, , _xy2, _mmx) | |||||
/***********************************/ | /***********************************/ | ||||
/* MMX rounding */ | /* MMX rounding */ | ||||
@@ -120,27 +127,25 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels, | |||||
#undef PAVGBP | #undef PAVGBP | ||||
#undef PAVGB | #undef PAVGB | ||||
PIXELS16(static, avg, , _y2, _mmx) | |||||
PIXELS16(static, put, , _y2, _mmx) | |||||
#endif /* HAVE_INLINE_ASM */ | #endif /* HAVE_INLINE_ASM */ | ||||
#if HAVE_YASM | #if HAVE_YASM | ||||
/***********************************/ | |||||
/* 3Dnow specific */ | |||||
#define DEF(x) x ## _3dnow | |||||
#include "hpeldsp_avg_template.c" | |||||
#undef DEF | |||||
/***********************************/ | |||||
/* MMXEXT specific */ | |||||
#define DEF(x) x ## _mmxext | |||||
#include "hpeldsp_avg_template.c" | |||||
#undef DEF | |||||
#define HPELDSP_AVG_PIXELS16(CPUEXT) \ | |||||
PIXELS16(static, put_no_rnd, ff_, _x2, CPUEXT) \ | |||||
PIXELS16(static, put, ff_, _y2, CPUEXT) \ | |||||
PIXELS16(static, put_no_rnd, ff_, _y2, CPUEXT) \ | |||||
PIXELS16(static, avg, ff_, , CPUEXT) \ | |||||
PIXELS16(static, avg, ff_, _x2, CPUEXT) \ | |||||
PIXELS16(static, avg, ff_, _y2, CPUEXT) \ | |||||
PIXELS16(static, avg, ff_, _xy2, CPUEXT) | |||||
HPELDSP_AVG_PIXELS16(_3dnow) | |||||
HPELDSP_AVG_PIXELS16(_mmxext) | |||||
#endif /* HAVE_YASM */ | #endif /* HAVE_YASM */ | ||||
@@ -196,14 +196,3 @@ static void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_ | |||||
:"r"((x86_reg)line_size) | :"r"((x86_reg)line_size) | ||||
:REG_a, "memory"); | :REG_a, "memory"); | ||||
} | } | ||||
//FIXME optimize | |||||
static void DEF(put, pixels16_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){ | |||||
DEF(put, pixels8_y2)(block , pixels , line_size, h); | |||||
DEF(put, pixels8_y2)(block+8, pixels+8, line_size, h); | |||||
} | |||||
static void DEF(avg, pixels16_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){ | |||||
DEF(avg, pixels8_y2)(block , pixels , line_size, h); | |||||
DEF(avg, pixels8_y2)(block+8, pixels+8, line_size, h); | |||||
} |
@@ -29,4 +29,7 @@ | |||||
#include "rnd_template.c" | #include "rnd_template.c" | ||||
PIXELS16(, ff_avg, , _xy2, _mmx) | |||||
PIXELS16(, ff_put, , _xy2, _mmx) | |||||
#endif /* HAVE_INLINE_ASM */ | #endif /* HAVE_INLINE_ASM */ |
@@ -171,18 +171,3 @@ STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels, | |||||
:"D"(block), "r"((x86_reg)line_size) | :"D"(block), "r"((x86_reg)line_size) | ||||
:REG_a, "memory"); | :REG_a, "memory"); | ||||
} | } | ||||
//FIXME optimize | |||||
STATIC void DEF(put, pixels16_xy2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(put, pixels8_xy2)(block , pixels , line_size, h); | |||||
DEF(put, pixels8_xy2)(block+8, pixels+8, line_size, h); | |||||
} | |||||
STATIC void DEF(avg, pixels16_xy2)(uint8_t *block, const uint8_t *pixels, | |||||
ptrdiff_t line_size, int h) | |||||
{ | |||||
DEF(avg, pixels8_xy2)(block , pixels , line_size, h); | |||||
DEF(avg, pixels8_xy2)(block+8, pixels+8, line_size, h); | |||||
} |