# [FFmpeg-devel] (i)(m)dct help for g.722.1

Justin Ruggles justinruggles
Tue May 15 05:24:33 CEST 2007

Ramiro Ribeiro Polla wrote:
> Hello,
>
> When I got to the dct part of g.722.1 (which is currently in
> cook.c:687), I realized it doesn't use the same transform as cook (at
> least I think so). After the window, overlap, and add, the output is
> faster than it should be, making the last half of the 320 samples look
>
> I wanted to know if FFmpeg already has the same transform used in
> g.722.1, or if I'm just using it the wrong way.
>
> The standard says it's a "type IV DCT":
> u(n) = \sum_{m=0}^{319} \sqrt{\frac{2}{320}} cos( \frac{\pi}{320}
> (m+0.5)(n+0.5) ) mlt(m)
> for 0 \leq n \leq 319
>
> Or else, how would I go about implementing it?

I suspect Benjamin's advice is correct, but in case not, here is an
example of how a type iv dct is related to a standard mdct.  See the
mdct_512() function (and ignore mdct_256() which is an AC-3 oddity).
Also, this example is for the forward transform, but the same concept
applies to the inverse.

http://aften.svn.sourceforge.net/viewvc/*checkout*/aften/libaften/mdct.c?revision=98

Note that the link is to an old revision. The current version uses the
mdct implementation from libvorbis.

-Justin