diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-11-12 16:33:56 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-11-12 16:46:21 +0100 |
commit | 6c5dd858b4c8aa4cb009802dd86d0ea5dc03eabf (patch) | |
tree | 1a97b118621dd647660e0d47847a69c77fdabd0c /libavfilter/vsrc_mandelbrot.c | |
parent | 50b8f9388adfc09283a8f1990d91a2acc24dadb7 (diff) |
mandelbrot: Only use cycle detection if previous pixel was an interior pixel
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/vsrc_mandelbrot.c')
-rw-r--r-- | libavfilter/vsrc_mandelbrot.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/libavfilter/vsrc_mandelbrot.c b/libavfilter/vsrc_mandelbrot.c index 67b289340d..2f8134f787 100644 --- a/libavfilter/vsrc_mandelbrot.c +++ b/libavfilter/vsrc_mandelbrot.c @@ -159,7 +159,7 @@ static void draw_mandelbrot(AVFilterContext *ctx, uint32_t *color, int linesize, MBContext *mb = ctx->priv; int x,y,i, in_cidx=0, next_cidx=0, tmp_cidx; double scale= mb->start_scale*pow(mb->end_scale/mb->start_scale, pts/mb->end_pts); - + int use_zyklus=0; fill_from_cache(ctx, NULL, &in_cidx, NULL, mb->start_y+scale*(-mb->h/2-0.5), scale); for(y=0; y<mb->h; y++){ const double ci=mb->start_y+scale*(y-mb->h/2); @@ -190,11 +190,14 @@ static void draw_mandelbrot(AVFilterContext *ctx, uint32_t *color, int linesize, t= zr*zr - zi*zi; zi= 2*zr*zi + ci; zr= t + cr; - if(i && mb->zyklus[i>>1][0]==zr && mb->zyklus[i>>1][1]==zi) - break; - mb->zyklus[i][0]= zr; - mb->zyklus[i][1]= zi; + if(use_zyklus){ + if(i && mb->zyklus[i>>1][0]==zr && mb->zyklus[i>>1][1]==zi) + break; + mb->zyklus[i][0]= zr; + mb->zyklus[i][1]= zi; + } } + use_zyklus = !c; c |= 0xFF000000; color[x + y*linesize]= c; if(next_cidx < mb->cache_allocated){ |