On poniedziałek, 7 lipca 2008, Michael Niedermayer wrote:
> On Mon, Jul 07, 2008 at 10:55:16PM +0200, Reimar Döffinger wrote:
> > Hello,
> >
> > On Mon, Jul 07, 2008 at 10:21:38PM +0200, Bartlomiej Wolowiec wrote:
> > > On poniedziałek, 7 lipca 2008, Robert Swain wrote:
> > > > 2008/7/7 bwolowiec <[EMAIL PROTECTED]>:
> > > > > Author: bwolowiec
> > > > > Date: Mon Jul  7 16:41:50 2008
> > > > > New Revision: 2719
> > > > >
> > > > > Log:
> > > > > use ff_sine_window_init
> > > > >
> > > > >
> > > > > Modified:
> > > > >   nellyenc/nellymoserenc.c
> > > > >
> > > > > Modified: nellyenc/nellymoserenc.c
> > > > > ===================================================================
> > > > >====== ===== --- nellyenc/nellymoserenc.c    (original)
> > > > > +++ nellyenc/nellymoserenc.c    Mon Jul  7 16:41:50 2008
> > > > > @@ -116,10 +116,13 @@ static av_cold int encode_init(AVCodecCo
> > > > >     dsputil_init(&s->dsp, avctx);
> > > > >
> > > > >     /* Generate overlap window */
> > > > > -    if (!sine_window[0])
> > > > > -        for (i=0 ; i<256; i++) {
> > > > > -            sine_window[i] = sin((i + 0.5) / 256.0 * M_PI) /8;
> > > > > +    if (!sine_window[0]){
> > > > > +        ff_sine_window_init(sine_window, 128);
> > > > > +        for (i=0; i<128; i++) {
> > > > > +            sine_window[i] /= 8.0;
> > > >
> > > > This isn't thread safe. You must merge the /8 into some other
> > > > calculation.
> > >
> > > Hmm.. yes, you're right. Unfortunately, I don't see now where it can be
> > > calculated. If I don't calculate it in init I will have to calculate it
> > > additionally in every encode_tag, it isn't a good idea.  Maybe it's
> > > better to use previous version and don't use ff_sine_window_init...? or
> > > maybe (in my opinion a bit unnatural) such a solution:
> > > ff_sine_window_init(tmp_sine_window, 128);
> > > for (i=0; i<128; i++) {
> > >   sine_window[i] = tmp_sine_window[i] / 8.0;
> > >   sine_window[255-i] = sine_window[i];
> > > }
> >
> > Just use your original code on some per-thread buffer (stack or heap
> > depending on size) and then memcpy it over.
>
> Please everyone stop scaring me ...
>
> pval = -pow(2, pows[j]/2048);
> tmp = s->mdct_out[i*NELLY_BUF_LEN + j] / pval;
>
> above is in the current code, that will happily take a /8
> besides it obviously should be a * not a / pval, / is slow
>
> [...]

Do you think of something like this?
Or maybe instead of this additional calculations it can be better calculated 
once while initialization... ?
-- 
Bartlomiej Wolowiec
Index: nellymoserenc.c
===================================================================
--- nellymoserenc.c	(wersja 2719)
+++ nellymoserenc.c	(kopia robocza)
@@ -119,7 +119,6 @@
     if (!sine_window[0]){
         ff_sine_window_init(sine_window, 128);
         for (i=0; i<128; i++) {
-            sine_window[i] /= 8.0;
             sine_window[255-i] = sine_window[i];
         }
     }
@@ -189,7 +188,7 @@
                 stmp += tmp*tmp;
             }
         }
-        tmp = log(FFMAX(1.0, stmp/(ff_nelly_band_sizes_table[i]<<1))) *
+        tmp = ( log(FFMAX(64.0, stmp/(ff_nelly_band_sizes_table[i]<<1))) - log(64.0)) *
             M_LOG2E * 1024.0;
 
         if(i){
@@ -217,8 +216,8 @@
         for (j = 0; j < NELLY_FILL_LEN; j++) {
             bs+=bits[j];
             if (bits[j] > 0) {
-                pval = -pow(2, pows[j]/2048);
-                tmp = s->mdct_out[i*NELLY_BUF_LEN + j] / pval;
+                pval = -pow(2, -pows[j]/2048 - 3.0);
+                tmp = s->mdct_out[i*NELLY_BUF_LEN + j] * pval;
 
                 find_best_value(tmp,
                         (ff_nelly_dequantization_table + (1<<bits[j])-1),
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to