Browse code

mandelbrot: Only use cycle detection if previous pixel was an interior pixel

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2011/11/13 00:33:56
Showing 1 changed files
... ...
@@ -159,7 +159,7 @@ static void draw_mandelbrot(AVFilterContext *ctx, uint32_t *color, int linesize,
159 159
     MBContext *mb = ctx->priv;
160 160
     int x,y,i, in_cidx=0, next_cidx=0, tmp_cidx;
161 161
     double scale= mb->start_scale*pow(mb->end_scale/mb->start_scale, pts/mb->end_pts);
162
-
162
+    int use_zyklus=0;
163 163
     fill_from_cache(ctx, NULL, &in_cidx, NULL, mb->start_y+scale*(-mb->h/2-0.5), scale);
164 164
     for(y=0; y<mb->h; y++){
165 165
         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,
190 190
                 t= zr*zr - zi*zi;
191 191
                 zi= 2*zr*zi + ci;
192 192
                 zr=       t + cr;
193
-                if(i && mb->zyklus[i>>1][0]==zr && mb->zyklus[i>>1][1]==zi)
194
-                    break;
195
-                mb->zyklus[i][0]= zr;
196
-                mb->zyklus[i][1]= zi;
193
+                if(use_zyklus){
194
+                    if(i && mb->zyklus[i>>1][0]==zr && mb->zyklus[i>>1][1]==zi)
195
+                        break;
196
+                    mb->zyklus[i][0]= zr;
197
+                    mb->zyklus[i][1]= zi;
198
+                }
197 199
             }
200
+            use_zyklus = !c;
198 201
             c |= 0xFF000000;
199 202
             color[x + y*linesize]= c;
200 203
             if(next_cidx < mb->cache_allocated){