1 /* 2 * AAC defines 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVCODEC_AAC_DEFINES_H 22 #define AVCODEC_AAC_DEFINES_H 23 24 #ifndef USE_FIXED 25 #define USE_FIXED 0 26 #endif 27 28 #if USE_FIXED 29 30 #include "libavutil/softfloat.h" 31 32 #define FFT_FLOAT 0 33 34 #define AAC_RENAME(x) x ## _fixed 35 #define AAC_RENAME_32(x) x ## _fixed_32 36 #define AAC_RENAME2(x) x ## _fixed 37 typedef int INTFLOAT; 38 typedef unsigned UINTFLOAT; ///< Equivalent to INTFLOAT, Used as temporal cast to avoid undefined sign overflow operations. 39 typedef int64_t INT64FLOAT; 40 typedef int16_t SHORTFLOAT; 41 typedef SoftFloat AAC_FLOAT; 42 typedef int AAC_SIGNE; 43 #define FIXR(a) ((int)((a) * 1 + 0.5)) 44 #define FIXR10(a) ((int)((a) * 1024.0 + 0.5)) 45 #define Q23(a) (int)((a) * 8388608.0 + 0.5) 46 #define Q30(x) (int)((x)*1073741824.0 + 0.5) 47 #define Q31(x) (int)((x)*2147483648.0 + 0.5) 48 #define RANGE15(x) x 49 #define GET_GAIN(x, y) (-(y) * (1 << (x))) + 1024 50 #define AAC_MUL16(x, y) (int)(((int64_t)(x) * (y) + 0x8000) >> 16) 51 #define AAC_MUL26(x, y) (int)(((int64_t)(x) * (y) + 0x2000000) >> 26) 52 #define AAC_MUL30(x, y) (int)(((int64_t)(x) * (y) + 0x20000000) >> 30) 53 #define AAC_MUL31(x, y) (int)(((int64_t)(x) * (y) + 0x40000000) >> 31) 54 #define AAC_MADD28(x, y, a, b) (int)((((int64_t)(x) * (y)) + \ 55 ((int64_t)(a) * (b)) + \ 56 0x8000000) >> 28) 57 #define AAC_MADD30(x, y, a, b) (int)((((int64_t)(x) * (y)) + \ 58 ((int64_t)(a) * (b)) + \ 59 0x20000000) >> 30) 60 #define AAC_MADD30_V8(x, y, a, b, c, d, e, f) (int)((((int64_t)(x) * (y)) + \ 61 ((int64_t)(a) * (b)) + \ 62 ((int64_t)(c) * (d)) + \ 63 ((int64_t)(e) * (f)) + \ 64 0x20000000) >> 30) 65 #define AAC_MSUB30(x, y, a, b) (int)((((int64_t)(x) * (y)) - \ 66 ((int64_t)(a) * (b)) + \ 67 0x20000000) >> 30) 68 #define AAC_MSUB30_V8(x, y, a, b, c, d, e, f) (int)((((int64_t)(x) * (y)) + \ 69 ((int64_t)(a) * (b)) - \ 70 ((int64_t)(c) * (d)) - \ 71 ((int64_t)(e) * (f)) + \ 72 0x20000000) >> 30) 73 #define AAC_MSUB31_V3(x, y, z) (int)((((int64_t)(x) * (z)) - \ 74 ((int64_t)(y) * (z)) + \ 75 0x40000000) >> 31) 76 #define AAC_HALF_SUM(x, y) (((x) >> 1) + ((y) >> 1)) 77 #define AAC_SRA_R(x, y) (int)(((x) + (1 << ((y) - 1))) >> (y)) 78 79 #else 80 81 #define FFT_FLOAT 1 82 83 #define AAC_RENAME(x) x 84 #define AAC_RENAME_32(x) x 85 #define AAC_RENAME2(x) ff_ ## x 86 typedef float INTFLOAT; 87 typedef float UINTFLOAT; 88 typedef float INT64FLOAT; 89 typedef float SHORTFLOAT; 90 typedef float AAC_FLOAT; 91 typedef unsigned AAC_SIGNE; 92 #define FIXR(x) ((float)(x)) 93 #define FIXR10(x) ((float)(x)) 94 #define Q23(x) ((float)(x)) 95 #define Q30(x) ((float)(x)) 96 #define Q31(x) ((float)(x)) 97 #define RANGE15(x) (32768.0 * (x)) 98 #define GET_GAIN(x, y) powf((x), -(y)) 99 #define AAC_MUL16(x, y) ((x) * (y)) 100 #define AAC_MUL26(x, y) ((x) * (y)) 101 #define AAC_MUL30(x, y) ((x) * (y)) 102 #define AAC_MUL31(x, y) ((x) * (y)) 103 #define AAC_MADD28(x, y, a, b) ((x) * (y) + (a) * (b)) 104 #define AAC_MADD30(x, y, a, b) ((x) * (y) + (a) * (b)) 105 #define AAC_MADD30_V8(x, y, a, b, c, d, e, f) ((x) * (y) + (a) * (b) + \ 106 (c) * (d) + (e) * (f)) 107 #define AAC_MSUB30(x, y, a, b) ((x) * (y) - (a) * (b)) 108 #define AAC_MSUB30_V8(x, y, a, b, c, d, e, f) ((x) * (y) + (a) * (b) - \ 109 (c) * (d) - (e) * (f)) 110 #define AAC_MSUB31_V3(x, y, z) ((x) - (y)) * (z) 111 #define AAC_HALF_SUM(x, y) ((x) + (y)) * 0.5f 112 #define AAC_SRA_R(x, y) (x) 113 114 #endif /* USE_FIXED */ 115 116 #endif /* AVCODEC_AAC_DEFINES_H */ 117