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