[FFmpeg-devel] [PATCH] 1D DCT for dsputil

Michael Niedermayer michaelni
Sun Jan 10 04:05:17 CET 2010


On Fri, Jan 08, 2010 at 12:43:48PM -0500, Alex Converse wrote:
> On Fri, Jan 8, 2010 at 10:12 AM, Michael Niedermayer <michaelni at gmx.at> wrote:
> > On Fri, Jan 08, 2010 at 01:02:19AM -0500, Alex Converse wrote:
> >> On Tue, Dec 22, 2009 at 8:04 PM, Alex Converse <alex.converse at gmail.com> wrote:
> >> > On Tue, Dec 22, 2009 at 6:25 AM, ?<pross at xvid.org> wrote:
> >> >> On Mon, Dec 21, 2009 at 02:02:00PM -0500, Daniel Verkamp wrote:
> >> >>> Hi,
> >> >>>
> >> >>> In an effort to get at least some parts of the Bink patch committed, I
> >> >>> am splitting it into separable pieces.
> >> >>>
> >> >>> This is a one-dimensional floating-point DCT used by Bink audio. ?The
> >> >>> actual code was written by Peter Ross.
> >> >>>
> >> >>> The comments I myself have about this code:
> >> >>> - Should it be using math.h cos()/sin() or some lookup table approach?
> >> >>> - Can there be a test written? (I don't know enough about the math
> >> >>> involved to write a sane test...)
> >> >>
> >> >> Thanks for taking the time to split the patch.
> >> >>
> >> >> Note that the algorithm here is inefficient. It requires a 2*N FFT,
> >> >> whereas there are ways of achieving this with 1*N FFT. Michael posted
> >> >> some info on this many months ago.
> >> >>
> >> >
> >> > I had a 1-D 1*N DCT but it generated the transpose (i.e.
> >> > uninterleaved). I can dig it up when I come back from xmas holiday if
> >> > you are interested.
> >> >
> >>
> >> As promised...
> >
> > [...]
> >> +av_cold int ff_dct_init(DCTContext *s, int nbits, int inverse)
> >> +{
> >> + ? ?int n = 1 << nbits;
> >> +
> >> + ? ?s->nbits ? ?= nbits;
> >> + ? ?s->inverse ?= inverse;
> >> +
> >> + ? ?s->data = av_malloc(sizeof(FFTComplex) * 2 * n);
> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^^^^^
> >
> 
> This should be FFTSample.
> 
> >> + ? ?if (!s->data)
> >> + ? ? ? ?return -1;
> >> +
> >> + ? ?if (ff_rdft_init(&s->rdft, nbits+1, inverse) < 0)
> > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^^^^^^^
> >
> > doesnt look like 1*N to me
> > am i missing something?
> >
> 
> The RDFT initializes an FFT of size nbits-1.

yes and if iam not mistaken that should be nbits-2
your code is 2x more efficient than daniels but its still by a factor of 2
worse than what it should be

Maybe iam missing something but the sample code in numerical recipes should
be useable?


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Avoid a single point of failure, be that a person or equipment.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100110/1a95401a/attachment.pgp>



More information about the ffmpeg-devel mailing list