Mercurial > mplayer.hg
annotate libfaad2/drm_dec.c @ 29692:235868858ee7
Avoid a memleak if realloc fails in grow_array.
author | reimar |
---|---|
date | Wed, 30 Sep 2009 07:33:05 +0000 |
parents | e83eef58b30a |
children |
rev | line source |
---|---|
18141 | 1 /* |
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR and PS decoding | |
3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com | |
4 ** | |
5 ** This program is free software; you can redistribute it and/or modify | |
6 ** it under the terms of the GNU General Public License as published by | |
7 ** the Free Software Foundation; either version 2 of the License, or | |
8 ** (at your option) any later version. | |
9 ** | |
10 ** This program is distributed in the hope that it will be useful, | |
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 ** GNU General Public License for more details. | |
14 ** | |
15 ** You should have received a copy of the GNU General Public License | |
16 ** along with this program; if not, write to the Free Software | |
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
18 ** | |
19 ** Any non-GPL usage of this software or parts of this software is strictly | |
20 ** forbidden. | |
21 ** | |
22 ** Commercial non-GPL licensing of this software is possible. | |
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. | |
24 ** | |
25 ** $Id$ | |
26 **/ | |
27 | |
28 #include <stdlib.h> | |
29 #include <stdio.h> | |
30 #include <string.h> | |
31 #include <math.h> | |
32 #include "common.h" | |
33 | |
34 #ifdef DRM | |
35 | |
36 #include "sbr_dec.h" | |
37 #include "drm_dec.h" | |
38 #include "bits.h" | |
39 | |
40 /* constants */ | |
41 #define DECAY_CUTOFF 3 | |
42 #define DECAY_SLOPE 0.05f | |
43 | |
44 /* type definitaions */ | |
45 typedef const int8_t (*drm_ps_huff_tab)[2]; | |
46 | |
47 | |
48 /* binary search huffman tables */ | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
49 static const int8_t f_huffman_sa[][2] = |
18141 | 50 { |
51 { /*0*/ -15, 1 }, /* index 0: 1 bits: x */ | |
52 { 2, 3 }, /* index 1: 2 bits: 1x */ | |
53 { /*7*/ -8, 4 }, /* index 2: 3 bits: 10x */ | |
54 { 5, 6 }, /* index 3: 3 bits: 11x */ | |
55 { /*1*/ -14, /*-1*/ -16 }, /* index 4: 4 bits: 101x */ | |
56 { /*-2*/ -17, 7 }, /* index 5: 4 bits: 110x */ | |
57 { 8, 9 }, /* index 6: 4 bits: 111x */ | |
58 { /*2*/ -13, /*-3*/ -18 }, /* index 7: 5 bits: 1101x */ | |
59 { /*3*/ -12, 10 }, /* index 8: 5 bits: 1110x */ | |
60 { 11, 12 }, /* index 9: 5 bits: 1111x */ | |
61 { /*4*/ -11, /*5*/ -10 }, /* index 10: 6 bits: 11101x */ | |
62 { /*-4*/ -19, /*-5*/ -20 }, /* index 11: 6 bits: 11110x */ | |
63 { /*6*/ -9, 13 }, /* index 12: 6 bits: 11111x */ | |
64 { /*-7*/ -22, /*-6*/ -21 } /* index 13: 7 bits: 111111x */ | |
65 }; | |
66 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
67 static const int8_t t_huffman_sa[][2] = |
18141 | 68 { |
69 { /*0*/ -15, 1 }, /* index 0: 1 bits: x */ | |
70 { 2, 3 }, /* index 1: 2 bits: 1x */ | |
71 { /*-1*/ -16, /*1*/ -14 }, /* index 2: 3 bits: 10x */ | |
72 { 4, 5 }, /* index 3: 3 bits: 11x */ | |
73 { /*-2*/ -17, /*2*/ -13 }, /* index 4: 4 bits: 110x */ | |
74 { 6, 7 }, /* index 5: 4 bits: 111x */ | |
75 { /*-3*/ -18, /*3*/ -12 }, /* index 6: 5 bits: 1110x */ | |
76 { 8, 9 }, /* index 7: 5 bits: 1111x */ | |
77 { /*-4*/ -19, /*4*/ -11 }, /* index 8: 6 bits: 11110x */ | |
78 { 10, 11 }, /* index 9: 6 bits: 11111x */ | |
79 { /*-5*/ -20, /*5*/ -10 }, /* index 10: 7 bits: 111110x */ | |
80 { /*-6*/ -21, 12 }, /* index 11: 7 bits: 111111x */ | |
81 { /*-7*/ -22, 13 }, /* index 12: 8 bits: 1111111x */ | |
82 { /*6*/ -9, /*7*/ -8 } /* index 13: 9 bits: 11111111x */ | |
83 }; | |
84 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
85 static const int8_t f_huffman_pan[][2] = |
18141 | 86 { |
87 { /*0*/ -15, 1 }, /* index 0: 1 bits: x */ | |
88 { /*-1*/ -16, 2 }, /* index 1: 2 bits: 1x */ | |
89 { /*1*/ -14, 3 }, /* index 2: 3 bits: 11x */ | |
90 { 4, 5 }, /* index 3: 4 bits: 111x */ | |
91 { /*-2*/ -17, /*2*/ -13 }, /* index 4: 5 bits: 1110x */ | |
92 { 6, 7 }, /* index 5: 5 bits: 1111x */ | |
93 { /*-3*/ -18, /*3*/ -12 }, /* index 6: 6 bits: 11110x */ | |
94 { 8, 9 }, /* index 7: 6 bits: 11111x */ | |
95 { /*-4*/ -19, /*4*/ -11 }, /* index 8: 7 bits: 111110x */ | |
96 { 10, 11 }, /* index 9: 7 bits: 111111x */ | |
97 { /*-5*/ -20, /*5*/ -10 }, /* index 10: 8 bits: 1111110x */ | |
98 { 12, 13 }, /* index 11: 8 bits: 1111111x */ | |
99 { /*-6*/ -21, /*6*/ -9 }, /* index 12: 9 bits: 11111110x */ | |
100 { /*-7*/ -22, 14 }, /* index 13: 9 bits: 11111111x */ | |
101 { /*7*/ -8, 15 }, /* index 14: 10 bits: 111111111x */ | |
102 { 16, 17 }, /* index 15: 11 bits: 1111111111x */ | |
103 { /*-8*/ -23, /*8*/ -7 }, /* index 16: 12 bits: 11111111110x */ | |
104 { 18, 19 }, /* index 17: 12 bits: 11111111111x */ | |
105 { /*-10*/ -25, 20 }, /* index 18: 13 bits: 111111111110x */ | |
106 { 21, 22 }, /* index 19: 13 bits: 111111111111x */ | |
107 { /*-9*/ -24, /*9*/ -6 }, /* index 20: 14 bits: 1111111111101x */ | |
108 { /*10*/ -5, 23 }, /* index 21: 14 bits: 1111111111110x */ | |
109 { 24, 25 }, /* index 22: 14 bits: 1111111111111x */ | |
110 { /*-13*/ -28, /*-11*/ -26 }, /* index 23: 15 bits: 11111111111101x */ | |
111 { /*11*/ -4, /*13*/ -2 }, /* index 24: 15 bits: 11111111111110x */ | |
112 { 26, 27 }, /* index 25: 15 bits: 11111111111111x */ | |
113 { /*-14*/ -29, /*-12*/ -27 }, /* index 26: 16 bits: 111111111111110x */ | |
114 { /*12*/ -3, /*14*/ -1 } /* index 27: 16 bits: 111111111111111x */ | |
115 }; | |
116 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
117 static const int8_t t_huffman_pan[][2] = |
18141 | 118 { |
119 { /*0*/ -15, 1 }, /* index 0: 1 bits: x */ | |
120 { /*-1*/ -16, 2 }, /* index 1: 2 bits: 1x */ | |
121 { /*1*/ -14, 3 }, /* index 2: 3 bits: 11x */ | |
122 { /*-2*/ -17, 4 }, /* index 3: 4 bits: 111x */ | |
123 { /*2*/ -13, 5 }, /* index 4: 5 bits: 1111x */ | |
124 { /*-3*/ -18, 6 }, /* index 5: 6 bits: 11111x */ | |
125 { /*3*/ -12, 7 }, /* index 6: 7 bits: 111111x */ | |
126 { /*-4*/ -19, 8 }, /* index 7: 8 bits: 1111111x */ | |
127 { /*4*/ -11, 9 }, /* index 8: 9 bits: 11111111x */ | |
128 { 10, 11 }, /* index 9: 10 bits: 111111111x */ | |
129 { /*-5*/ -20, /*5*/ -10 }, /* index 10: 11 bits: 1111111110x */ | |
130 { 12, 13 }, /* index 11: 11 bits: 1111111111x */ | |
131 { /*-6*/ -21, /*6*/ -9 }, /* index 12: 12 bits: 11111111110x */ | |
132 { 14, 15 }, /* index 13: 12 bits: 11111111111x */ | |
133 { /*-7*/ -22, /*7*/ -8 }, /* index 14: 13 bits: 111111111110x */ | |
134 { 16, 17 }, /* index 15: 13 bits: 111111111111x */ | |
135 { /*-8*/ -23, /*8*/ -7 }, /* index 16: 14 bits: 1111111111110x */ | |
136 { 18, 19 }, /* index 17: 14 bits: 1111111111111x */ | |
137 { /*-10*/ -25, /*10*/ -5 }, /* index 18: 15 bits: 11111111111110x */ | |
138 { 20, 21 }, /* index 19: 15 bits: 11111111111111x */ | |
139 { /*-9*/ -24, /*9*/ -6 }, /* index 20: 16 bits: 111111111111110x */ | |
140 { 22, 23 }, /* index 21: 16 bits: 111111111111111x */ | |
141 { 24, 25 }, /* index 22: 17 bits: 1111111111111110x */ | |
142 { 26, 27 }, /* index 23: 17 bits: 1111111111111111x */ | |
143 { /*-14*/ -29, /*-13*/ -28 }, /* index 24: 18 bits: 11111111111111100x */ | |
144 { /*-12*/ -27, /*-11*/ -26 }, /* index 25: 18 bits: 11111111111111101x */ | |
145 { /*11*/ -4, /*12*/ -3 }, /* index 26: 18 bits: 11111111111111110x */ | |
146 { /*13*/ -2, /*14*/ -1 } /* index 27: 18 bits: 11111111111111111x */ | |
147 }; | |
148 | |
149 /* There are 3 classes in the standard but the last 2 are identical */ | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
150 static const real_t sa_quant[8][2] = |
18141 | 151 { |
152 { FRAC_CONST(0.0000), FRAC_CONST(0.0000) }, | |
153 { FRAC_CONST(0.0501), FRAC_CONST(0.1778) }, | |
154 { FRAC_CONST(0.0706), FRAC_CONST(0.2818) }, | |
155 { FRAC_CONST(0.0995), FRAC_CONST(0.4467) }, | |
156 { FRAC_CONST(0.1399), FRAC_CONST(0.5623) }, | |
157 { FRAC_CONST(0.1957), FRAC_CONST(0.7079) }, | |
158 { FRAC_CONST(0.2713), FRAC_CONST(0.8913) }, | |
159 { FRAC_CONST(0.3699), FRAC_CONST(1.0000) }, | |
160 }; | |
161 | |
162 /* We don't need the actual quantizer values */ | |
163 #if 0 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
164 static const real_t pan_quant[8][5] = |
18141 | 165 { |
166 { COEF_CONST(0.0000), COEF_CONST(0.0000), COEF_CONST(0.0000), COEF_CONST(0.0000), COEF_CONST(0.0000) }, | |
167 { COEF_CONST(0.1661), COEF_CONST(0.1661), COEF_CONST(0.3322), COEF_CONST(0.3322), COEF_CONST(0.3322) }, | |
168 { COEF_CONST(0.3322), COEF_CONST(0.3322), COEF_CONST(0.6644), COEF_CONST(0.8305), COEF_CONST(0.8305) }, | |
169 { COEF_CONST(0.4983), COEF_CONST(0.6644), COEF_CONST(0.9966), COEF_CONST(1.4949), COEF_CONST(1.6610) }, | |
170 { COEF_CONST(0.6644), COEF_CONST(0.9966), COEF_CONST(1.4949), COEF_CONST(2.1593), COEF_CONST(2.4914) }, | |
171 { COEF_CONST(0.8305), COEF_CONST(1.3288), COEF_CONST(2.1593), COEF_CONST(2.9897), COEF_CONST(3.4880) }, | |
172 { COEF_CONST(0.9966), COEF_CONST(1.8271), COEF_CONST(2.8236), COEF_CONST(3.8202), COEF_CONST(4.6507) }, | |
173 { COEF_CONST(1.3288), COEF_CONST(2.3253), COEF_CONST(3.4880), COEF_CONST(4.6507), COEF_CONST(5.8134) }, | |
174 }; | |
175 #endif | |
176 | |
177 /* 2^(pan_quant[x][y] */ | |
178 static const real_t pan_pow_2_pos[8][5] = { | |
179 { REAL_CONST(1.0000000), REAL_CONST(1.0000000), REAL_CONST(1.0000000), REAL_CONST(1.0000000), REAL_CONST(1.0000000) }, | |
180 { REAL_CONST(1.1220021), REAL_CONST(1.1220021), REAL_CONST(1.2589312), REAL_CONST(1.2589312), REAL_CONST(1.2589312) }, | |
181 { REAL_CONST(1.2589312), REAL_CONST(1.2589312), REAL_CONST(1.5849090), REAL_CONST(1.7783016), REAL_CONST(1.7783016) }, | |
182 { REAL_CONST(1.4125481), REAL_CONST(1.5849090), REAL_CONST(1.9952921), REAL_CONST(2.8184461), REAL_CONST(3.1623565) }, | |
183 { REAL_CONST(1.5849090), REAL_CONST(1.9952922), REAL_CONST(2.8184461), REAL_CONST(4.4669806), REAL_CONST(5.6232337) }, | |
184 { REAL_CONST(1.7783016), REAL_CONST(2.5119365), REAL_CONST(4.4669806), REAL_CONST(7.9430881), REAL_CONST(11.219994) }, | |
185 { REAL_CONST(1.9952921), REAL_CONST(3.5482312), REAL_CONST(7.0792671), REAL_CONST(14.125206), REAL_CONST(25.118876) }, | |
186 { REAL_CONST(2.5119365), REAL_CONST(5.0116998), REAL_CONST(11.219994), REAL_CONST(25.118876), REAL_CONST(56.235140) } | |
187 }; | |
188 | |
189 /* 2^(-pan_quant[x][y] */ | |
190 static const real_t pan_pow_2_neg[8][5] = { | |
191 { REAL_CONST(1), REAL_CONST(1), REAL_CONST(1), REAL_CONST(1), REAL_CONST(1) }, | |
192 { REAL_CONST(0.8912487), REAL_CONST(0.8912487), REAL_CONST(0.7943242), REAL_CONST(0.7943242), REAL_CONST(0.7943242) }, | |
193 { REAL_CONST(0.7943242), REAL_CONST(0.7943242), REAL_CONST(0.6309511), REAL_CONST(0.5623344), REAL_CONST(0.5623344) }, | |
194 { REAL_CONST(0.7079405), REAL_CONST(0.6309511), REAL_CONST(0.5011797), REAL_CONST(0.3548054), REAL_CONST(0.3162199) }, | |
195 { REAL_CONST(0.6309511), REAL_CONST(0.5011797), REAL_CONST(0.3548054), REAL_CONST(0.2238649), REAL_CONST(0.1778336) }, | |
196 { REAL_CONST(0.5623343), REAL_CONST(0.3980992), REAL_CONST(0.2238649), REAL_CONST(0.1258956), REAL_CONST(0.0891266) }, | |
197 { REAL_CONST(0.5011797), REAL_CONST(0.2818306), REAL_CONST(0.1412576), REAL_CONST(0.0707954), REAL_CONST(0.0398107) }, | |
198 { REAL_CONST(0.3980992), REAL_CONST(0.1995331), REAL_CONST(0.0891267), REAL_CONST(0.0398107), REAL_CONST(0.0177825) } | |
199 }; | |
200 | |
201 /* 2^(pan_quant[x][y]/30) */ | |
202 static const real_t pan_pow_2_30_pos[8][5] = { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
203 { COEF_CONST(1), COEF_CONST(1), COEF_CONST(1), COEF_CONST(1), COEF_CONST(1) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
204 { COEF_CONST(1.003845098), COEF_CONST(1.003845098), COEF_CONST(1.007704982), COEF_CONST(1.007704982), COEF_CONST(1.007704982) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
205 { COEF_CONST(1.007704982), COEF_CONST(1.007704982), COEF_CONST(1.01546933), COEF_CONST(1.019373909), COEF_CONST(1.019373909) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
206 { COEF_CONST(1.011579706), COEF_CONST(1.01546933), COEF_CONST(1.023293502), COEF_CONST(1.035142941), COEF_CONST(1.039123167) }, |
18141 | 207 { COEF_CONST(1.01546933), COEF_CONST(1.023293502), COEF_CONST(1.035142941), COEF_CONST(1.051155908), COEF_CONST(1.059252598) }, |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
208 { COEF_CONST(1.019373909), COEF_CONST(1.03117796), COEF_CONST(1.051155908), COEF_CONST(1.071518432), COEF_CONST(1.0839263) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
209 { COEF_CONST(1.023293502), COEF_CONST(1.043118698), COEF_CONST(1.067414119), COEF_CONST(1.092277933), COEF_CONST(1.113439626) }, |
18141 | 210 { COEF_CONST(1.03117796), COEF_CONST(1.055195268), COEF_CONST(1.0839263), COEF_CONST(1.113439626), COEF_CONST(1.143756546) } |
211 }; | |
212 | |
213 /* 2^(-pan_quant[x][y]/30) */ | |
214 static const real_t pan_pow_2_30_neg[8][5] = { | |
215 { COEF_CONST(1), COEF_CONST(1), COEF_CONST(1), COEF_CONST(1), COEF_CONST(1) }, | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
216 { COEF_CONST(0.99616963), COEF_CONST(0.99616963), COEF_CONST(0.992353931), COEF_CONST(0.992353931), COEF_CONST(0.99235393) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
217 { COEF_CONST(0.992353931), COEF_CONST(0.992353931), COEF_CONST(0.984766325), COEF_CONST(0.980994305), COEF_CONST(0.980994305) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
218 { COEF_CONST(0.988552848), COEF_CONST(0.984766325), COEF_CONST(0.977236734), COEF_CONST(0.966050157), COEF_CONST(0.962349827) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
219 { COEF_CONST(0.984766325), COEF_CONST(0.977236734), COEF_CONST(0.966050157), COEF_CONST(0.951333663), COEF_CONST(0.944061881) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
220 { COEF_CONST(0.980994305), COEF_CONST(0.969764715), COEF_CONST(0.951333663), COEF_CONST(0.933255062), COEF_CONST(0.922571949) }, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
221 { COEF_CONST(0.977236734), COEF_CONST(0.958663671), COEF_CONST(0.936843519), COEF_CONST(0.915517901), COEF_CONST(0.898117847) }, |
18141 | 222 { COEF_CONST(0.969764715), COEF_CONST(0.947691892), COEF_CONST(0.922571949), COEF_CONST(0.898117847), COEF_CONST(0.874311936) } |
223 }; | |
224 | |
225 static const real_t g_decayslope[MAX_SA_BAND] = { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
226 FRAC_CONST(1), FRAC_CONST(1), FRAC_CONST(1), FRAC_CONST(0.95),FRAC_CONST(0.9), FRAC_CONST(0.85), FRAC_CONST(0.8), |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
227 FRAC_CONST(0.75),FRAC_CONST(0.7), FRAC_CONST(0.65),FRAC_CONST(0.6), FRAC_CONST(0.55),FRAC_CONST(0.5), FRAC_CONST(0.45), |
18141 | 228 FRAC_CONST(0.4), FRAC_CONST(0.35),FRAC_CONST(0.3), FRAC_CONST(0.25),FRAC_CONST(0.2), FRAC_CONST(0.15), FRAC_CONST(0.1), |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
229 FRAC_CONST(0.05),FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
230 FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
231 FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0), |
18141 | 232 FRAC_CONST(0), FRAC_CONST(0), FRAC_CONST(0) |
233 }; | |
234 | |
235 static const real_t sa_sqrt_1_minus[8][2] = { | |
236 { FRAC_CONST(1), FRAC_CONST(1) }, | |
237 { FRAC_CONST(0.998744206), FRAC_CONST(0.984066644) }, | |
238 { FRAC_CONST(0.997504707), FRAC_CONST(0.959473168) }, | |
239 { FRAC_CONST(0.995037562), FRAC_CONST(0.894683804) }, | |
240 { FRAC_CONST(0.990165638), FRAC_CONST(0.826933317) }, | |
241 { FRAC_CONST(0.980663811), FRAC_CONST(0.706312672) }, | |
242 { FRAC_CONST(0.962494836), FRAC_CONST(0.45341406) }, | |
243 { FRAC_CONST(0.929071574), FRAC_CONST(0) } | |
244 }; | |
245 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
246 static const uint8_t sa_freq_scale[9][2] = |
18141 | 247 { |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
248 { 0, 0}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
249 { 1, 1}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
250 { 2, 2}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
251 { 3, 3}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
252 { 5, 5}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
253 { 7, 7}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
254 {10,10}, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
255 {13,13}, |
18141 | 256 {46,23} |
257 }; | |
258 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
259 static const uint8_t pan_freq_scale[21] = |
18141 | 260 { |
261 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, | |
262 11, 12, 13, 14, 15, 18, 22, 26, 32, 64 | |
263 }; | |
264 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
265 static const uint8_t pan_quant_class[20] = |
18141 | 266 { |
267 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, | |
268 2, 2, 2, 2, 3, 3, 3, 4, 4, 4 | |
269 }; | |
270 | |
271 /* Inverse mapping lookup */ | |
272 static const uint8_t pan_inv_freq[64] = { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
273 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
274 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, |
18141 | 275 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, |
276 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 | |
277 }; | |
278 | |
279 static const uint8_t sa_inv_freq[MAX_SA_BAND] = { | |
280 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
281 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
282 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
18141 | 283 7, 7, 7, 7, 7, 7, 7 |
284 }; | |
285 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
286 static const real_t filter_coeff[] = |
18141 | 287 { |
288 FRAC_CONST(0.65143905754106), | |
289 FRAC_CONST(0.56471812200776), | |
290 FRAC_CONST(0.48954165955695) | |
291 }; | |
292 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
293 static const uint8_t delay_length[][2] = |
18141 | 294 { |
295 { 1, 3 }, { 2, 4 }, { 3, 5 } | |
296 }; | |
297 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
298 static const real_t delay_fraction[] = |
18141 | 299 { |
300 FRAC_CONST(0.43), FRAC_CONST(0.75), FRAC_CONST(0.347) | |
301 }; | |
302 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
303 static const real_t peak_decay[2] = |
18141 | 304 { |
305 FRAC_CONST(0.58664621951003), FRAC_CONST(0.76592833836465) | |
306 }; | |
307 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
308 static const real_t smooth_coeff[2] = |
18141 | 309 { |
310 FRAC_CONST(0.6), FRAC_CONST(0.25) | |
311 }; | |
312 | |
313 /* Please note that these are the same tables as in plain PS */ | |
314 static const complex_t Q_Fract_allpass_Qmf[][3] = { | |
315 { { FRAC_CONST(0.7804303765), FRAC_CONST(0.6252426505) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.8550928831), FRAC_CONST(0.5184748173) } }, | |
316 { { FRAC_CONST(-0.4399392009), FRAC_CONST(0.8980275393) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.0643581524), FRAC_CONST(0.9979268909) } }, | |
317 { { FRAC_CONST(-0.9723699093), FRAC_CONST(-0.2334454209) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.9146071672), FRAC_CONST(0.4043435752) } }, | |
318 { { FRAC_CONST(0.0157073960), FRAC_CONST(-0.9998766184) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.7814115286), FRAC_CONST(-0.6240159869) } }, | |
319 { { FRAC_CONST(0.9792228341), FRAC_CONST(-0.2027871907) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.1920081824), FRAC_CONST(-0.9813933372) } }, | |
320 { { FRAC_CONST(0.4115142524), FRAC_CONST(0.9114032984) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.9589683414), FRAC_CONST(-0.2835132182) } }, | |
321 { { FRAC_CONST(-0.7996847630), FRAC_CONST(0.6004201174) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.6947838664), FRAC_CONST(0.7192186117) } }, | |
322 { { FRAC_CONST(-0.7604058385), FRAC_CONST(-0.6494481564) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.3164770305), FRAC_CONST(0.9486001730) } }, | |
323 { { FRAC_CONST(0.4679299891), FRAC_CONST(-0.8837655187) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.9874414206), FRAC_CONST(0.1579856575) } }, | |
324 { { FRAC_CONST(0.9645573497), FRAC_CONST(0.2638732493) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.5966450572), FRAC_CONST(-0.8025052547) } }, | |
325 { { FRAC_CONST(-0.0471066870), FRAC_CONST(0.9988898635) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.4357025325), FRAC_CONST(-0.9000906944) } }, | |
326 { { FRAC_CONST(-0.9851093888), FRAC_CONST(0.1719288528) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.9995546937), FRAC_CONST(-0.0298405960) } }, | |
327 { { FRAC_CONST(-0.3826831877), FRAC_CONST(-0.9238796234) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.4886211455), FRAC_CONST(0.8724960685) } }, | |
328 { { FRAC_CONST(0.8181498647), FRAC_CONST(-0.5750049949) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.5477093458), FRAC_CONST(0.8366686702) } }, | |
329 { { FRAC_CONST(0.7396308780), FRAC_CONST(0.6730127335) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.9951074123), FRAC_CONST(-0.0987988561) } }, | |
330 { { FRAC_CONST(-0.4954589605), FRAC_CONST(0.8686313629) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.3725017905), FRAC_CONST(-0.9280315042) } }, | |
331 { { FRAC_CONST(-0.9557929039), FRAC_CONST(-0.2940406799) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.6506417990), FRAC_CONST(-0.7593847513) } }, | |
332 { { FRAC_CONST(0.0784594864), FRAC_CONST(-0.9969173074) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.9741733670), FRAC_CONST(0.2258014232) } }, | |
333 { { FRAC_CONST(0.9900237322), FRAC_CONST(-0.1409008205) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.2502108514), FRAC_CONST(0.9681913853) } }, | |
334 { { FRAC_CONST(0.3534744382), FRAC_CONST(0.9354441762) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.7427945137), FRAC_CONST(0.6695194840) } }, | |
335 { { FRAC_CONST(-0.8358076215), FRAC_CONST(0.5490224361) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.9370992780), FRAC_CONST(-0.3490629196) } }, | |
336 { { FRAC_CONST(-0.7181259394), FRAC_CONST(-0.6959131360) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.1237744763), FRAC_CONST(-0.9923103452) } }, | |
337 { { FRAC_CONST(0.5224990249), FRAC_CONST(-0.8526399136) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.8226406574), FRAC_CONST(-0.5685616732) } }, | |
338 { { FRAC_CONST(0.9460852146), FRAC_CONST(0.3239179254) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.8844994903), FRAC_CONST(0.4665412009) } }, | |
339 { { FRAC_CONST(-0.1097348556), FRAC_CONST(0.9939609170) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.0047125919), FRAC_CONST(0.9999889135) } }, | |
340 { { FRAC_CONST(-0.9939610362), FRAC_CONST(0.1097337380) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.8888573647), FRAC_CONST(0.4581840038) } }, | |
341 { { FRAC_CONST(-0.3239168525), FRAC_CONST(-0.9460855722) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.8172453642), FRAC_CONST(-0.5762898922) } }, | |
342 { { FRAC_CONST(0.8526405096), FRAC_CONST(-0.5224980116) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.1331215799), FRAC_CONST(-0.9910997152) } }, | |
343 { { FRAC_CONST(0.6959123611), FRAC_CONST(0.7181267142) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.9403476119), FRAC_CONST(-0.3402152061) } }, | |
344 { { FRAC_CONST(-0.5490233898), FRAC_CONST(0.8358070254) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.7364512086), FRAC_CONST(0.6764906645) } }, | |
345 { { FRAC_CONST(-0.9354437590), FRAC_CONST(-0.3534754813) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.2593250275), FRAC_CONST(0.9657900929) } }, | |
346 { { FRAC_CONST(0.1409019381), FRAC_CONST(-0.9900235534) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.9762582779), FRAC_CONST(0.2166097313) } }, | |
347 { { FRAC_CONST(0.9969173670), FRAC_CONST(-0.0784583688) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.6434556246), FRAC_CONST(-0.7654833794) } }, | |
348 { { FRAC_CONST(0.2940396070), FRAC_CONST(0.9557932615) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.3812320232), FRAC_CONST(-0.9244794250) } }, | |
349 { { FRAC_CONST(-0.8686318994), FRAC_CONST(0.4954580069) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.9959943891), FRAC_CONST(-0.0894154981) } }, | |
350 { { FRAC_CONST(-0.6730118990), FRAC_CONST(-0.7396316528) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.5397993922), FRAC_CONST(0.8417937160) } }, | |
351 { { FRAC_CONST(0.5750059485), FRAC_CONST(-0.8181492686) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.4968227744), FRAC_CONST(0.8678520322) } }, | |
352 { { FRAC_CONST(0.9238792062), FRAC_CONST(0.3826842010) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.9992290139), FRAC_CONST(-0.0392601527) } }, | |
353 { { FRAC_CONST(-0.1719299555), FRAC_CONST(0.9851091504) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.4271997511), FRAC_CONST(-0.9041572809) } }, | |
354 { { FRAC_CONST(-0.9988899231), FRAC_CONST(0.0471055657) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.6041822433), FRAC_CONST(-0.7968461514) } }, | |
355 { { FRAC_CONST(-0.2638721764), FRAC_CONST(-0.9645576477) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.9859085083), FRAC_CONST(0.1672853529) } }, | |
356 { { FRAC_CONST(0.8837660551), FRAC_CONST(-0.4679289758) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.3075223565), FRAC_CONST(0.9515408874) } }, | |
357 { { FRAC_CONST(0.6494473219), FRAC_CONST(0.7604066133) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.7015317082), FRAC_CONST(0.7126382589) } }, | |
358 { { FRAC_CONST(-0.6004210114), FRAC_CONST(0.7996840477) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.9562535882), FRAC_CONST(-0.2925389707) } }, | |
359 { { FRAC_CONST(-0.9114028811), FRAC_CONST(-0.4115152657) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.1827499419), FRAC_CONST(-0.9831594229) } }, | |
360 { { FRAC_CONST(0.2027882934), FRAC_CONST(-0.9792225957) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.7872582674), FRAC_CONST(-0.6166234016) } }, | |
361 { { FRAC_CONST(0.9998766780), FRAC_CONST(-0.0157062728) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.9107555747), FRAC_CONST(0.4129458666) } }, | |
362 { { FRAC_CONST(0.2334443331), FRAC_CONST(0.9723701477) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.0549497530), FRAC_CONST(0.9984891415) } }, | |
363 { { FRAC_CONST(-0.8980280757), FRAC_CONST(0.4399381876) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.8599416018), FRAC_CONST(0.5103924870) } }, | |
364 { { FRAC_CONST(-0.6252418160), FRAC_CONST(-0.7804310918) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(-0.8501682281), FRAC_CONST(-0.5265110731) } }, | |
365 { { FRAC_CONST(0.6252435446), FRAC_CONST(-0.7804297209) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.0737608299), FRAC_CONST(-0.9972759485) } }, | |
366 { { FRAC_CONST(0.8980270624), FRAC_CONST(0.4399402142) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.9183775187), FRAC_CONST(-0.3957053721) } }, | |
367 { { FRAC_CONST(-0.2334465086), FRAC_CONST(0.9723696709) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.7754954696), FRAC_CONST(0.6313531399) } }, | |
368 { { FRAC_CONST(-0.9998766184), FRAC_CONST(-0.0157085191) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.2012493610), FRAC_CONST(0.9795400500) } }, | |
369 { { FRAC_CONST(-0.2027861029), FRAC_CONST(-0.9792230725) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.9615978599), FRAC_CONST(0.2744622827) } }, | |
370 { { FRAC_CONST(0.9114037752), FRAC_CONST(-0.4115132093) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.6879743338), FRAC_CONST(-0.7257350087) } }, | |
371 { { FRAC_CONST(0.6004192233), FRAC_CONST(0.7996854186) }, { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(0.3254036009), FRAC_CONST(-0.9455752373) } }, | |
372 { { FRAC_CONST(-0.6494490504), FRAC_CONST(0.7604051232) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.9888865948), FRAC_CONST(-0.1486719251) } }, | |
373 { { FRAC_CONST(-0.8837650418), FRAC_CONST(-0.4679309726) }, { FRAC_CONST(0.9238795042), FRAC_CONST(-0.3826834261) }, { FRAC_CONST(0.5890548825), FRAC_CONST(0.8080930114) } }, | |
374 { { FRAC_CONST(0.2638743520), FRAC_CONST(-0.9645570517) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, { FRAC_CONST(-0.4441666007), FRAC_CONST(0.8959442377) } }, | |
375 { { FRAC_CONST(0.9988898039), FRAC_CONST(0.0471078083) }, { FRAC_CONST(-0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(-0.9997915030), FRAC_CONST(0.0204183888) } }, | |
376 { { FRAC_CONST(0.1719277352), FRAC_CONST(0.9851095676) }, { FRAC_CONST(0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(-0.4803760946), FRAC_CONST(-0.8770626187) } }, | |
377 { { FRAC_CONST(-0.9238800406), FRAC_CONST(0.3826821446) }, { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, { FRAC_CONST(0.5555707216), FRAC_CONST(-0.8314692974) } }, | |
378 { { FRAC_CONST(-0.5750041008), FRAC_CONST(-0.8181505203) }, { FRAC_CONST(0.3826834261), FRAC_CONST(-0.9238795042) }, { FRAC_CONST(0.9941320419), FRAC_CONST(0.1081734300) } } | |
379 }; | |
380 | |
381 static const complex_t Phi_Fract_Qmf[] = { | |
382 { FRAC_CONST(0.8181497455), FRAC_CONST(0.5750052333) }, | |
383 { FRAC_CONST(-0.2638730407), FRAC_CONST(0.9645574093) }, | |
384 { FRAC_CONST(-0.9969173074), FRAC_CONST(0.0784590989) }, | |
385 { FRAC_CONST(-0.4115143716), FRAC_CONST(-0.9114032984) }, | |
386 { FRAC_CONST(0.7181262970), FRAC_CONST(-0.6959127784) }, | |
387 { FRAC_CONST(0.8980275989), FRAC_CONST(0.4399391711) }, | |
388 { FRAC_CONST(-0.1097343117), FRAC_CONST(0.9939609766) }, | |
389 { FRAC_CONST(-0.9723699093), FRAC_CONST(0.2334453613) }, | |
390 { FRAC_CONST(-0.5490227938), FRAC_CONST(-0.8358073831) }, | |
391 { FRAC_CONST(0.6004202366), FRAC_CONST(-0.7996846437) }, | |
392 { FRAC_CONST(0.9557930231), FRAC_CONST(0.2940403223) }, | |
393 { FRAC_CONST(0.0471064523), FRAC_CONST(0.9988898635) }, | |
394 { FRAC_CONST(-0.9238795042), FRAC_CONST(0.3826834261) }, | |
395 { FRAC_CONST(-0.6730124950), FRAC_CONST(-0.7396311164) }, | |
396 { FRAC_CONST(0.4679298103), FRAC_CONST(-0.8837656379) }, | |
397 { FRAC_CONST(0.9900236726), FRAC_CONST(0.1409012377) }, | |
398 { FRAC_CONST(0.2027872950), FRAC_CONST(0.9792228341) }, | |
399 { FRAC_CONST(-0.8526401520), FRAC_CONST(0.5224985480) }, | |
400 { FRAC_CONST(-0.7804304361), FRAC_CONST(-0.6252426505) }, | |
401 { FRAC_CONST(0.3239174187), FRAC_CONST(-0.9460853338) }, | |
402 { FRAC_CONST(0.9998766184), FRAC_CONST(-0.0157073177) }, | |
403 { FRAC_CONST(0.3534748554), FRAC_CONST(0.9354440570) }, | |
404 { FRAC_CONST(-0.7604059577), FRAC_CONST(0.6494480371) }, | |
405 { FRAC_CONST(-0.8686315417), FRAC_CONST(-0.4954586625) }, | |
406 { FRAC_CONST(0.1719291061), FRAC_CONST(-0.9851093292) }, | |
407 { FRAC_CONST(0.9851093292), FRAC_CONST(-0.1719291061) }, | |
408 { FRAC_CONST(0.4954586625), FRAC_CONST(0.8686315417) }, | |
409 { FRAC_CONST(-0.6494480371), FRAC_CONST(0.7604059577) }, | |
410 { FRAC_CONST(-0.9354440570), FRAC_CONST(-0.3534748554) }, | |
411 { FRAC_CONST(0.0157073177), FRAC_CONST(-0.9998766184) }, | |
412 { FRAC_CONST(0.9460853338), FRAC_CONST(-0.3239174187) }, | |
413 { FRAC_CONST(0.6252426505), FRAC_CONST(0.7804304361) }, | |
414 { FRAC_CONST(-0.5224985480), FRAC_CONST(0.8526401520) }, | |
415 { FRAC_CONST(-0.9792228341), FRAC_CONST(-0.2027872950) }, | |
416 { FRAC_CONST(-0.1409012377), FRAC_CONST(-0.9900236726) }, | |
417 { FRAC_CONST(0.8837656379), FRAC_CONST(-0.4679298103) }, | |
418 { FRAC_CONST(0.7396311164), FRAC_CONST(0.6730124950) }, | |
419 { FRAC_CONST(-0.3826834261), FRAC_CONST(0.9238795042) }, | |
420 { FRAC_CONST(-0.9988898635), FRAC_CONST(-0.0471064523) }, | |
421 { FRAC_CONST(-0.2940403223), FRAC_CONST(-0.9557930231) }, | |
422 { FRAC_CONST(0.7996846437), FRAC_CONST(-0.6004202366) }, | |
423 { FRAC_CONST(0.8358073831), FRAC_CONST(0.5490227938) }, | |
424 { FRAC_CONST(-0.2334453613), FRAC_CONST(0.9723699093) }, | |
425 { FRAC_CONST(-0.9939609766), FRAC_CONST(0.1097343117) }, | |
426 { FRAC_CONST(-0.4399391711), FRAC_CONST(-0.8980275989) }, | |
427 { FRAC_CONST(0.6959127784), FRAC_CONST(-0.7181262970) }, | |
428 { FRAC_CONST(0.9114032984), FRAC_CONST(0.4115143716) }, | |
429 { FRAC_CONST(-0.0784590989), FRAC_CONST(0.9969173074) }, | |
430 { FRAC_CONST(-0.9645574093), FRAC_CONST(0.2638730407) }, | |
431 { FRAC_CONST(-0.5750052333), FRAC_CONST(-0.8181497455) }, | |
432 { FRAC_CONST(0.5750052333), FRAC_CONST(-0.8181497455) }, | |
433 { FRAC_CONST(0.9645574093), FRAC_CONST(0.2638730407) }, | |
434 { FRAC_CONST(0.0784590989), FRAC_CONST(0.9969173074) }, | |
435 { FRAC_CONST(-0.9114032984), FRAC_CONST(0.4115143716) }, | |
436 { FRAC_CONST(-0.6959127784), FRAC_CONST(-0.7181262970) }, | |
437 { FRAC_CONST(0.4399391711), FRAC_CONST(-0.8980275989) }, | |
438 { FRAC_CONST(0.9939609766), FRAC_CONST(0.1097343117) }, | |
439 { FRAC_CONST(0.2334453613), FRAC_CONST(0.9723699093) }, | |
440 { FRAC_CONST(-0.8358073831), FRAC_CONST(0.5490227938) }, | |
441 { FRAC_CONST(-0.7996846437), FRAC_CONST(-0.6004202366) }, | |
442 { FRAC_CONST(0.2940403223), FRAC_CONST(-0.9557930231) }, | |
443 { FRAC_CONST(0.9988898635), FRAC_CONST(-0.0471064523) }, | |
444 { FRAC_CONST(0.3826834261), FRAC_CONST(0.9238795042) }, | |
445 { FRAC_CONST(-0.7396311164), FRAC_CONST(0.6730124950) } | |
446 }; | |
447 | |
448 | |
449 /* static function declarations */ | |
450 static void drm_ps_sa_element(drm_ps_info *ps, bitfile *ld); | |
451 static void drm_ps_pan_element(drm_ps_info *ps, bitfile *ld); | |
452 static int8_t huff_dec(bitfile *ld, drm_ps_huff_tab huff); | |
453 | |
454 | |
455 uint16_t drm_ps_data(drm_ps_info *ps, bitfile *ld) | |
456 { | |
457 uint16_t bits = (uint16_t)faad_get_processed_bits(ld); | |
458 | |
459 ps->drm_ps_data_available = 1; | |
460 | |
461 ps->bs_enable_sa = faad_get1bit(ld); | |
462 ps->bs_enable_pan = faad_get1bit(ld); | |
463 | |
464 if (ps->bs_enable_sa) | |
465 { | |
466 drm_ps_sa_element(ps, ld); | |
467 } | |
468 | |
469 if (ps->bs_enable_pan) | |
470 { | |
471 drm_ps_pan_element(ps, ld); | |
472 } | |
473 | |
474 bits = (uint16_t)faad_get_processed_bits(ld) - bits; | |
475 | |
476 return bits; | |
477 } | |
478 | |
479 static void drm_ps_sa_element(drm_ps_info *ps, bitfile *ld) | |
480 { | |
481 drm_ps_huff_tab huff; | |
482 uint8_t band; | |
483 | |
484 ps->bs_sa_dt_flag = faad_get1bit(ld); | |
485 if (ps->bs_sa_dt_flag) | |
486 { | |
487 huff = t_huffman_sa; | |
488 } else { | |
489 huff = f_huffman_sa; | |
490 } | |
491 | |
492 for (band = 0; band < DRM_NUM_SA_BANDS; band++) | |
493 { | |
494 ps->bs_sa_data[band] = huff_dec(ld, huff); | |
495 } | |
496 } | |
497 | |
498 static void drm_ps_pan_element(drm_ps_info *ps, bitfile *ld) | |
499 { | |
500 drm_ps_huff_tab huff; | |
501 uint8_t band; | |
502 | |
503 ps->bs_pan_dt_flag = faad_get1bit(ld); | |
504 if (ps->bs_pan_dt_flag) | |
505 { | |
506 huff = t_huffman_pan; | |
507 } else { | |
508 huff = f_huffman_pan; | |
509 } | |
510 | |
511 for (band = 0; band < DRM_NUM_PAN_BANDS; band++) | |
512 { | |
513 ps->bs_pan_data[band] = huff_dec(ld, huff); | |
514 } | |
515 } | |
516 | |
517 /* binary search huffman decoding */ | |
518 static int8_t huff_dec(bitfile *ld, drm_ps_huff_tab huff) | |
519 { | |
520 uint8_t bit; | |
521 int16_t index = 0; | |
522 | |
523 while (index >= 0) | |
524 { | |
525 bit = (uint8_t)faad_get1bit(ld); | |
526 index = huff[index][bit]; | |
527 } | |
528 | |
529 return index + 15; | |
530 } | |
531 | |
532 | |
533 static int8_t sa_delta_clip(drm_ps_info *ps, int8_t i) | |
534 { | |
535 if (i < 0) { | |
536 /* printf(" SAminclip %d", i); */ | |
537 ps->sa_decode_error = 1; | |
538 return 0; | |
539 } else if (i > 7) { | |
540 /* printf(" SAmaxclip %d", i); */ | |
541 ps->sa_decode_error = 1; | |
542 return 7; | |
543 } else | |
544 return i; | |
545 } | |
546 | |
547 static int8_t pan_delta_clip(drm_ps_info *ps, int8_t i) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
548 { |
18141 | 549 if (i < -7) { |
550 /* printf(" PANminclip %d", i); */ | |
551 ps->pan_decode_error = 1; | |
552 return -7; | |
553 } else if (i > 7) { | |
554 /* printf(" PANmaxclip %d", i); */ | |
555 ps->pan_decode_error = 1; | |
556 return 7; | |
557 } else | |
558 return i; | |
559 } | |
560 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
561 static void drm_ps_delta_decode(drm_ps_info *ps) |
18141 | 562 { |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
563 uint8_t band; |
18141 | 564 |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
565 if (ps->bs_enable_sa) |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
566 { |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
567 if (ps->bs_sa_dt_flag && !ps->g_last_had_sa) |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
568 { |
18141 | 569 for (band = 0; band < DRM_NUM_SA_BANDS; band++) |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
570 { |
18141 | 571 ps->g_prev_sa_index[band] = 0; |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
572 } |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
573 } |
18141 | 574 if (ps->bs_sa_dt_flag) |
575 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
576 ps->g_sa_index[0] = sa_delta_clip(ps, ps->g_prev_sa_index[0]+ps->bs_sa_data[0]); |
18141 | 577 |
578 } else { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
579 ps->g_sa_index[0] = sa_delta_clip(ps,ps->bs_sa_data[0]); |
18141 | 580 } |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
581 |
18141 | 582 for (band = 1; band < DRM_NUM_SA_BANDS; band++) |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
583 { |
18141 | 584 if (ps->bs_sa_dt_flag) |
585 { | |
586 ps->g_sa_index[band] = sa_delta_clip(ps, ps->g_prev_sa_index[band] + ps->bs_sa_data[band]); | |
587 } else { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
588 ps->g_sa_index[band] = sa_delta_clip(ps, ps->g_sa_index[band-1] + ps->bs_sa_data[band]); |
18141 | 589 } |
590 } | |
591 } | |
592 | |
593 /* An error during SA decoding implies PAN data will be undecodable, too */ | |
594 /* Also, we don't like on/off switching in PS, so we force to last settings */ | |
595 if (ps->sa_decode_error) { | |
596 ps->pan_decode_error = 1; | |
597 ps->bs_enable_pan = ps->g_last_had_pan; | |
598 ps->bs_enable_sa = ps->g_last_had_sa; | |
599 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
600 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
601 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
602 if (ps->bs_enable_sa) |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
603 { |
18141 | 604 if (ps->sa_decode_error) { |
605 for (band = 0; band < DRM_NUM_SA_BANDS; band++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
606 { |
18141 | 607 ps->g_sa_index[band] = ps->g_last_good_sa_index[band]; |
608 } | |
609 } else { | |
610 for (band = 0; band < DRM_NUM_SA_BANDS; band++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
611 { |
18141 | 612 ps->g_last_good_sa_index[band] = ps->g_sa_index[band]; |
613 } | |
614 } | |
615 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
616 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
617 if (ps->bs_enable_pan) |
18141 | 618 { |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
619 if (ps->bs_pan_dt_flag && !ps->g_last_had_pan) |
18141 | 620 { |
621 /* The DRM PS spec doesn't say anything about this case. (deltacoded in time without a previous frame) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
622 AAC PS spec you must tread previous frame as 0, so that's what we try. |
18141 | 623 */ |
624 for (band = 0; band < DRM_NUM_PAN_BANDS; band++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
625 { |
18141 | 626 ps->g_prev_pan_index[band] = 0; |
627 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
628 } |
18141 | 629 |
630 if (ps->bs_pan_dt_flag) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
631 { |
18141 | 632 ps->g_pan_index[0] = pan_delta_clip(ps, ps->g_prev_pan_index[0]+ps->bs_pan_data[0]); |
633 } else { | |
634 ps->g_pan_index[0] = pan_delta_clip(ps, ps->bs_pan_data[0]); | |
635 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
636 |
18141 | 637 for (band = 1; band < DRM_NUM_PAN_BANDS; band++) |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
638 { |
18141 | 639 if (ps->bs_pan_dt_flag) |
640 { | |
641 ps->g_pan_index[band] = pan_delta_clip(ps, ps->g_prev_pan_index[band] + ps->bs_pan_data[band]); | |
642 } else { | |
643 ps->g_pan_index[band] = pan_delta_clip(ps, ps->g_pan_index[band-1] + ps->bs_pan_data[band]); | |
644 } | |
645 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
646 |
18141 | 647 if (ps->pan_decode_error) { |
648 for (band = 0; band < DRM_NUM_PAN_BANDS; band++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
649 { |
18141 | 650 ps->g_pan_index[band] = ps->g_last_good_pan_index[band]; |
651 } | |
652 } else { | |
653 for (band = 0; band < DRM_NUM_PAN_BANDS; band++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
654 { |
18141 | 655 ps->g_last_good_pan_index[band] = ps->g_pan_index[band]; |
656 } | |
657 } | |
658 } | |
659 } | |
660 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
661 static void drm_calc_sa_side_signal(drm_ps_info *ps, qmf_t X[38][64], uint8_t rateselect) |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
662 { |
18141 | 663 uint8_t s, b, k; |
664 complex_t qfrac, tmp0, tmp, in, R0; | |
665 real_t peakdiff; | |
666 real_t nrg; | |
667 real_t power; | |
668 real_t transratio; | |
669 real_t new_delay_slopes[NUM_OF_LINKS]; | |
670 uint8_t temp_delay_ser[NUM_OF_LINKS]; | |
671 complex_t Phi_Fract; | |
672 #ifdef FIXED_POINT | |
673 uint32_t in_re, in_im; | |
674 #endif | |
675 | |
676 for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++) | |
677 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
678 /* set delay indices */ |
18141 | 679 for (k = 0; k < NUM_OF_LINKS; k++) |
680 temp_delay_ser[k] = ps->delay_buf_index_ser[k]; | |
681 | |
682 RE(Phi_Fract) = RE(Phi_Fract_Qmf[b]); | |
683 IM(Phi_Fract) = IM(Phi_Fract_Qmf[b]); | |
684 | |
685 for (s = 0; s < NUM_OF_SUBSAMPLES; s++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
686 { |
18141 | 687 const real_t gamma = REAL_CONST(1.5); |
688 const real_t sigma = REAL_CONST(1.5625); | |
689 | |
690 RE(in) = QMF_RE(X[s][b]); | |
691 IM(in) = QMF_IM(X[s][b]); | |
692 | |
693 #ifdef FIXED_POINT | |
694 /* NOTE: all input is scaled by 2^(-5) because of fixed point QMF | |
695 * meaning that P will be scaled by 2^(-10) compared to floating point version | |
696 */ | |
697 in_re = ((abs(RE(in))+(1<<(REAL_BITS-1)))>>REAL_BITS); | |
698 in_im = ((abs(IM(in))+(1<<(REAL_BITS-1)))>>REAL_BITS); | |
699 power = in_re*in_re + in_im*in_im; | |
700 #else | |
701 power = MUL_R(RE(in),RE(in)) + MUL_R(IM(in),IM(in)); | |
702 #endif | |
703 | |
704 ps->peakdecay_fast[b] = MUL_F(ps->peakdecay_fast[b], peak_decay[rateselect]); | |
705 if (ps->peakdecay_fast[b] < power) | |
706 ps->peakdecay_fast[b] = power; | |
707 | |
708 peakdiff = ps->prev_peakdiff[b]; | |
709 peakdiff += MUL_F((ps->peakdecay_fast[b] - power - ps->prev_peakdiff[b]), smooth_coeff[rateselect]); | |
710 ps->prev_peakdiff[b] = peakdiff; | |
711 | |
712 nrg = ps->prev_nrg[b]; | |
713 nrg += MUL_F((power - ps->prev_nrg[b]), smooth_coeff[rateselect]); | |
714 ps->prev_nrg[b] = nrg; | |
715 | |
716 if (MUL_R(peakdiff, gamma) <= nrg) { | |
717 transratio = sigma; | |
718 } else { | |
719 transratio = MUL_R(DIV_R(nrg, MUL_R(peakdiff, gamma)), sigma); | |
720 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
721 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
722 for (k = 0; k < NUM_OF_LINKS; k++) |
18141 | 723 { |
724 new_delay_slopes[k] = MUL_F(g_decayslope[b], filter_coeff[k]); | |
725 } | |
726 | |
727 RE(tmp0) = RE(ps->d_buff[0][b]); | |
728 IM(tmp0) = IM(ps->d_buff[0][b]); | |
729 | |
730 RE(ps->d_buff[0][b]) = RE(ps->d_buff[1][b]); | |
731 IM(ps->d_buff[0][b]) = IM(ps->d_buff[1][b]); | |
732 | |
733 RE(ps->d_buff[1][b]) = RE(in); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
734 IM(ps->d_buff[1][b]) = IM(in); |
18141 | 735 |
736 ComplexMult(&RE(tmp), &IM(tmp), RE(tmp0), IM(tmp0), RE(Phi_Fract), IM(Phi_Fract)); | |
737 | |
738 RE(R0) = RE(tmp); | |
739 IM(R0) = IM(tmp); | |
740 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
741 for (k = 0; k < NUM_OF_LINKS; k++) |
18141 | 742 { |
743 RE(qfrac) = RE(Q_Fract_allpass_Qmf[b][k]); | |
744 IM(qfrac) = IM(Q_Fract_allpass_Qmf[b][k]); | |
745 | |
746 RE(tmp0) = RE(ps->d2_buff[k][temp_delay_ser[k]][b]); | |
747 IM(tmp0) = IM(ps->d2_buff[k][temp_delay_ser[k]][b]); | |
748 | |
749 ComplexMult(&RE(tmp), &IM(tmp), RE(tmp0), IM(tmp0), RE(qfrac), IM(qfrac)); | |
750 | |
751 RE(tmp) += -MUL_F(new_delay_slopes[k], RE(R0)); | |
752 IM(tmp) += -MUL_F(new_delay_slopes[k], IM(R0)); | |
753 | |
754 RE(ps->d2_buff[k][temp_delay_ser[k]][b]) = RE(R0) + MUL_F(new_delay_slopes[k], RE(tmp)); | |
755 IM(ps->d2_buff[k][temp_delay_ser[k]][b]) = IM(R0) + MUL_F(new_delay_slopes[k], IM(tmp)); | |
756 | |
757 RE(R0) = RE(tmp); | |
758 IM(R0) = IM(tmp); | |
759 } | |
760 | |
761 QMF_RE(ps->SA[s][b]) = MUL_R(RE(R0), transratio); | |
762 QMF_IM(ps->SA[s][b]) = MUL_R(IM(R0), transratio); | |
763 | |
764 for (k = 0; k < NUM_OF_LINKS; k++) | |
765 { | |
766 if (++temp_delay_ser[k] >= delay_length[k][rateselect]) | |
767 temp_delay_ser[k] = 0; | |
768 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
769 } |
18141 | 770 } |
771 | |
772 for (k = 0; k < NUM_OF_LINKS; k++) | |
773 ps->delay_buf_index_ser[k] = temp_delay_ser[k]; | |
774 } | |
775 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
776 static void drm_add_ambiance(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[38][64], qmf_t X_right[38][64]) |
18141 | 777 { |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
778 uint8_t s, b, ifreq, qclass; |
18141 | 779 real_t sa_map[MAX_SA_BAND], sa_dir_map[MAX_SA_BAND], k_sa_map[MAX_SA_BAND], k_sa_dir_map[MAX_SA_BAND]; |
780 real_t new_dir_map, new_sa_map; | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
781 |
18141 | 782 if (ps->bs_enable_sa) |
783 { | |
784 /* Instead of dequantization and mapping, we use an inverse mapping | |
785 to look up all the values we need */ | |
786 for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++) | |
787 { | |
788 const real_t inv_f_num_of_subsamples = FRAC_CONST(0.03333333333); | |
789 | |
790 ifreq = sa_inv_freq[b]; | |
791 qclass = (b != 0); | |
792 | |
793 sa_map[b] = sa_quant[ps->g_prev_sa_index[ifreq]][qclass]; | |
794 new_sa_map = sa_quant[ps->g_sa_index[ifreq]][qclass]; | |
795 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
796 k_sa_map[b] = MUL_F(inv_f_num_of_subsamples, (new_sa_map - sa_map[b])); |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
797 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
798 sa_dir_map[b] = sa_sqrt_1_minus[ps->g_prev_sa_index[ifreq]][qclass]; |
18141 | 799 new_dir_map = sa_sqrt_1_minus[ps->g_sa_index[ifreq]][qclass]; |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
800 |
18141 | 801 k_sa_dir_map[b] = MUL_F(inv_f_num_of_subsamples, (new_dir_map - sa_dir_map[b])); |
802 | |
803 } | |
804 | |
805 for (s = 0; s < NUM_OF_SUBSAMPLES; s++) | |
806 { | |
807 for (b = 0; b < sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
808 { |
18141 | 809 QMF_RE(X_right[s][b]) = MUL_F(QMF_RE(X_left[s][b]), sa_dir_map[b]) - MUL_F(QMF_RE(ps->SA[s][b]), sa_map[b]); |
810 QMF_IM(X_right[s][b]) = MUL_F(QMF_IM(X_left[s][b]), sa_dir_map[b]) - MUL_F(QMF_IM(ps->SA[s][b]), sa_map[b]); | |
811 QMF_RE(X_left[s][b]) = MUL_F(QMF_RE(X_left[s][b]), sa_dir_map[b]) + MUL_F(QMF_RE(ps->SA[s][b]), sa_map[b]); | |
812 QMF_IM(X_left[s][b]) = MUL_F(QMF_IM(X_left[s][b]), sa_dir_map[b]) + MUL_F(QMF_IM(ps->SA[s][b]), sa_map[b]); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
813 |
18141 | 814 sa_map[b] += k_sa_map[b]; |
815 sa_dir_map[b] += k_sa_dir_map[b]; | |
816 } | |
817 for (b = sa_freq_scale[DRM_NUM_SA_BANDS][rateselect]; b < NUM_OF_QMF_CHANNELS; b++) | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
818 { |
18141 | 819 QMF_RE(X_right[s][b]) = QMF_RE(X_left[s][b]); |
820 QMF_IM(X_right[s][b]) = QMF_IM(X_left[s][b]); | |
821 } | |
822 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
823 } |
18141 | 824 else { |
825 for (s = 0; s < NUM_OF_SUBSAMPLES; s++) | |
826 { | |
827 for (b = 0; b < NUM_OF_QMF_CHANNELS; b++) | |
828 { | |
829 QMF_RE(X_right[s][b]) = QMF_RE(X_left[s][b]); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
830 QMF_IM(X_right[s][b]) = QMF_IM(X_left[s][b]); |
18141 | 831 } |
832 } | |
833 } | |
834 } | |
835 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
836 static void drm_add_pan(drm_ps_info *ps, uint8_t rateselect, qmf_t X_left[38][64], qmf_t X_right[38][64]) |
18141 | 837 { |
838 uint8_t s, b, qclass, ifreq; | |
839 real_t tmp, coeff1, coeff2; | |
840 real_t pan_base[MAX_PAN_BAND]; | |
841 real_t pan_delta[MAX_PAN_BAND]; | |
842 qmf_t temp_l, temp_r; | |
843 | |
844 if (ps->bs_enable_pan) | |
845 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
846 for (b = 0; b < NUM_OF_QMF_CHANNELS; b++) |
18141 | 847 { |
848 /* Instead of dequantization, 20->64 mapping and 2^G(x,y) we do an | |
849 inverse mapping 64->20 and look up the 2^G(x,y) values directly */ | |
850 ifreq = pan_inv_freq[b]; | |
851 qclass = pan_quant_class[ifreq]; | |
852 | |
853 if (ps->g_prev_pan_index[ifreq] >= 0) | |
854 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
855 pan_base[b] = pan_pow_2_pos[ps->g_prev_pan_index[ifreq]][qclass]; |
18141 | 856 } else { |
857 pan_base[b] = pan_pow_2_neg[-ps->g_prev_pan_index[ifreq]][qclass]; | |
858 } | |
859 | |
860 /* 2^((a-b)/30) = 2^(a/30) * 1/(2^(b/30)) */ | |
861 /* a en b can be negative so we may need to inverse parts */ | |
862 if (ps->g_pan_index[ifreq] >= 0) | |
863 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
864 if (ps->g_prev_pan_index[ifreq] >= 0) |
18141 | 865 { |
866 pan_delta[b] = MUL_C(pan_pow_2_30_pos[ps->g_pan_index[ifreq]][qclass], | |
867 pan_pow_2_30_neg[ps->g_prev_pan_index[ifreq]][qclass]); | |
868 } else { | |
869 pan_delta[b] = MUL_C(pan_pow_2_30_pos[ps->g_pan_index[ifreq]][qclass], | |
870 pan_pow_2_30_pos[-ps->g_prev_pan_index[ifreq]][qclass]); | |
871 } | |
872 } else { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
873 if (ps->g_prev_pan_index[ifreq] >= 0) |
18141 | 874 { |
875 pan_delta[b] = MUL_C(pan_pow_2_30_neg[-ps->g_pan_index[ifreq]][qclass], | |
876 pan_pow_2_30_neg[ps->g_prev_pan_index[ifreq]][qclass]); | |
877 } else { | |
878 pan_delta[b] = MUL_C(pan_pow_2_30_neg[-ps->g_pan_index[ifreq]][qclass], | |
879 pan_pow_2_30_pos[-ps->g_prev_pan_index[ifreq]][qclass]); | |
880 } | |
881 } | |
882 } | |
883 | |
884 for (s = 0; s < NUM_OF_SUBSAMPLES; s++) | |
885 { | |
886 /* PAN always uses all 64 channels */ | |
887 for (b = 0; b < NUM_OF_QMF_CHANNELS; b++) | |
888 { | |
889 tmp = pan_base[b]; | |
890 | |
891 coeff2 = DIV_R(REAL_CONST(2.0), (REAL_CONST(1.0) + tmp)); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
892 coeff1 = MUL_R(coeff2, tmp); |
18141 | 893 |
894 QMF_RE(temp_l) = QMF_RE(X_left[s][b]); | |
895 QMF_IM(temp_l) = QMF_IM(X_left[s][b]); | |
896 QMF_RE(temp_r) = QMF_RE(X_right[s][b]); | |
897 QMF_IM(temp_r) = QMF_IM(X_right[s][b]); | |
898 | |
899 QMF_RE(X_left[s][b]) = MUL_R(QMF_RE(temp_l), coeff1); | |
900 QMF_IM(X_left[s][b]) = MUL_R(QMF_IM(temp_l), coeff1); | |
901 QMF_RE(X_right[s][b]) = MUL_R(QMF_RE(temp_r), coeff2); | |
902 QMF_IM(X_right[s][b]) = MUL_R(QMF_IM(temp_r), coeff2); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
903 |
18141 | 904 /* 2^(a+k*b) = 2^a * 2^b * ... * 2^b */ |
905 /* ^^^^^^^^^^^^^^^ k times */ | |
906 pan_base[b] = MUL_C(pan_base[b], pan_delta[b]); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
907 } |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
908 } |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
909 } |
18141 | 910 } |
911 | |
912 drm_ps_info *drm_ps_init(void) | |
913 { | |
914 drm_ps_info *ps = (drm_ps_info*)faad_malloc(sizeof(drm_ps_info)); | |
915 | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
916 memset(ps, 0, sizeof(drm_ps_info)); |
18141 | 917 |
918 return ps; | |
919 } | |
920 | |
921 void drm_ps_free(drm_ps_info *ps) | |
922 { | |
923 faad_free(ps); | |
924 } | |
925 | |
926 /* main DRM PS decoding function */ | |
927 uint8_t drm_ps_decode(drm_ps_info *ps, uint8_t guess, uint32_t samplerate, qmf_t X_left[38][64], qmf_t X_right[38][64]) | |
928 { | |
929 uint8_t rateselect = (samplerate >= 24000); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
930 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
931 if (ps == NULL) |
18141 | 932 { |
933 memcpy(X_right, X_left, sizeof(qmf_t)*30*64); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
934 return 0; |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
935 } |
18141 | 936 |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
937 if (!ps->drm_ps_data_available && !guess) |
18141 | 938 { |
939 memcpy(X_right, X_left, sizeof(qmf_t)*30*64); | |
940 memset(ps->g_prev_sa_index, 0, sizeof(ps->g_prev_sa_index)); | |
941 memset(ps->g_prev_pan_index, 0, sizeof(ps->g_prev_pan_index)); | |
942 return 0; | |
943 } | |
944 | |
945 /* if SBR CRC doesn't match out, we can assume decode errors to start with, | |
946 and we'll guess what the parameters should be */ | |
947 if (!guess) | |
948 { | |
949 ps->sa_decode_error = 0; | |
950 ps->pan_decode_error = 0; | |
951 drm_ps_delta_decode(ps); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
952 } else |
18141 | 953 { |
954 ps->sa_decode_error = 1; | |
955 ps->pan_decode_error = 1; | |
956 /* don't even bother decoding */ | |
957 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
958 |
18141 | 959 ps->drm_ps_data_available = 0; |
960 | |
961 drm_calc_sa_side_signal(ps, X_left, rateselect); | |
962 drm_add_ambiance(ps, rateselect, X_left, X_right); | |
963 | |
964 if (ps->bs_enable_sa) | |
965 { | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
966 ps->g_last_had_sa = 1; |
18141 | 967 |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
968 memcpy(ps->g_prev_sa_index, ps->g_sa_index, sizeof(int8_t) * DRM_NUM_SA_BANDS); |
18141 | 969 |
970 } else { | |
971 ps->g_last_had_sa = 0; | |
972 } | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
973 |
18141 | 974 if (ps->bs_enable_pan) |
975 { | |
976 drm_add_pan(ps, rateselect, X_left, X_right); | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
977 |
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
18141
diff
changeset
|
978 ps->g_last_had_pan = 1; |
18141 | 979 |
980 memcpy(ps->g_prev_pan_index, ps->g_pan_index, sizeof(int8_t) * DRM_NUM_PAN_BANDS); | |
981 | |
982 } else { | |
983 ps->g_last_had_pan = 0; | |
984 } | |
985 | |
986 | |
987 return 0; | |
988 } | |
989 | |
990 #endif |