mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
Optimise EQ coef calculation routines for both speed and size. Move now unneeded fsqrt function to plugin fixed point library in case it'll be needed. Move all fixed point helper macros to dsp.h. Added FRACMUL_SHL macro to facilitate high-precision shifting of 64 bit multiplies and remove rounding from macsr in main thread to make this work as intended.
Tested quite thorougly, but as always, be careful with your ears. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12203 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
7170a00daa
commit
5f48e1590f
6 changed files with 252 additions and 234 deletions
|
@ -117,3 +117,22 @@ long fsincos(unsigned long phase, long *cos)
|
|||
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fixed point square root via Newton-Raphson.
|
||||
* @param a square root argument.
|
||||
* @param fracbits specifies number of fractional bits in argument.
|
||||
* @return Square root of argument in same fixed point format as input.
|
||||
*/
|
||||
long fsqrt(long a, unsigned int fracbits)
|
||||
{
|
||||
long b = a/2 + (1 << fracbits); /* initial approximation */
|
||||
unsigned n;
|
||||
const unsigned iterations = 4;
|
||||
|
||||
for (n = 0; n < iterations; ++n)
|
||||
b = (b + DIV64(a, b, fracbits))/2;
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue