From 3406cb26df17e183dfc3da2b9fe4a5b41575c40d Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 16 Feb 2014 19:08:21 +0100 Subject: c binding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- .gitignore | 1 + Makefile | 9 +++++---- src/_blueshift_randr.pyx | 33 +++++++++++++++++++++++++-------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 9276e4c..87b68f2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ obj/ *.out *.gch __pycache__/ +/src/_blueshift_randr.c diff --git a/Makefile b/Makefile index 6aacca1..df938e1 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,14 @@ PKGCONFIG = pkg-config OPTIMISE = -Og -g WARN = -Wall -Wextra -pedantic -LIBS = xcb-randr +LIBS = xcb-randr python3 STD = c99 FLAGS = $$($(PKGCONFIG) --cflags --libs $(LIBS)) -std=$(STD) $(WARN) $(OPTIMISE) -fPIC .PHONY: all -all: bin/blueshift_randr +all: bin/blueshift_randr.so bin/blueshift_randr.so: obj/_blueshift_randr.o obj/blueshift_randr_c.o @@ -24,11 +24,12 @@ obj/%.o: obj/%.c $(CC) $(FLAGS) -c -o $@ $< obj/_blueshift_randr.c: src/_blueshift_randr.pyx - cd src ; cython -3 $< + @mkdir -p obj + if ! cython -3 -v $<; then src/_blueshift_randr.c ; false ; fi mv src/_blueshift_randr.c $@ .PHONY: all clean: - -rm -r bin obj + -rm -r bin obj src/_blueshift_randr.c diff --git a/src/_blueshift_randr.pyx b/src/_blueshift_randr.pyx index 44fd4b6..e022714 100644 --- a/src/_blueshift_randr.pyx +++ b/src/_blueshift_randr.pyx @@ -1,9 +1,13 @@ # -*- python -*- +cimport cython +from libc.stdlib cimport malloc, free + + cdef extern int blueshift_randr_open(int use_screen) cdef extern int blueshift_randr_apply(unsigned long long int use_crtcs, - unsigned short int r_curve[256], - unsigned short int g_curve[256], - unsigned short int b_curve[256]) + unsigned short int* r_curve, + unsigned short int* g_curve, + unsigned short int* b_curve) cdef extern void blueshift_randr_close() @@ -11,11 +15,24 @@ def randr_open(int use_screen): return blueshift_randr_open(use_screen) -def randr_apply(unsigned long long int use_crtcs, - unsigned short int r_curve[256], - unsigned short int g_curve[256], - unsigned short int b_curve[256]): - return blueshift_randr_apply(use_crtcs, r_curve, g_curve, b_curve) +def randr_apply(unsigned long long use_crtcs, r_curve, g_curve, b_curve): + cdef unsigned short int* r + cdef unsigned short int* g + cdef unsigned short int* b + r = malloc(256 * 2) + g = malloc(256 * 2) + b = malloc(256 * 2) + if (r is NULL) or (g is NULL) or (b is NULL): + raise MemoryError() + for i in range(256): + r[i] = r_curve[i] + g[i] = g_curve[i] + b[i] = b_curve[i] + rc = blueshift_randr_apply(use_crtcs, r, g, b) + free(r) + free(g) + free(b) + return rc def randr_close(): -- cgit v1.2.3-70-g09d2