Browse Source

Merge commit '46bb456853b197f4562de7acf5d42abf11ded9be'

* 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
Michael Niedermayer 12 years ago
parent
commit
eda9d97b7a
8 changed files with 41 additions and 143 deletions
  1. +2
    -12
      libavcodec/x86/dsputil_mmx.c
  2. +12
    -0
      libavcodec/x86/dsputil_mmx.h
  3. +3
    -12
      libavcodec/x86/h264_qpel.c
  4. +0
    -77
      libavcodec/x86/hpeldsp_avg_template.c
  5. +21
    -16
      libavcodec/x86/hpeldsp_init.c
  6. +0
    -11
      libavcodec/x86/hpeldsp_rnd_template.c
  7. +3
    -0
      libavcodec/x86/rnd_mmx.c
  8. +0
    -15
      libavcodec/x86/rnd_template.c

+ 2
- 12
libavcodec/x86/dsputil_mmx.c View File

@@ -461,19 +461,9 @@ static void draw_edges_mmx(uint8_t *buf, int wrap, int width, int height,


#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) \
static void OPNAME ## qpel8_mc00_ ## MMX (uint8_t *dst, uint8_t *src, \


+ 12
- 0
libavcodec/x86/dsputil_mmx.h View File

@@ -157,4 +157,16 @@ void ff_deinterlace_line_inplace_mmx(const uint8_t *lum_m4,
const uint8_t *lum_m1,
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 */

+ 3
- 12
libavcodec/x86/h264_qpel.c View File

@@ -32,18 +32,6 @@ void ff_put_pixels4_mmxext(uint8_t *block, const uint8_t *pixels,
ptrdiff_t line_size, int h);
void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels,
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,
int dstStride, int src1Stride, int h);
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_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext

PIXELS16(static, ff_avg, , , _mmxext)
PIXELS16(static, ff_put, , , _mmxext)

#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_qpel8_h_lowpass_mmxext(uint8_t *dst, uint8_t *src, int dstStride, int srcStride);\


+ 0
- 77
libavcodec/x86/hpeldsp_avg_template.c View File

@@ -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);
}

+ 21
- 16
libavcodec/x86/hpeldsp_init.c View File

@@ -105,6 +105,13 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels,
#undef PAVGBP
#undef PAVGB
#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 */

@@ -120,27 +127,25 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels,
#undef PAVGBP
#undef PAVGB

PIXELS16(static, avg, , _y2, _mmx)
PIXELS16(static, put, , _y2, _mmx)

#endif /* HAVE_INLINE_ASM */


#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 */



+ 0
- 11
libavcodec/x86/hpeldsp_rnd_template.c View File

@@ -196,14 +196,3 @@ static void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_
:"r"((x86_reg)line_size)
: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);
}

+ 3
- 0
libavcodec/x86/rnd_mmx.c View File

@@ -29,4 +29,7 @@

#include "rnd_template.c"

PIXELS16(, ff_avg, , _xy2, _mmx)
PIXELS16(, ff_put, , _xy2, _mmx)

#endif /* HAVE_INLINE_ASM */

+ 0
- 15
libavcodec/x86/rnd_template.c View File

@@ -171,18 +171,3 @@ STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels,
:"D"(block), "r"((x86_reg)line_size)
: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);
}

Loading…
Cancel
Save