[FFmpeg-devel] [PATCH] avfilter/vsrc_mandelbrot: avoid sqrt for epsilon calculation

Michael Niedermayer michaelni at gmx.at
Tue Nov 24 03:46:58 CET 2015


On Mon, Nov 23, 2015 at 05:19:52PM -0500, Ganesh Ajjanagadde wrote:
> This rewrites into the mathematically equivalent expression avoiding sqrt,
> and results in a very minor speedup.
> 
> Tested on x86-64, Haswell, GNU/Linux.
> Command:
> ffmpeg -v error -f lavfi -i mandelbrot -f null -
> 
> old (draw_mandelbrot):
> 3982389425 decicycles in draw_mandelbrot,     256 runs,      0 skips
> 7634221782 decicycles in draw_mandelbrot,     512 runs,      0 skips
> 20576449397 decicycles in draw_mandelbrot,    1024 runs,      0 skips
> 12949998655 decicycles in draw_mandelbrot,    2048 runs,      0 skips
> 
> new (draw_mandelbrot):
> 3966406060 decicycles in draw_mandelbrot,     256 runs,      0 skips
> 7553322112 decicycles in draw_mandelbrot,     512 runs,      0 skips
> 20454169970 decicycles in draw_mandelbrot,    1024 runs,      0 skips
> 12822228615 decicycles in draw_mandelbrot,    2048 runs,      0 skips
> 
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  libavfilter/vsrc_mandelbrot.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/libavfilter/vsrc_mandelbrot.c b/libavfilter/vsrc_mandelbrot.c
> index 950c5c8..20da8ae 100644
> --- a/libavfilter/vsrc_mandelbrot.c
> +++ b/libavfilter/vsrc_mandelbrot.c
> @@ -291,7 +291,7 @@ static void draw_mandelbrot(AVFilterContext *ctx, uint32_t *color, int linesize,
>  
>              use_zyklus= (x==0 || s->inner!=BLACK ||color[x-1 + y*linesize] == 0xFF000000);
>              if(use_zyklus)
> -                epsilon= scale*1*sqrt(SQR(x-s->w/2) + SQR(y-s->h/2))/s->w;
> +                epsilon= SQR(scale/s->w)*(SQR(x-s->w/2) + SQR(y-s->h/2));

if the sqrt is a speed problem, (i had originally thougt it would
not be)
you can probably replace this by an approximation like:
epsilon= scale*CONSTANT*(FFABS(x-s->w/2) + FFABS(y-s->h/2))/s->w;

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

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151124/d76baf57/attachment.sig>


More information about the ffmpeg-devel mailing list