Browse Source

dsputil: Refactor duplicated CALL_2X_PIXELS / PIXELS16 macros

tags/n2.3
Diego Biurrun 12 years ago
parent
commit
322a1dda97
12 changed files with 68 additions and 43 deletions
  1. +1
    -1
      libavcodec/arm/hpeldsp_init_arm.c
  2. +0
    -2
      libavcodec/dsputil.h
  3. +2
    -0
      libavcodec/dsputil_template.c
  4. +2
    -0
      libavcodec/hpel_template.c
  5. +2
    -0
      libavcodec/hpeldsp_template.c
  6. +37
    -0
      libavcodec/pixels.h
  7. +0
    -8
      libavcodec/rnd_avg.h
  8. +3
    -2
      libavcodec/x86/dsputil_init.c
  9. +0
    -12
      libavcodec/x86/dsputil_x86.h
  10. +3
    -2
      libavcodec/x86/h264_qpel.c
  11. +15
    -14
      libavcodec/x86/hpeldsp_init.c
  12. +3
    -2
      libavcodec/x86/rnd_mmx.c

+ 1
- 1
libavcodec/arm/hpeldsp_init_arm.c View File

@@ -21,7 +21,7 @@


#include "libavutil/arm/cpu.h" #include "libavutil/arm/cpu.h"
#include "libavutil/attributes.h" #include "libavutil/attributes.h"
#include "libavcodec/rnd_avg.h"
#include "libavcodec/pixels.h"
#include "hpeldsp_arm.h" #include "hpeldsp_arm.h"


void ff_put_pixels8_arm(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_put_pixels8_arm(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h);


+ 0
- 2
libavcodec/dsputil.h View File

@@ -31,7 +31,6 @@
#define AVCODEC_DSPUTIL_H #define AVCODEC_DSPUTIL_H


#include "avcodec.h" #include "avcodec.h"
#include "rnd_avg.h"


/* encoding scans */ /* encoding scans */
extern const uint8_t ff_alternate_horizontal_scan[64]; extern const uint8_t ff_alternate_horizontal_scan[64];
@@ -40,7 +39,6 @@ extern const uint8_t ff_zigzag248_direct[64];


extern uint32_t ff_square_tab[512]; extern uint32_t ff_square_tab[512];


/* pixel operations */
void ff_put_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); void ff_put_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); void ff_avg_pixels8x8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);
void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride); void ff_put_pixels16x16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride);


+ 2
- 0
libavcodec/dsputil_template.c View File

@@ -27,6 +27,8 @@
* DSP utils * DSP utils
*/ */


#include "pixels.h"

#include "bit_depth_template.c" #include "bit_depth_template.c"


#if BIT_DEPTH == 8 #if BIT_DEPTH == 8


+ 2
- 0
libavcodec/hpel_template.c View File

@@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */


#include "pixels.h"

