[Ffmpeg-devel] ac3 encoder

Justin Ruggles jruggle
Wed Apr 20 04:00:57 CEST 2005

Benjamin Larsson wrote:

> Hi,
> Justin Ruggles wrote:
>> I've made an attempt at block switching, but can't figure out how to 
>> get the short-block mdct to work with fft, so right now it's 
>> extremely slow doing it the O(n^2) way.
> Contact me in private or post some example code to the list and I 
> might be able to help with the mdct code.
Thanks for offering to help.  What I'm running into is that the mdct in 
the AC3 specification adds some additional stuff at the end that makes 
it different from a standard mdct for 256-sample windows.  My math 
skills only got me so far.  The best I could figure, instead of doing a 
1/4 rotation, you do no rotation for the 1st 256 samples and a 1/2 
rotation for the 2nd 256.  I kinda got lost in how (if at all) it 
affects the FFT and post-rotation.  The equation in the AC3 spec will 
probably make it a bit clearer.  I'll try to write it out in text as 
best I can.

where N=512 for long transform and N=256 for short transform.  Let x[n] 
represent the windowed input time sequence.  The output frequency 
sequence, X[k] is defined by:

X[k] = -2/N * SUM(n=0 to N-1){ x[n] * 
cos(2pi/4N(2n+1)(2k+1)+pi/4(2k+1)(1+alpha) }
for 0 <= k < N/2
where alpha = 0 for long transform, -1 for 1st short transform, +1 for 
2nd short transform

So, for the long transform, the equation is just a regular mdct, but 
when you change the last value to 0 or 2, you get something a little 
different, and I can't work out how to convert that to using FFT.  I 
might just be missing something simple, but I'm stumped.  I would 
greatly appreciate any help I can get.


More information about the ffmpeg-devel mailing list