]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_floodfill.c
avfilter: Constify all AVFilters
[ffmpeg] / libavfilter / vf_floodfill.c
index d40043c2341d5e5ffe9cabd86a4a1638884e86f3..3b17b04c61cb0cd32577a45b1183bdba592eae80 100644 (file)
@@ -35,6 +35,7 @@ typedef struct FloodfillContext {
 
     int x, y;
     int s[4];
+    int S[4];
     int d[4];
 
     int nb_planes;
@@ -293,26 +294,30 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
     const int h = frame->height;
     int i, ret;
 
-    for (i = 0; i < s->nb_planes; i++) {
-        if (s->s[i] != s->d[i])
-            break;
-    }
-
-    if (i == s->nb_planes)
-        goto end;
-
-    if (ret = av_frame_make_writable(frame))
-        return ret;
-
     if (is_inside(s->x, s->y, w, h)) {
         s->pick_pixel(frame, s->x, s->y, &s0, &s1, &s2, &s3);
 
+        s->S[0] = s0;
+        s->S[1] = s1;
+        s->S[2] = s2;
+        s->S[3] = s3;
+        for (i = 0; i < s->nb_planes; i++) {
+            if (s->S[i] != s->d[i])
+                break;
+        }
+
+        if (i == s->nb_planes)
+            goto end;
+
         if (s->is_same(frame, s->x, s->y, s0, s1, s2, s3)) {
             s->points[s->front].x = s->x;
             s->points[s->front].y = s->y;
             s->front++;
         }
 
+        if (ret = av_frame_make_writable(frame))
+            return ret;
+
         while (s->front > s->back) {
             int x, y;
 
@@ -415,7 +420,7 @@ static const AVOption floodfill_options[] = {
 
 AVFILTER_DEFINE_CLASS(floodfill);
 
-AVFilter ff_vf_floodfill = {
+const AVFilter ff_vf_floodfill = {
     .name          = "floodfill",
     .description   = NULL_IF_CONFIG_SMALL("Fill area with same color with another color."),
     .priv_size     = sizeof(FloodfillContext),