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

Vitor Sessak vitor1001
Mon Jan 18 06:07:51 CET 2010


Alex Converse wrote:
> On Sat, Jan 9, 2010 at 10:05 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
>> 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?
>>
> 
> I see what you are saying here.
> 
> I'm not going to get a chance to play with this again until SBR is
> ready. (Hopefully very soon but that's another story.)
> 
> So some bink enthusiast is going to have to step in here and finish it
> unless you all mind waiting.

Here is my try...

-Vitor
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dct.diff
Type: text/x-patch
Size: 9277 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100118/dcc0dd4d/attachment.bin>



More information about the ffmpeg-devel mailing list