[FFmpeg-cvslog] r20295 - trunk/libavfilter/avfilter.c

Michael Niedermayer michaelni
Mon Oct 19 01:17:07 CEST 2009


On Mon, Oct 19, 2009 at 12:47:17AM +0200, Stefano Sabatini wrote:
> On date Monday 2009-10-19 00:33:38 +0200, vitor wrote:
> > Author: vitor
> > Date: Mon Oct 19 00:33:37 2009
> > New Revision: 20295
> > 
> > Log:
> > Fix recursive avfilter_poll_frame(). It was doing
> > min = FFMIN(min, avfilter_poll_frame(link->src->inputs[i]))
> > which, since FFMIN is a macro, was calling itself
> > twice for every input, causing an exponential cost in time.
> > 
> > Modified:
> >    trunk/libavfilter/avfilter.c
> > 
> > Modified: trunk/libavfilter/avfilter.c
> > ==============================================================================
> > --- trunk/libavfilter/avfilter.c	Sun Oct 18 23:44:03 2009	(r20294)
> > +++ trunk/libavfilter/avfilter.c	Mon Oct 19 00:33:37 2009	(r20295)
> > @@ -224,9 +224,11 @@ int avfilter_poll_frame(AVFilterLink *li
> >          return link_spad(link).poll_frame(link);
> >  
> >      for (i=0; i<link->src->input_count; i++) {
> > +        int val;
> >          if(!link->src->inputs[i])
> >              return -1;
> > -        min = FFMIN(min, avfilter_poll_frame(link->src->inputs[i]));
> > +        val = avfilter_poll_frame(link->src->inputs[i]);
> > +        min = FFMIN(min, val);
> >      }
> >  
> >      return min;
> 
> Thanks :).

Thanks from me as well :)

btw, function calls inside FFMIN/FFMAX, in case anyone is curious ...

ffserver.c:    c->stream->feed_write_index = FFMAX(ffm_read_write_index(fd), FFM_PACKET_SIZE);
ffserver.c:        feed->feed_write_index = FFMAX(ffm_read_write_index(fd), FFM_PACKET_SIZE);
libavcodec/aaccoder.c:                    maxq[w*16+g] = FFMAX(maxq[w*16+g], fabsf(coefs[w2*128 + i]));
libavcodec/aacpsy.c:                minscale = FFMIN(minscale, ath(ctx->avctx->sample_rate * (start + i) / 1024.0 / 2.0, ATH_ADD));
libavcodec/adpcm.c:    int nibble = FFMIN(7, abs(delta)*4/step_table[c->step_index]) + (delta<0)*8;
libavcodec/adpcm.c:    nibble = FFMIN(7, abs(delta)*4/c->step) + (delta<0)*8;
libavcodec/lpc.c:        cmax= FFMAX(cmax, fabs(lpc_in[i]));
libavcodec/resample2.c:    c->filter_length= FFMAX((int)ceil(filter_size/factor), 1);
libavcodec/vorbis_enc.c:            bits = FFMAX(bits, ilog(cb->quantlist[i]));
libavcodec/vorbis_enc.c:            max1 = FFMAX(max1, fabs(coeffs[          k / real_ch]));
libavcodec/vorbis_enc.c:            max2 = FFMAX(max2, fabs(coeffs[samples + k / real_ch]));
libavfilter/avfilter.c:        min = FFMIN(min, avfilter_poll_frame(link->src->inputs[i]));
libavformat/audiointerleave.c:    int size = FFMIN(av_fifo_size(aic->fifo), *aic->samples * aic->sample_size);
libavformat/nutenc.c:        nut->stream[i].max_pts_distance= FFMAX(1/av_q2d(time_base), 1);
libavutil/rational.c:    int exponent= FFMAX( (int)(log(fabs(d) + 1e-20)/LOG2), 0);



[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The greatest way to live with honor in this world is to be what we pretend
to be. -- Socrates
-------------- 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-cvslog/attachments/20091019/e6745b2e/attachment.pgp>



More information about the ffmpeg-cvslog mailing list