[FFmpeg-devel] [PATCH] Generic sine window init function

Robert Swain robert.swain
Sun Jun 22 17:10:32 CEST 2008


2008/6/22 Michael Niedermayer <michaelni at gmx.at>:
> On Sun, Jun 22, 2008 at 01:15:22PM +0100, Robert Swain wrote:
>> 2008/6/22 Michael Niedermayer <michaelni at gmx.at>:
> [...]
>> > [...]
>> >> Index: libavcodec/imc.c
>> >> ===================================================================
>> >> --- libavcodec/imc.c  (revision 13854)
>> >> +++ libavcodec/imc.c  (working copy)
>> >> @@ -102,8 +102,9 @@
>> >>          q->old_floor[i] = 1.0;
>> >>
>> >>      /* Build mdct window, a simple sine window normalized with sqrt(2) */
>> >> +    ff_sine_window_init(q->mdct_sine_window, COEFFS);
>> >>      for(i = 0; i < COEFFS; i++)
>> >> -        q->mdct_sine_window[i] = sin((i + 0.5) / 512.0 * M_PI) * sqrt(2.0);
>> >> +        q->mdct_sine_window[i] *= sqrt(2.0);
>> >>      for(i = 0; i < COEFFS/2; i++){
>> >>          q->post_cos[i] = cos(i / 256.0 * M_PI);
>> >>          q->post_sin[i] = sin(i / 256.0 * M_PI);
>> >> Index: libavcodec/cook.c
>> >> ===================================================================
>> >> --- libavcodec/cook.c (revision 13854)
>> >> +++ libavcodec/cook.c (working copy)
>> >> @@ -239,9 +239,9 @@
>> >>        return -1;
>> >>
>> >>      /* Initialize the MLT window: simple sine window. */
>> >> -    alpha = M_PI / (2.0 * (float)mlt_size);
>> >> +    ff_sine_window_init(q->mlt_window, mlt_size);
>> >>      for(j=0 ; j<mlt_size ; j++)
>> >> -        q->mlt_window[j] = sin((j + 0.5) * alpha) * sqrt(2.0 / q->samples_per_channel);
>> >> +        q->mlt_window[j] *= sqrt(2.0 / q->samples_per_channel);
>> >
>> > The window should not be scaled by sqrt(2) there are plenty of other places
>> > where the sqrt(2) could be applied.
>> > and it should not be in the context but static and shared
>> > (of course that is not really your job to do so the patch is ok if you dont
>> > want to work on that)
>>
>> It's OK. I'll do it. I don't mind a bit of monkey work now and again. :)
>>
>> I actually have some improvements. As these normalisation factors are
>> always that, how about adding another argument and multiplying by the
>> normalisation factor within the init function? This could also be done
>> for ff_kbd_window_init() as well which would solve that non-thread
>> safe situation in aac.c. See attached.
>
> I would like to share the tables between codecs!
> If each codec puts its normalisation factors in the window
> then they cannot be shared as they are not identical.

Of course, apologies. I shall apply the first patch and look into
making the tables static and applying the scaling elsewhere in the
codecs.

Rob




More information about the ffmpeg-devel mailing list