1/* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19#include "mathops.h" 20#include "rnd_avg.h" 21#include "libavutil/intreadwrite.h" 22 23#ifndef BIT_DEPTH 24#define BIT_DEPTH 8 25#endif 26 27#ifdef AVCODEC_BIT_DEPTH_TEMPLATE_C 28# undef pixel 29# undef pixel2 30# undef pixel4 31# undef dctcoef 32# undef idctin 33# undef INIT_CLIP 34# undef no_rnd_avg_pixel4 35# undef rnd_avg_pixel4 36# undef AV_RN2P 37# undef AV_RN4P 38# undef AV_RN4PA 39# undef AV_WN2P 40# undef AV_WN4P 41# undef AV_WN4PA 42# undef CLIP 43# undef FUNC 44# undef FUNCC 45# undef av_clip_pixel 46# undef PIXEL_SPLAT_X4 47#else 48# define AVCODEC_BIT_DEPTH_TEMPLATE_C 49#endif 50 51#if BIT_DEPTH > 8 52# define pixel uint16_t 53# define pixel2 uint32_t 54# define pixel4 uint64_t 55# define dctcoef int32_t 56 57#ifdef IN_IDCT_DEPTH 58#if IN_IDCT_DEPTH == 32 59# define idctin int32_t 60#else 61# define idctin int16_t 62#endif 63#else 64# define idctin int16_t 65#endif 66 67# define INIT_CLIP 68# define no_rnd_avg_pixel4 no_rnd_avg64 69# define rnd_avg_pixel4 rnd_avg64 70# define AV_RN2P AV_RN32 71# define AV_RN4P AV_RN64 72# define AV_RN4PA AV_RN64A 73# define AV_WN2P AV_WN32 74# define AV_WN4P AV_WN64 75# define AV_WN4PA AV_WN64A 76# define PIXEL_SPLAT_X4(x) ((x)*0x0001000100010001ULL) 77 78# define av_clip_pixel(a) av_clip_uintp2(a, BIT_DEPTH) 79# define CLIP(a) av_clip_uintp2(a, BIT_DEPTH) 80#else 81# define pixel uint8_t 82# define pixel2 uint16_t 83# define pixel4 uint32_t 84# define dctcoef int16_t 85# define idctin int16_t 86 87# define INIT_CLIP 88# define no_rnd_avg_pixel4 no_rnd_avg32 89# define rnd_avg_pixel4 rnd_avg32 90# define AV_RN2P AV_RN16 91# define AV_RN4P AV_RN32 92# define AV_RN4PA AV_RN32A 93# define AV_WN2P AV_WN16 94# define AV_WN4P AV_WN32 95# define AV_WN4PA AV_WN32A 96# define PIXEL_SPLAT_X4(x) ((x)*0x01010101U) 97 98# define av_clip_pixel(a) av_clip_uint8(a) 99# define CLIP(a) av_clip_uint8(a) 100#endif 101 102#define FUNC3(a, b, c) a ## _ ## b ## c 103#define FUNC2(a, b, c) FUNC3(a, b, c) 104#define FUNC(a) FUNC2(a, BIT_DEPTH,) 105#define FUNCC(a) FUNC2(a, BIT_DEPTH, _c) 106#define FUNC4(a, b, c) a ## _int ## b ## _ ## c ## bit 107#define FUNC5(a, b, c) FUNC4(a, b, c) 108#define FUNC6(a) FUNC5(a, IN_IDCT_DEPTH, BIT_DEPTH) 109