[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.
>
Hello,
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.
Thanks,
Justin
More information about the ffmpeg-devel
mailing list