[tremor] MDCT_lookup tables reduced by one third.
Nicolas Pitre
nico at cam.org
Tue Sep 10 19:20:37 PDT 2002
On Wed, 11 Sep 2002, timmy brolin wrote:
> Monty: I see that you did pretty much the same thing as I did when I removed the global 'step', however, I did two things differently:
> 1: There is no need for "mdct_butterflies" to have a step argument, since step can be easily calculated from init.log2n
> step=1<<(13-init.log2n);
However, since the functions are marked to be inline, the compiler will
certainly already have the value of the step variable cached in a register
so it won't need to recompute it again. This makes up for better code
generation.
> 2: In "mdct_butterfly_generic" step should really be a register, it is
> used all over the place.
Well inspecting the generated assembly it does remain into a register
anyway.
> By the way... What are the other four trignometric functions in
> mdct_lookup.h? It's hard to figure them out by just looking att the
> numbers and curves. (sine/cosine was pretty obvious thou..) Some parts of
> the tremor code are far from well commented/documented... :-/
You should have the libvorbis (the floating point reference code) around.
Things are more obvious there and you'll easily see where Tremor code comes
from.
>From mdct.c:mdct_init()
/* trig lookups... */
for(i=0;i<n/4;i++){
T[i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i)));
T[i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i)));
T[n2+i*2]=FLOAT_CONV(cos((M_PI/(2*n))*(2*i+1)));
T[n2+i*2+1]=FLOAT_CONV(sin((M_PI/(2*n))*(2*i+1)));
}
for(i=0;i<n/8;i++){
T[n+i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i+2))*.5);
T[n+i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i+2))*.5);
}
<p>Nicolas
--- >8 ----
List archives: http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'tremor-request at xiph.org'
containing only the word 'unsubscribe' in the body. No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.
More information about the Tremor
mailing list