[PATCH xrandr] Adding a "--filter" flag

Pablo De La Garza pdelagarza at nvidia.com
Thu Mar 23 23:05:02 UTC 2017


From: pdelagarza <pdelagarza at nvidia.com>

Flag can be set to "nearest" or "bilinear"

Signed-off-by: Pablo De La Garza <pdelagarza at nvidia.com>
---
 xrandr.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/xrandr.c b/xrandr.c
index dcfdde0..c2cc82e 100644
--- a/xrandr.c
+++ b/xrandr.c
@@ -54,6 +54,12 @@ static Bool	automatic = False;
 static Bool	properties = False;
 static Bool	grab_server = True;
 static Bool	no_primary = False;
+static int      filterType = -1;
+
+static const char *filterTypeList[2] = {
+    "bilinear",
+    "nearest"};
+
 
 static const char *direction[5] = {
     "normal", 
@@ -118,6 +124,7 @@ usage(void)
            "  --fb <width>x<height>\n"
            "  --fbmm <width>x<height>\n"
            "  --dpi <dpi>/<output>\n"
+           "  --filter <filterType>,    filterType: nearest, bilinear\n"
            "  --output <output>\n"
            "      --auto\n"
            "      --mode <mode>\n"
@@ -285,6 +292,7 @@ typedef enum _changes {
     changes_panning = (1 << 10),
     changes_gamma = (1 << 11),
     changes_primary = (1 << 12),
+    changes_filter = (1 << 13),
 } changes_t;
 
 typedef enum _name_kind {
@@ -1311,6 +1319,11 @@ set_output_info (output_t *output, RROutput xid, XRROutputInfo *output_info)
 	    output->transform.params = NULL;
 	}
     }
+    if (output->changes & changes_filter)
+    {
+        output->transform.filter = filterTypeList[filterType];
+    }
+
 
     /* set primary */
     if (!(output->changes & changes_primary))
@@ -2808,6 +2821,28 @@ main (int argc, char **argv)
 	    action_requested = True;
 	    continue;
 	}
+
+        if (!strcmp("--filter", argv[i]))
+        {
+            if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
+            if (++i >= argc) argerr("%s requires an argument\n", argv[i-1]);
+
+            for (int t=0;t < sizeof(filterTypeList)/sizeof(filterTypeList[0]);t++)
+            {
+                if (!strcmp(filterTypeList[t],argv[i]))
+                {
+                    filterType = t;
+                    break;
+                }
+            }
+
+            if (filterType==-1) argerr("Bad argument: %s, for a filter\n", argv[i]);
+
+            config_output->changes |= changes_filter;
+            action_requested = True;
+            continue;
+        }
+
 	if (!strcmp ("--crtc", argv[i])) {
 	    if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
 	    if (++i >= argc) argerr ("%s requires an argument\n", argv[i-1]);
-- 
2.7.4



More information about the xorg-devel mailing list