[FFmpeg-devel] [PATCH 1/2] libswresample: Avoid needlessly large on-stack array.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sat Sep 6 21:14:21 CEST 2014


On Wed, Sep 03, 2014 at 10:48:38PM +0200, Michael Niedermayer wrote:
> On Wed, Sep 03, 2014 at 09:40:55PM +0200, Reimar Döffinger wrote:
> > We only actually need to use a tiny part of it.
> > Unfortunately we seem to have no real test coverage on
> > the code, so this is a bit risky.
> > 
> > Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
> > ---
> >  libswresample/rematrix.c | 23 +++++++++++++++++------
> >  1 file changed, 17 insertions(+), 6 deletions(-)
> [...]
> > @@ -295,10 +296,10 @@ av_cold static int auto_matrix(SwrContext *s)
> >              av_assert0(0);
> >      }
> >  
> > -    for(out_i=i=0; i<64; i++){
> > +    for(out_i=i=0; i<FF_ARRAY_ELEMS(matrix); i++){
> >          double sum=0;
> > -        int in_i=0;
> > -        for(j=0; j<64; j++){
> > +        in_i=0;
> > +        for(j=0; j<FF_ARRAY_ELEMS(matrix[0]); j++){
> >              s->matrix[out_i][in_i]= matrix[i][j];
> >              if(matrix[i][j]){
> >                  sum += fabs(matrix[i][j]);
> > @@ -310,6 +311,16 @@ av_cold static int auto_matrix(SwrContext *s)
> >          if(out_ch_layout & (1ULL<<i))
> >              out_i++;
> >      }
> > +    for (; i < 64; i++) {
> > +        if (in_ch_layout & out_ch_layout & (1ULL<<i)) {
> > +            s->matrix[out_i][in_i] = 1.0;
> > +            maxcoef = FFMAX(maxcoef, 1.0);
> > +        }
> > +        if (in_ch_layout & (1ULL<<i))
> > +            in_i++;
> > +        if (out_ch_layout & (1ULL<<i))
> > +            out_i++;
> > +    }
> >      if(s->rematrix_volume  < 0)
> >          maxcoef = -s->rematrix_volume;
> 
> if (i and j are small enough)
>     s->matrix[out_i][in_i]= matrix[i][j];
> else
>     s->matrix[out_i][in_i]= 0
> sum += fabs(s->matrix[out_i][in_i]);
> 
> in the first loop should be simpler than a seperate loop

I am a bit undecided on whether the resulting code is really simpler,
but at least the diff is simpler.
I'll send a new patch.


More information about the ffmpeg-devel mailing list