annotate aacps_tablegen.h @ 12197:fbf4d5b1b664 libavcodec

Remove FF_MM_SSE2/3 flags for CPUs where this is generally not faster than regular MMX code. Examples of this are the Core1 CPU. Instead, set a new flag, FF_MM_SSE2/3SLOW, which can be checked for particular SSE2/3 functions that have been checked specifically on such CPUs and are actually faster than their MMX counterparts. In addition, use this flag to enable particular VP8 and LPC SSE2 functions that are faster than their MMX counterparts. Based on a patch by Loren Merritt <lorenm AT u washington edu>.
author rbultje
date Mon, 19 Jul 2010 22:38:23 +0000
parents 4b2300246240
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11922
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
1 /*
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
2 * Header file for hardcoded Parametric Stereo tables
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
3 *
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
4 * Copyright (c) 2010 Alex Converse <alex.converse@gmail.com>
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
5 *
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
6 * This file is part of FFmpeg.
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
7 *
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
12 *
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
16 * Lesser General Public License for more details.
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
17 *
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
21 */
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
22
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
23 #ifndef AACPS_TABLEGEN_H
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
24 #define AACPS_TABLEGEN_H
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
25
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
26 #include <stdint.h>
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
27
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
28 #if CONFIG_HARDCODED_TABLES
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
29 #define ps_tableinit()
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
30 #include "libavcodec/aacps_tables.h"
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
31 #else
11967
4b2300246240 Remove unnecessary ../ from include directives
mru
parents: 11922
diff changeset
32 #include "libavutil/common.h"
4b2300246240 Remove unnecessary ../ from include directives
mru
parents: 11922
diff changeset
33 #include "libavutil/mathematics.h"
11922
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
34 #define NR_ALLPASS_BANDS20 30
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
35 #define NR_ALLPASS_BANDS34 50
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
36 #define PS_AP_LINKS 3
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
37 static float pd_re_smooth[8*8*8];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
38 static float pd_im_smooth[8*8*8];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
39 static float HA[46][8][4];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
40 static float HB[46][8][4];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
41 static float f20_0_8 [ 8][7][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
42 static float f34_0_12[12][7][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
43 static float f34_1_8 [ 8][7][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
44 static float f34_2_4 [ 4][7][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
45 static float Q_fract_allpass[2][50][3][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
46 static float phi_fract[2][50][2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
47
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
48 static const float g0_Q8[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
49 0.00746082949812f, 0.02270420949825f, 0.04546865930473f, 0.07266113929591f,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
50 0.09885108575264f, 0.11793710567217f, 0.125f
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
51 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
52
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
53 static const float g0_Q12[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
54 0.04081179924692f, 0.03812810994926f, 0.05144908135699f, 0.06399831151592f,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
55 0.07428313801106f, 0.08100347892914f, 0.08333333333333f
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
56 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
57
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
58 static const float g1_Q8[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
59 0.01565675600122f, 0.03752716391991f, 0.05417891378782f, 0.08417044116767f,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
60 0.10307344158036f, 0.12222452249753f, 0.125f
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
61 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
62
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
63 static const float g2_Q4[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
64 -0.05908211155639f, -0.04871498374946f, 0.0f, 0.07778723915851f,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
65 0.16486303567403f, 0.23279856662996f, 0.25f
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
66 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
67
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
68 static void make_filters_from_proto(float (*filter)[7][2], const float *proto, int bands)
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
69 {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
70 int q, n;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
71 for (q = 0; q < bands; q++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
72 for (n = 0; n < 7; n++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
73 double theta = 2 * M_PI * (q + 0.5) * (n - 6) / bands;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
74 filter[q][n][0] = proto[n] * cos(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
75 filter[q][n][1] = proto[n] * -sin(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
76 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
77 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
78 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
79
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
80 static void ps_tableinit(void)
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
81 {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
82 static const float ipdopd_sin[] = { 0, M_SQRT1_2, 1, M_SQRT1_2, 0, -M_SQRT1_2, -1, -M_SQRT1_2 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
83 static const float ipdopd_cos[] = { 1, M_SQRT1_2, 0, -M_SQRT1_2, -1, -M_SQRT1_2, 0, M_SQRT1_2 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
84 int pd0, pd1, pd2;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
85
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
86 static const float iid_par_dequant[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
87 //iid_par_dequant_default
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
88 0.05623413251903, 0.12589254117942, 0.19952623149689, 0.31622776601684,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
89 0.44668359215096, 0.63095734448019, 0.79432823472428, 1,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
90 1.25892541179417, 1.58489319246111, 2.23872113856834, 3.16227766016838,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
91 5.01187233627272, 7.94328234724282, 17.7827941003892,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
92 //iid_par_dequant_fine
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
93 0.00316227766017, 0.00562341325190, 0.01, 0.01778279410039,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
94 0.03162277660168, 0.05623413251903, 0.07943282347243, 0.11220184543020,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
95 0.15848931924611, 0.22387211385683, 0.31622776601684, 0.39810717055350,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
96 0.50118723362727, 0.63095734448019, 0.79432823472428, 1,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
97 1.25892541179417, 1.58489319246111, 1.99526231496888, 2.51188643150958,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
98 3.16227766016838, 4.46683592150963, 6.30957344480193, 8.91250938133745,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
99 12.5892541179417, 17.7827941003892, 31.6227766016838, 56.2341325190349,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
100 100, 177.827941003892, 316.227766016837,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
101 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
102 static const float icc_invq[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
103 1, 0.937, 0.84118, 0.60092, 0.36764, 0, -0.589, -1
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
104 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
105 static const float acos_icc_invq[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
106 0, 0.35685527, 0.57133466, 0.92614472, 1.1943263, M_PI/2, 2.2006171, M_PI
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
107 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
108 int iid, icc;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
109
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
110 int k, m;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
111 static const int8_t f_center_20[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
112 -3, -1, 1, 3, 5, 7, 10, 14, 18, 22,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
113 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
114 static const int8_t f_center_34[] = {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
115 2, 6, 10, 14, 18, 22, 26, 30,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
116 34,-10, -6, -2, 51, 57, 15, 21,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
117 27, 33, 39, 45, 54, 66, 78, 42,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
118 102, 66, 78, 90,102,114,126, 90,
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
119 };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
120 static const float fractional_delay_links[] = { 0.43f, 0.75f, 0.347f };
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
121 const float fractional_delay_gain = 0.39f;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
122
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
123 for (pd0 = 0; pd0 < 8; pd0++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
124 float pd0_re = ipdopd_cos[pd0];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
125 float pd0_im = ipdopd_sin[pd0];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
126 for (pd1 = 0; pd1 < 8; pd1++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
127 float pd1_re = ipdopd_cos[pd1];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
128 float pd1_im = ipdopd_sin[pd1];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
129 for (pd2 = 0; pd2 < 8; pd2++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
130 float pd2_re = ipdopd_cos[pd2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
131 float pd2_im = ipdopd_sin[pd2];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
132 float re_smooth = 0.25f * pd0_re + 0.5f * pd1_re + pd2_re;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
133 float im_smooth = 0.25f * pd0_im + 0.5f * pd1_im + pd2_im;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
134 float pd_mag = 1 / sqrt(im_smooth * im_smooth + re_smooth * re_smooth);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
135 pd_re_smooth[pd0*64+pd1*8+pd2] = re_smooth * pd_mag;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
136 pd_im_smooth[pd0*64+pd1*8+pd2] = im_smooth * pd_mag;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
137 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
138 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
139 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
140
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
141 for (iid = 0; iid < 46; iid++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
142 float c = iid_par_dequant[iid]; //<Linear Inter-channel Intensity Difference
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
143 float c1 = (float)M_SQRT2 / sqrtf(1.0f + c*c);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
144 float c2 = c * c1;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
145 for (icc = 0; icc < 8; icc++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
146 /*if (PS_BASELINE || ps->icc_mode < 3)*/ {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
147 float alpha = 0.5f * acos_icc_invq[icc];
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
148 float beta = alpha * (c1 - c2) * (float)M_SQRT1_2;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
149 HA[iid][icc][0] = c2 * cosf(beta + alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
150 HA[iid][icc][1] = c1 * cosf(beta - alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
151 HA[iid][icc][2] = c2 * sinf(beta + alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
152 HA[iid][icc][3] = c1 * sinf(beta - alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
153 } /* else */ {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
154 float alpha, gamma, mu, rho;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
155 float alpha_c, alpha_s, gamma_c, gamma_s;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
156 rho = FFMAX(icc_invq[icc], 0.05f);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
157 alpha = 0.5f * atan2f(2.0f * c * rho, c*c - 1.0f);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
158 mu = c + 1.0f / c;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
159 mu = sqrtf(1 + (4 * rho * rho - 4)/(mu * mu));
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
160 gamma = atanf(sqrtf((1.0f - mu)/(1.0f + mu)));
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
161 if (alpha < 0) alpha += M_PI/2;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
162 alpha_c = cosf(alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
163 alpha_s = sinf(alpha);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
164 gamma_c = cosf(gamma);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
165 gamma_s = sinf(gamma);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
166 HB[iid][icc][0] = M_SQRT2 * alpha_c * gamma_c;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
167 HB[iid][icc][1] = M_SQRT2 * alpha_s * gamma_c;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
168 HB[iid][icc][2] = -M_SQRT2 * alpha_s * gamma_s;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
169 HB[iid][icc][3] = M_SQRT2 * alpha_c * gamma_s;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
170 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
171 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
172 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
173
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
174 for (k = 0; k < NR_ALLPASS_BANDS20; k++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
175 double f_center, theta;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
176 if (k < FF_ARRAY_ELEMS(f_center_20))
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
177 f_center = f_center_20[k] * 0.125;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
178 else
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
179 f_center = k - 6.5f;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
180 for (m = 0; m < PS_AP_LINKS; m++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
181 theta = -M_PI * fractional_delay_links[m] * f_center;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
182 Q_fract_allpass[0][k][m][0] = cos(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
183 Q_fract_allpass[0][k][m][1] = sin(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
184 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
185 theta = -M_PI*fractional_delay_gain*f_center;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
186 phi_fract[0][k][0] = cos(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
187 phi_fract[0][k][1] = sin(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
188 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
189 for (k = 0; k < NR_ALLPASS_BANDS34; k++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
190 double f_center, theta;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
191 if (k < FF_ARRAY_ELEMS(f_center_34))
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
192 f_center = f_center_34[k] / 24.;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
193 else
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
194 f_center = k - 26.5f;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
195 for (m = 0; m < PS_AP_LINKS; m++) {
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
196 theta = -M_PI * fractional_delay_links[m] * f_center;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
197 Q_fract_allpass[1][k][m][0] = cos(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
198 Q_fract_allpass[1][k][m][1] = sin(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
199 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
200 theta = -M_PI*fractional_delay_gain*f_center;
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
201 phi_fract[1][k][0] = cos(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
202 phi_fract[1][k][1] = sin(theta);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
203 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
204
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
205 make_filters_from_proto(f20_0_8, g0_Q8, 8);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
206 make_filters_from_proto(f34_0_12, g0_Q12, 12);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
207 make_filters_from_proto(f34_1_8, g1_Q8, 8);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
208 make_filters_from_proto(f34_2_4, g2_Q4, 4);
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
209 }
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
210 #endif /* CONFIG_HARDCODED_TABLES */
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
211
8c657be75c11 Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
diff changeset
212 #endif /* AACPS_TABLEGEN_H */