[FFmpeg-cvslog] vf_yadif: factorize initializing the filtering callbacks

Anton Khirnov git at videolan.org
Sat Feb 16 08:54:53 CET 2013


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat Feb  9 08:28:37 2013 +0100| [ccd70d9c1689990e5aef2de383199bbc7cf60d13] | committer: Anton Khirnov

vf_yadif: factorize initializing the filtering callbacks

Do it all in config_props().

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ccd70d9c1689990e5aef2de383199bbc7cf60d13
---

 libavfilter/vf_yadif.c |   23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c
index ae49013..2808540 100644
--- a/libavfilter/vf_yadif.c
+++ b/libavfilter/vf_yadif.c
@@ -194,11 +194,6 @@ static int return_frame(AVFilterContext *ctx, int is_second)
         yadif->out->video->interlaced = 0;
     }
 
-    if (!yadif->csp)
-        yadif->csp = av_pix_fmt_desc_get(link->format);
-    if (yadif->csp->comp[0].depth_minus1 / 8 == 1)
-        yadif->filter_line = filter_line_c_16bit;
-
     filter(ctx, yadif->out, tff ^ !is_second, tff);
 
     if (is_second) {
@@ -374,17 +369,11 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
     yadif->mode = 0;
     yadif->parity = -1;
     yadif->auto_enable = 0;
-    yadif->csp = NULL;
 
     if (args)
         sscanf(args, "%d:%d:%d",
                &yadif->mode, &yadif->parity, &yadif->auto_enable);
 
-    yadif->filter_line = filter_line_c;
-
-    if (ARCH_X86)
-        ff_yadif_init_x86(yadif);
-
     av_log(ctx, AV_LOG_VERBOSE, "mode:%d parity:%d auto_enable:%d\n",
            yadif->mode, yadif->parity, yadif->auto_enable);
 
@@ -393,11 +382,23 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
 
 static int config_props(AVFilterLink *link)
 {
+    YADIFContext *s = link->src->priv;
+
     link->time_base.num = link->src->inputs[0]->time_base.num;
     link->time_base.den = link->src->inputs[0]->time_base.den * 2;
     link->w             = link->src->inputs[0]->w;
     link->h             = link->src->inputs[0]->h;
 
+    s->csp = av_pix_fmt_desc_get(link->format);
+    if (s->csp->comp[0].depth_minus1 / 8 == 1) {
+        s->filter_line = filter_line_c_16bit;
+    } else {
+        s->filter_line = filter_line_c;
+
+        if (ARCH_X86)
+            ff_yadif_init_x86(s);
+    }
+
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list