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

Michael Niedermayer michaelni at gmx.at
Wed Sep 3 22:48:38 CEST 2014


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

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The educated differ from the uneducated as much as the living from the
dead. -- Aristotle 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140903/001fdf1e/attachment.asc>


More information about the ffmpeg-devel mailing list