From e7373585f827d4ec05d952daa3877e8decfe3c08 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Thu, 9 Jan 2014 00:56:33 +0100 Subject: dsputil_template: Move bits that are used templatized into separate file This allows detemplatizing the bits that are not instantiated twice. --- libavcodec/dsputil.c | 3 ++- libavcodec/dsputil_template.c | 27 --------------------- libavcodec/dsputilenc_template.c | 51 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 libavcodec/dsputilenc_template.c diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index e41ea86e09..5bb9441586 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -44,13 +44,14 @@ uint32_t ff_square_tab[512] = { 0, }; #define BIT_DEPTH 16 -#include "dsputil_template.c" +#include "dsputilenc_template.c" #undef BIT_DEPTH #define BIT_DEPTH 8 #include "hpel_template.c" #include "tpel_template.c" #include "dsputil_template.c" +#include "dsputilenc_template.c" // 0x7f7f7f7f or 0x7f7f7f7f7f7f7f7f or whatever, depending on the cpu's native arithmetic size #define pb_7f (~0UL / 255 * 0x7f) diff --git a/libavcodec/dsputil_template.c b/libavcodec/dsputil_template.c index c2b30d2b1e..f9bf5f113c 100644 --- a/libavcodec/dsputil_template.c +++ b/libavcodec/dsputil_template.c @@ -31,7 +31,6 @@ #include "bit_depth_template.c" -#if BIT_DEPTH == 8 /* draw the edges of width 'w' of an image of size width, height */ // FIXME: Check that this is OK for MPEG-4 interlaced. static void FUNCC(draw_edges)(uint8_t *_buf, int _wrap, int width, int height, @@ -62,30 +61,7 @@ static void FUNCC(draw_edges)(uint8_t *_buf, int _wrap, int width, int height, memcpy(last_line + (i + 1) * wrap, last_line, (width + w + w) * sizeof(pixel)); } -#endif -static void FUNCC(get_pixels)(int16_t *restrict block, const uint8_t *_pixels, - int line_size) -{ - const pixel *pixels = (const pixel *) _pixels; - int i; - - /* read the pixels */ - for (i = 0; i < 8; i++) { - block[0] = pixels[0]; - block[1] = pixels[1]; - block[2] = pixels[2]; - block[3] = pixels[3]; - block[4] = pixels[4]; - block[5] = pixels[5]; - block[6] = pixels[6]; - block[7] = pixels[7]; - pixels += line_size / sizeof(pixel); - block += 8; - } -} - -#if BIT_DEPTH == 8 static void FUNCC(clear_block)(int16_t *block) { memset(block, 0, sizeof(int16_t) * 64); @@ -95,7 +71,6 @@ static void FUNCC(clear_blocks)(int16_t *blocks) { memset(blocks, 0, sizeof(int16_t) * 6 * 64); } -#endif #define PIXOP2(OPNAME, OP) \ static inline void FUNC(OPNAME ## _no_rnd_pixels8_l2)(uint8_t *dst, \ @@ -338,10 +313,8 @@ CALL_2X_PIXELS(FUNCC(OPNAME ## _pixels16_xy2), \ #define op_avg(a, b) a = rnd_avg_pixel4(a, b) #define op_put(a, b) a = b -#if BIT_DEPTH == 8 #define put_no_rnd_pixels8_8_c put_pixels8_8_c PIXOP2(avg, op_avg) PIXOP2(put, op_put) -#endif #undef op_avg #undef op_put diff --git a/libavcodec/dsputilenc_template.c b/libavcodec/dsputilenc_template.c new file mode 100644 index 0000000000..94e0d7cda0 --- /dev/null +++ b/libavcodec/dsputilenc_template.c @@ -0,0 +1,51 @@ +/* + * DSP utils + * Copyright (c) 2000, 2001 Fabrice Bellard + * Copyright (c) 2002-2004 Michael Niedermayer + * + * gmc & q-pel & 32/64 bit based MC by Michael Niedermayer + * + * 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 + */ + +/** + * @file + * DSP utils + */ + +#include "bit_depth_template.c" + +static void FUNCC(get_pixels)(int16_t *restrict block, const uint8_t *_pixels, + int line_size) +{ + const pixel *pixels = (const pixel *) _pixels; + int i; + + /* read the pixels */ + for (i = 0; i < 8; i++) { + block[0] = pixels[0]; + block[1] = pixels[1]; + block[2] = pixels[2]; + block[3] = pixels[3]; + block[4] = pixels[4]; + block[5] = pixels[5]; + block[6] = pixels[6]; + block[7] = pixels[7]; + pixels += line_size / sizeof(pixel); + block += 8; + } +} -- cgit v1.2.3