[FFmpeg-devel] [PATCH] SSE optimization for DCA decoder

Alexander E. Patrakov patrakov
Mon Sep 1 18:24:39 CEST 2008


Michael Niedermayer wrote:

> On Mon, Sep 01, 2008 at 01:36:16PM +0600, Alexander E. Patrakov wrote:

> As ive said the funky indexing is due to the use of half_imdct instead
> of full. There is no magic here at all. There are not 2 transforms,
> if you consider the full period imdct a longer transform than the half
> period is of course a question of the viewpoint.

Yes, it seems to be the case. I will look again tomorrow.

>> Note especially these lines:
>> 
>> for (k = 0; k < 32; k++)
>>   accum[k] = accum[k] - accum[64 + k] - accum[63 - k] + accum[127 - k];
> 
> this looks wrong, as if the less significant terms had been dropped,
> though of course i could be wrong.

This just uses the facts that cos(PI + x) = -cos(x) and that cos (PI - X)
= -cos(x), and factors out this common cos. The error in the integer-only
encoder therefore, as compared to the "right" case, drops by a factor of 4
if the input is chosen the same as the 0-th band synthesis window (i.e.,
expected to be encoded to something-large in 0th band followed by all
zeroes).

> Also as far as i can tell your encoder is just applying the windowed mdct
> as inverse of the windowed imdct of the decoder. It just has some sign
> flips removed from the window and done explicitly in the code.

Yes, it seems that you are right. It also doesn't have the "noidea" history
buffer.

> the lowpass plot looks like the absolute values of the window

Yes, thanks! The difference is indeed only by a factor of sqrt(0.125)
or -sqrt(0.125), and the sign changes every 64 values.

> I suspect such funky shape is needed for TDAC to work with longer windows

What is TDAC?

-- 
Alexander E. Patrakov





More information about the ffmpeg-devel mailing list