/src/ffmpeg/libavcodec/mpegaudio_tablegen.h
Line | Count | Source |
1 | | /* |
2 | | * Header file for hardcoded mpegaudiodec tables |
3 | | * |
4 | | * Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de> |
5 | | * |
6 | | * This file is part of FFmpeg. |
7 | | * |
8 | | * FFmpeg is free software; you can redistribute it and/or |
9 | | * modify it under the terms of the GNU Lesser General Public |
10 | | * License as published by the Free Software Foundation; either |
11 | | * version 2.1 of the License, or (at your option) any later version. |
12 | | * |
13 | | * FFmpeg is distributed in the hope that it will be useful, |
14 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | | * Lesser General Public License for more details. |
17 | | * |
18 | | * You should have received a copy of the GNU Lesser General Public |
19 | | * License along with FFmpeg; if not, write to the Free Software |
20 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | | */ |
22 | | |
23 | | #ifndef AVCODEC_MPEGAUDIO_TABLEGEN_H |
24 | | #define AVCODEC_MPEGAUDIO_TABLEGEN_H |
25 | | |
26 | | #include <stdint.h> |
27 | | #include <math.h> |
28 | | #include "libavutil/attributes.h" |
29 | | |
30 | | #if CONFIG_HARDCODED_TABLES |
31 | | #define mpegaudio_tableinit() |
32 | | #include "libavcodec/mpegaudio_tables.h" |
33 | | #else |
34 | | #if defined(BUILD_TABLES) || !USE_FLOATS |
35 | | #define FIXED_TABLE |
36 | | static uint32_t exp_table_fixed[512]; |
37 | | static uint32_t expval_table_fixed[512][16]; |
38 | | #endif |
39 | | |
40 | | #if defined(BUILD_TABLES) || USE_FLOATS |
41 | | #define FLOAT_TABLE |
42 | | static float exp_table_float[512]; |
43 | | static float expval_table_float[512][16]; |
44 | | #endif |
45 | | |
46 | 4.60k | #define IMDCT_SCALAR 1.759 |
47 | | |
48 | | static av_cold void mpegaudio_tableinit(void) |
49 | 9 | { |
50 | 9 | int i, value, exponent; |
51 | 9 | static const double exp2_lut[4] = { |
52 | 9 | 1.00000000000000000000, /* 2 ^ (0 * 0.25) */ |
53 | 9 | 1.18920711500272106672, /* 2 ^ (1 * 0.25) */ |
54 | 9 | M_SQRT2 , /* 2 ^ (2 * 0.25) */ |
55 | 9 | 1.68179283050742908606, /* 2 ^ (3 * 0.25) */ |
56 | 9 | }; |
57 | 9 | double pow43_lut[16]; |
58 | 9 | double exp2_base = 2.11758236813575084767080625169910490512847900390625e-22; // 2^(-72) |
59 | 9 | double exp2_val; |
60 | | |
61 | 153 | for (i = 0; i < 16; ++i) |
62 | 144 | pow43_lut[i] = i * cbrt(i); |
63 | | |
64 | 4.61k | for (exponent = 0; exponent < 512; exponent++) { |
65 | 4.60k | if (exponent && (exponent & 3) == 0) |
66 | 1.14k | exp2_base *= 2; |
67 | 4.60k | exp2_val = exp2_base * exp2_lut[exponent & 3] / IMDCT_SCALAR; |
68 | 78.3k | for (value = 0; value < 16; value++) { |
69 | 73.7k | double f = pow43_lut[value] * exp2_val; |
70 | | #ifdef FIXED_TABLE |
71 | 32.7k | expval_table_fixed[exponent][value] = (f < 0xFFFFFFFF ? llrint(f) : 0xFFFFFFFF); |
72 | | #endif |
73 | | #ifdef FLOAT_TABLE |
74 | | expval_table_float[exponent][value] = f; |
75 | | #endif |
76 | 73.7k | } |
77 | | #ifdef FIXED_TABLE |
78 | | exp_table_fixed[exponent] = expval_table_fixed[exponent][1]; |
79 | | #endif |
80 | | #ifdef FLOAT_TABLE |
81 | | exp_table_float[exponent] = expval_table_float[exponent][1]; |
82 | | #endif |
83 | 4.60k | } |
84 | 9 | } mpegaudiodec_float.c:mpegaudio_tableinit Line | Count | Source | 49 | 5 | { | 50 | 5 | int i, value, exponent; | 51 | 5 | static const double exp2_lut[4] = { | 52 | 5 | 1.00000000000000000000, /* 2 ^ (0 * 0.25) */ | 53 | 5 | 1.18920711500272106672, /* 2 ^ (1 * 0.25) */ | 54 | 5 | M_SQRT2 , /* 2 ^ (2 * 0.25) */ | 55 | 5 | 1.68179283050742908606, /* 2 ^ (3 * 0.25) */ | 56 | 5 | }; | 57 | 5 | double pow43_lut[16]; | 58 | 5 | double exp2_base = 2.11758236813575084767080625169910490512847900390625e-22; // 2^(-72) | 59 | 5 | double exp2_val; | 60 | | | 61 | 85 | for (i = 0; i < 16; ++i) | 62 | 80 | pow43_lut[i] = i * cbrt(i); | 63 | | | 64 | 2.56k | for (exponent = 0; exponent < 512; exponent++) { | 65 | 2.56k | if (exponent && (exponent & 3) == 0) | 66 | 635 | exp2_base *= 2; | 67 | 2.56k | exp2_val = exp2_base * exp2_lut[exponent & 3] / IMDCT_SCALAR; | 68 | 43.5k | for (value = 0; value < 16; value++) { | 69 | 40.9k | double f = pow43_lut[value] * exp2_val; | 70 | | #ifdef FIXED_TABLE | 71 | | expval_table_fixed[exponent][value] = (f < 0xFFFFFFFF ? llrint(f) : 0xFFFFFFFF); | 72 | | #endif | 73 | 40.9k | #ifdef FLOAT_TABLE | 74 | 40.9k | expval_table_float[exponent][value] = f; | 75 | 40.9k | #endif | 76 | 40.9k | } | 77 | | #ifdef FIXED_TABLE | 78 | | exp_table_fixed[exponent] = expval_table_fixed[exponent][1]; | 79 | | #endif | 80 | 2.56k | #ifdef FLOAT_TABLE | 81 | 2.56k | exp_table_float[exponent] = expval_table_float[exponent][1]; | 82 | 2.56k | #endif | 83 | 2.56k | } | 84 | 5 | } |
mpegaudiodec_fixed.c:mpegaudio_tableinit Line | Count | Source | 49 | 4 | { | 50 | 4 | int i, value, exponent; | 51 | 4 | static const double exp2_lut[4] = { | 52 | 4 | 1.00000000000000000000, /* 2 ^ (0 * 0.25) */ | 53 | 4 | 1.18920711500272106672, /* 2 ^ (1 * 0.25) */ | 54 | 4 | M_SQRT2 , /* 2 ^ (2 * 0.25) */ | 55 | 4 | 1.68179283050742908606, /* 2 ^ (3 * 0.25) */ | 56 | 4 | }; | 57 | 4 | double pow43_lut[16]; | 58 | 4 | double exp2_base = 2.11758236813575084767080625169910490512847900390625e-22; // 2^(-72) | 59 | 4 | double exp2_val; | 60 | | | 61 | 68 | for (i = 0; i < 16; ++i) | 62 | 64 | pow43_lut[i] = i * cbrt(i); | 63 | | | 64 | 2.05k | for (exponent = 0; exponent < 512; exponent++) { | 65 | 2.04k | if (exponent && (exponent & 3) == 0) | 66 | 508 | exp2_base *= 2; | 67 | 2.04k | exp2_val = exp2_base * exp2_lut[exponent & 3] / IMDCT_SCALAR; | 68 | 34.8k | for (value = 0; value < 16; value++) { | 69 | 32.7k | double f = pow43_lut[value] * exp2_val; | 70 | 32.7k | #ifdef FIXED_TABLE | 71 | 32.7k | expval_table_fixed[exponent][value] = (f < 0xFFFFFFFF ? llrint(f) : 0xFFFFFFFF); | 72 | 32.7k | #endif | 73 | | #ifdef FLOAT_TABLE | 74 | | expval_table_float[exponent][value] = f; | 75 | | #endif | 76 | 32.7k | } | 77 | 2.04k | #ifdef FIXED_TABLE | 78 | 2.04k | exp_table_fixed[exponent] = expval_table_fixed[exponent][1]; | 79 | 2.04k | #endif | 80 | | #ifdef FLOAT_TABLE | 81 | | exp_table_float[exponent] = expval_table_float[exponent][1]; | 82 | | #endif | 83 | 2.04k | } | 84 | 4 | } |
|
85 | | #undef FLOAT_TABLE |
86 | | #undef FIXED_TABLE |
87 | | #endif /* CONFIG_HARDCODED_TABLES */ |
88 | | |
89 | | #endif /* AVCODEC_MPEGAUDIO_TABLEGEN_H */ |