avfilter/vf_pullup: Factor free_field_queue() out
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 13 Dec 2013 14:13:01 +0000 (15:13 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 13 Dec 2013 14:13:01 +0000 (15:13 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavfilter/vf_pullup.c

index 69e1e91..d0b910f 100644 (file)
@@ -126,6 +126,22 @@ static int alloc_metrics(PullupContext *s, PullupField *f)
     return 0;
 }
 
+static void free_field_queue(PullupField *head, PullupField **last)
+{
+    PullupField *f = head;
+    while (f) {
+        av_free(f->diffs);
+        av_free(f->combs);
+        av_free(f->vars);
+        if (f == *last) {
+            av_freep(last);
+            break;
+        }
+        f = f->next;
+        av_freep(&f->prev);
+    };
+}
+
 static PullupField *make_field_queue(PullupContext *s, int len)
 {
     PullupField *head, *f;
@@ -714,21 +730,9 @@ end:
 static av_cold void uninit(AVFilterContext *ctx)
 {
     PullupContext *s = ctx->priv;
-    PullupField *f;
     int i;
 
-    f = s->head;
-    while (f) {
-        av_free(f->diffs);
-        av_free(f->combs);
-        av_free(f->vars);
-        if (f == s->last) {
-            av_freep(&s->last);
-            break;
-        }
-        f = f->next;
-        av_freep(&f->prev);
-    };
+    free_field_queue(s->head, &s->last);
 
     for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) {
         av_freep(&s->buffers[i].planes[0]);