summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2006-03-21 01:09:53 +0000
committerThom Johansen <thomj@rockbox.org>2006-03-21 01:09:53 +0000
commitc00ec115989529c72f1153871524c66253c5fb12 (patch)
treecd9dc17c2882a460116c6663c443d57d811778aa
parent5405753096fe8058c27e7a8ef808b9b89805c536 (diff)
downloadrockbox-c00ec115989529c72f1153871524c66253c5fb12.tar.gz
rockbox-c00ec115989529c72f1153871524c66253c5fb12.zip
Further 64 bit related fixes. EQ should now work in AMD64 sim.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9142 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/eq.c18
-rw-r--r--apps/eq.h6
2 files changed, 12 insertions, 12 deletions
diff --git a/apps/eq.c b/apps/eq.c
index cb7086a7e3..192f198944 100644
--- a/apps/eq.c
+++ b/apps/eq.c
@@ -138,13 +138,13 @@ static long dbtoA(long db)
138 db is s15.16 fixed point and describes gain/attenuation at peak freq. 138 db is s15.16 fixed point and describes gain/attenuation at peak freq.
139 c is a pointer where the coefs will be stored. 139 c is a pointer where the coefs will be stored.
140 */ 140 */
141void eq_pk_coefs(unsigned long cutoff, unsigned long Q, long db, long *c) 141void eq_pk_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c)
142{ 142{
143 const long one = 1 << 28; /* s3.28 */ 143 const long one = 1 << 28; /* s3.28 */
144 const long A = dbtoA(db); 144 const long A = dbtoA(db);
145 const long alpha = DIV64(fsin(cutoff), 2*Q, 15); /* s1.30 */ 145 const long alpha = DIV64(fsin(cutoff), 2*Q, 15); /* s1.30 */
146 long a0, a1, a2; /* these are all s3.28 format */ 146 int32_t a0, a1, a2; /* these are all s3.28 format */
147 long b0, b1, b2; 147 int32_t b0, b1, b2;
148 148
149 /* possible numerical ranges listed after each coef */ 149 /* possible numerical ranges listed after each coef */
150 b0 = one + FRACMUL(alpha, A); /* [1.25..5] */ 150 b0 = one + FRACMUL(alpha, A); /* [1.25..5] */
@@ -161,7 +161,7 @@ void eq_pk_coefs(unsigned long cutoff, unsigned long Q, long db, long *c)
161} 161}
162 162
163/* Calculate coefficients for lowshelf filter */ 163/* Calculate coefficients for lowshelf filter */
164void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, long *c) 164void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c)
165{ 165{
166 const long one = 1 << 24; /* s7.24 */ 166 const long one = 1 << 24; /* s7.24 */
167 const long A = dbtoA(db); 167 const long A = dbtoA(db);
@@ -169,8 +169,8 @@ void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, long *c)
169 const long ap1 = (A >> 5) + one; 169 const long ap1 = (A >> 5) + one;
170 const long am1 = (A >> 5) - one; 170 const long am1 = (A >> 5) - one;
171 const long twosqrtalpha = 2*(FRACMUL(fsqrt(A >> 5, 24), alpha) << 1); 171 const long twosqrtalpha = 2*(FRACMUL(fsqrt(A >> 5, 24), alpha) << 1);
172 long a0, a1, a2; /* these are all s7.24 format */ 172 int32_t a0, a1, a2; /* these are all s7.24 format */
173 long b0, b1, b2; 173 int32_t b0, b1, b2;
174 long cs = fcos(cutoff); 174 long cs = fcos(cutoff);
175 175
176 b0 = FRACMUL(A, ap1 - FRACMUL(am1, cs) + twosqrtalpha) << 2; 176 b0 = FRACMUL(A, ap1 - FRACMUL(am1, cs) + twosqrtalpha) << 2;
@@ -188,7 +188,7 @@ void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, long *c)
188} 188}
189 189
190/* Calculate coefficients for highshelf filter */ 190/* Calculate coefficients for highshelf filter */
191void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, long *c) 191void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c)
192{ 192{
193 const long one = 1 << 24; /* s7.24 */ 193 const long one = 1 << 24; /* s7.24 */
194 const long A = dbtoA(db); 194 const long A = dbtoA(db);
@@ -196,8 +196,8 @@ void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, long *c)
196 const long ap1 = (A >> 5) + one; 196 const long ap1 = (A >> 5) + one;
197 const long am1 = (A >> 5) - one; 197 const long am1 = (A >> 5) - one;
198 const long twosqrtalpha = 2*(FRACMUL(fsqrt(A >> 5, 24), alpha) << 1); 198 const long twosqrtalpha = 2*(FRACMUL(fsqrt(A >> 5, 24), alpha) << 1);
199 long a0, a1, a2; /* these are all s7.24 format */ 199 int32_t a0, a1, a2; /* these are all s7.24 format */
200 long b0, b1, b2; 200 int32_t b0, b1, b2;
201 long cs = fcos(cutoff); 201 long cs = fcos(cutoff);
202 202
203 b0 = FRACMUL(A, ap1 + FRACMUL(am1, cs) + twosqrtalpha) << 2; 203 b0 = FRACMUL(A, ap1 + FRACMUL(am1, cs) + twosqrtalpha) << 2;
diff --git a/apps/eq.h b/apps/eq.h
index 9228658eca..5e86a45e84 100644
--- a/apps/eq.h
+++ b/apps/eq.h
@@ -33,9 +33,9 @@ struct eqfilter {
33 int32_t history[2][4]; 33 int32_t history[2][4];
34}; 34};
35 35
36void eq_pk_coefs(unsigned long cutoff, unsigned long Q, long db, long *c); 36void eq_pk_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c);
37void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, long *c); 37void eq_ls_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c);
38void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, long *c); 38void eq_hs_coefs(unsigned long cutoff, unsigned long Q, long db, int32_t *c);
39void eq_filter(int32_t **x, struct eqfilter *f, unsigned num, 39void eq_filter(int32_t **x, struct eqfilter *f, unsigned num,
40 unsigned channels, unsigned shift); 40 unsigned channels, unsigned shift);
41 41