#define DEF_HPEL(OPNAME, OP) \ #define DEF_HPEL(OPNAME, OP) \
static inline void FUNCC(OPNAME ## _pixels2)(uint8_t *block, \ static inline void FUNCC(OPNAME ## _pixels2)(uint8_t *block, \
const uint8_t *pixels, \ const uint8_t *pixels, \


+ 2
- 0
libavcodec/hpeldsp_template.c View File

@@ -28,6 +28,8 @@
* Half-pel DSP functions * Half-pel DSP functions
*/ */


#include "pixels.h"

#include "bit_depth_template.c" #include "bit_depth_template.c"


#include "hpel_template.c" #include "hpel_template.c"


+ 37
- 0
libavcodec/pixels.h View File

@@ -0,0 +1,37 @@
/*
* This file is part of Libav.
*
* Libav 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.
*
* Libav 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 Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#ifndef AVCODEC_PIXELS_H
#define AVCODEC_PIXELS_H

#include <stddef.h>
#include <stdint.h>

/* pixel operations */
#define CALL_2X_PIXELS_MACRO(STATIC, a, b, n) \
STATIC void a(uint8_t *block, const uint8_t *pixels, \
ptrdiff_t line_size, int h) \
{ \
b(block, pixels, line_size, h); \
b(block + n, pixels + n, line_size, h); \
}

#define CALL_2X_PIXELS(a, b, n) CALL_2X_PIXELS_MACRO(static, a, b, n)
#define CALL_2X_PIXELS_EXPORT(a, b, n) CALL_2X_PIXELS_MACRO(, a, b, n)

#endif /* AVCODEC_PIXELS_H */

+ 0
- 8
libavcodec/rnd_avg.h View File

@@ -22,14 +22,6 @@
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>


#define CALL_2X_PIXELS(a, b, n) \
static void a(uint8_t *block, const uint8_t *pixels, \
ptrdiff_t line_size, int h) \
{ \
b(block, pixels, line_size, h); \
b(block + n, pixels + n, line_size, h); \
}

#define BYTE_VEC32(c) ((c) * 0x01010101UL) #define BYTE_VEC32(c) ((c) * 0x01010101UL)
#define BYTE_VEC64(c) ((c) * 0x0001000100010001UL) #define BYTE_VEC64(c) ((c) * 0x0001000100010001UL)




+ 3
- 2
libavcodec/x86/dsputil_init.c View File

@@ -24,6 +24,7 @@
#include "libavutil/x86/cpu.h" #include "libavutil/x86/cpu.h"
#include "libavcodec/avcodec.h" #include "libavcodec/avcodec.h"
#include "libavcodec/dsputil.h" #include "libavcodec/dsputil.h"
#include "libavcodec/pixels.h"
#include "libavcodec/simple_idct.h" #include "libavcodec/simple_idct.h"
#include "libavcodec/version.h" #include "libavcodec/version.h"
#include "dsputil_x86.h" #include "dsputil_x86.h"
@@ -107,8 +108,8 @@ void ff_vector_clip_int32_sse4(int32_t *dst, const int32_t *src,


#if HAVE_YASM #if HAVE_YASM


PIXELS16(static, ff_avg, , , _mmxext)
PIXELS16(static, ff_put, , , _mmxext)
CALL_2X_PIXELS(ff_avg_pixels16_mmxext, ff_avg_pixels8_mmxext, 8)
CALL_2X_PIXELS(ff_put_pixels16_mmxext, ff_put_pixels8_mmxext, 8)


#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, \


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

@@ -91,16 +91,4 @@ void ff_put_pixels8_xy2_mmx(uint8_t *block, const uint8_t *pixels,
void ff_put_pixels16_xy2_mmx(uint8_t *block, const uint8_t *pixels, void ff_put_pixels16_xy2_mmx(uint8_t *block, const uint8_t *pixels,
ptrdiff_t line_size, int h); ptrdiff_t line_size, int h);


#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_X86_H */ #endif /* AVCODEC_X86_DSPUTIL_X86_H */

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

@@ -25,6 +25,7 @@
#include "libavutil/x86/cpu.h" #include "libavutil/x86/cpu.h"
#include "libavcodec/h264qpel.h" #include "libavcodec/h264qpel.h"
#include "libavcodec/mpegvideo.h" #include "libavcodec/mpegvideo.h"
#include "libavcodec/pixels.h"
#include "dsputil_x86.h" #include "dsputil_x86.h"


#if HAVE_YASM #if HAVE_YASM
@@ -49,8 +50,8 @@ 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)
CALL_2X_PIXELS(ff_avg_pixels16_mmxext, ff_avg_pixels8_mmxext, 8)
CALL_2X_PIXELS(ff_put_pixels16_mmxext, ff_avg_pixels8_mmxext, 8)


#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);\


+ 15
- 14
libavcodec/x86/hpeldsp_init.c View File

@@ -28,6 +28,7 @@
#include "libavutil/x86/cpu.h" #include "libavutil/x86/cpu.h"
#include "libavcodec/avcodec.h" #include "libavcodec/avcodec.h"
#include "libavcodec/hpeldsp.h" #include "libavcodec/hpeldsp.h"
#include "libavcodec/pixels.h"
#include "dsputil_x86.h" #include "dsputil_x86.h"


void ff_put_pixels8_x2_mmxext(uint8_t *block, const uint8_t *pixels, void ff_put_pixels8_x2_mmxext(uint8_t *block, const uint8_t *pixels,
@@ -109,11 +110,11 @@ void ff_avg_pixels8_xy2_3dnow(uint8_t *block, const uint8_t *pixels,
#undef PAVGB #undef PAVGB
#undef STATIC #undef STATIC


PIXELS16(static, avg_no_rnd, , _y2, _mmx)
PIXELS16(static, put_no_rnd, , _y2, _mmx)
CALL_2X_PIXELS(avg_no_rnd_pixels16_y2_mmx, avg_no_rnd_pixels8_y2_mmx, 8)
CALL_2X_PIXELS(put_no_rnd_pixels16_y2_mmx, put_no_rnd_pixels8_y2_mmx, 8)


PIXELS16(static, avg_no_rnd, , _xy2, _mmx)
PIXELS16(static, put_no_rnd, , _xy2, _mmx)
CALL_2X_PIXELS(avg_no_rnd_pixels16_xy2_mmx, avg_no_rnd_pixels8_xy2_mmx, 8)
CALL_2X_PIXELS(put_no_rnd_pixels16_xy2_mmx, put_no_rnd_pixels8_xy2_mmx, 8)


/***********************************/ /***********************************/
/* MMX rounding */ /* MMX rounding */
@@ -130,22 +131,22 @@ PIXELS16(static, put_no_rnd, , _xy2, _mmx)
#undef PAVGBP #undef PAVGBP
#undef PAVGB #undef PAVGB


PIXELS16(static, avg, , _y2, _mmx)
PIXELS16(static, put, , _y2, _mmx)
CALL_2X_PIXELS(avg_pixels16_y2_mmx, avg_pixels8_y2_mmx, 8)
CALL_2X_PIXELS(put_pixels16_y2_mmx, put_pixels8_y2_mmx, 8)


#endif /* HAVE_INLINE_ASM */ #endif /* HAVE_INLINE_ASM */




#if HAVE_YASM #if HAVE_YASM


#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)
#define HPELDSP_AVG_PIXELS16(CPUEXT) \
CALL_2X_PIXELS(put_no_rnd_pixels16_x2 ## CPUEXT, ff_put_no_rnd_pixels8_x2 ## CPUEXT, 8) \
CALL_2X_PIXELS(put_pixels16_y2 ## CPUEXT, ff_put_pixels8_y2 ## CPUEXT, 8) \
CALL_2X_PIXELS(put_no_rnd_pixels16_y2 ## CPUEXT, ff_put_no_rnd_pixels8_y2 ## CPUEXT, 8) \
CALL_2X_PIXELS(avg_pixels16 ## CPUEXT, ff_avg_pixels8 ## CPUEXT, 8) \
CALL_2X_PIXELS(avg_pixels16_x2 ## CPUEXT, ff_avg_pixels8_x2 ## CPUEXT, 8) \
CALL_2X_PIXELS(avg_pixels16_y2 ## CPUEXT, ff_avg_pixels8_y2 ## CPUEXT, 8) \
CALL_2X_PIXELS(avg_pixels16_xy2 ## CPUEXT, ff_avg_pixels8_xy2 ## CPUEXT, 8)


HPELDSP_AVG_PIXELS16(_3dnow) HPELDSP_AVG_PIXELS16(_3dnow)
HPELDSP_AVG_PIXELS16(_mmxext) HPELDSP_AVG_PIXELS16(_mmxext)


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

@@ -17,6 +17,7 @@
*/ */


#include "config.h" #include "config.h"
#include "libavcodec/pixels.h"
#include "dsputil_x86.h" #include "dsputil_x86.h"
#include "inline_asm.h" #include "inline_asm.h"


@@ -30,7 +31,7 @@


#include "rnd_template.c" #include "rnd_template.c"


PIXELS16(, ff_avg, , _xy2, _mmx)
PIXELS16(, ff_put, , _xy2, _mmx)
CALL_2X_PIXELS_EXPORT(ff_avg_pixels16_xy2_mmx, ff_avg_pixels8_xy2_mmx, 8)
CALL_2X_PIXELS_EXPORT(ff_put_pixels16_xy2_mmx, ff_put_pixels8_xy2_mmx, 8)


#endif /* HAVE_INLINE_ASM */ #endif /* HAVE_INLINE_ASM */

Loading…
Cancel
Save