[FFmpeg-cvslog] avfilter/xbr: use function pointers for xbr[234]x

Clément Bœsch git at videolan.org
Sat Nov 15 21:23:03 CET 2014


ffmpeg | branch: master | Clément Bœsch <u at pkh.me> | Sat Nov 15 21:18:18 2014 +0100| [be96201e5bf103a42a91e06464a9b71b4112f7c6] | committer: Clément Bœsch

avfilter/xbr: use function pointers for xbr[234]x

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

 libavfilter/vf_xbr.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/libavfilter/vf_xbr.c b/libavfilter/vf_xbr.c
index 4f4a8f3..d143c62 100644
--- a/libavfilter/vf_xbr.c
+++ b/libavfilter/vf_xbr.c
@@ -40,9 +40,12 @@
 #define RED_BLUE_MASK 0x00FF00FF
 #define GREEN_MASK    0x0000FF00
 
+typedef void (*xbrfunc_t)(AVFrame *input, AVFrame *output, const uint32_t *r2y);
+
 typedef struct {
     const AVClass *class;
     int n;
+    xbrfunc_t func;
     uint32_t rgbtoyuv[1<<24];
 } XBRContext;
 
@@ -392,12 +395,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
     }
 
     av_frame_copy_props(out, in);
-    if (xbr->n == 4)
-        xbr4x(in, out, r2y);
-    else if (xbr->n == 3)
-        xbr3x(in, out, r2y);
-    else
-        xbr2x(in, out, r2y);
+    xbr->func(in, out, r2y);
 
     out->width  = outlink->w;
     out->height = outlink->h;
@@ -409,6 +407,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 static int init(AVFilterContext *ctx)
 {
     XBRContext *xbr = ctx->priv;
+    static const xbrfunc_t xbrfuncs[] = {xbr2x, xbr3x, xbr4x};
+
     uint32_t c;
     int bg, rg, g;
 
@@ -427,6 +427,7 @@ static int init(AVFilterContext *ctx)
         }
     }
 
+    xbr->func = xbrfuncs[xbr->n - 2];
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list