This allows detemplatizing the bits that are not instantiated twice.tags/n2.3
| @@ -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) | |||
| @@ -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 | |||
| @@ -0,0 +1,51 @@ | |||
| /* | |||
| * DSP utils | |||
| * Copyright (c) 2000, 2001 Fabrice Bellard | |||
| * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> | |||
| * | |||
| * gmc & q-pel & 32/64 bit based MC by Michael Niedermayer <michaelni@gmx.at> | |||
| * | |||
| * 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; | |||
| } | |||
| } | |||