[FFmpeg-devel] [PATCH]Add more 32bit RGB colourspaces to kerndeint

Carl Eugen Hoyos cehoyos at ag.or.at
Sat Jan 5 11:58:35 CET 2013


Hi!

I did not test with input that contains transparency.

Please review, Carl Eugen
-------------- next part --------------
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c
index 3569bfa..337f9ee 100644
--- a/libavfilter/vf_kerndeint.c
+++ b/libavfilter/vf_kerndeint.c
@@ -83,6 +83,13 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_YUV420P,
         AV_PIX_FMT_YUYV422,
         AV_PIX_FMT_ARGB,
+        AV_PIX_FMT_0RGB,
+        AV_PIX_FMT_ABGR,
+        AV_PIX_FMT_0BGR,
+        AV_PIX_FMT_RGBA,
+        AV_PIX_FMT_RGB0,
+        AV_PIX_FMT_BGRA,
+        AV_PIX_FMT_BGR0,
         AV_PIX_FMT_NONE
     };
 
@@ -103,6 +110,17 @@ static int config_props(AVFilterLink *inlink)
                           inlink->w, inlink->h, inlink->format, 1);
 }
 
+#define isRGB(x) \
+    (  x == PIX_FMT_ARGB \
+    || x == PIX_FMT_0RGB \
+    || x == PIX_FMT_ABGR \
+    || x == PIX_FMT_0BGR \
+    || x == PIX_FMT_RGBA \
+    || x == PIX_FMT_RGB0 \
+    || x == PIX_FMT_BGRA \
+    || x == PIX_FMT_BGR0 \
+    )
+
 static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
 {
     KerndeintContext *kerndeint = inlink->dst->priv;
@@ -203,7 +221,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
                     if (map) {
                         g = x & ~3;
 
-                        if (inlink->format == AV_PIX_FMT_RGBA) {
+                        if (isRGB(inlink->format)) {
                             AV_WB32(dstp + g, 0xffffffff);
                             x = g + 3;
                         } else if (inlink->format == AV_PIX_FMT_YUYV422) {
@@ -214,7 +232,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpic)
                             dstp[x] = plane == 0 ? 235 : 128;
                         }
                     } else {
-                        if (inlink->format == AV_PIX_FMT_RGBA) {
+                        if (isRGB(inlink->format)) {
                             hi = 255;
                             lo = 0;
                         } else if (inlink->format == AV_PIX_FMT_YUYV422) {


More information about the ffmpeg-devel mailing list