aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile12
-rw-r--r--src/libcoopgamma_native.pyx.gpp410
2 files changed, 226 insertions, 196 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6d39412
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,12 @@
+GPP = gpp
+CYTHON = cython
+
+all: obj/libcoopgamma_native.c
+
+obj/libcoopgamma_native.pyx: src/libcoopgamma_native.pyx.gpp
+ @mkdir -p obj
+ $(GPP) -s '$$$$' -i src/libcoopgamma_native.pyx.gpp -o $@
+
+obj/%.c: obj/%.pyx
+ if ! $(CYTHON) -3 -v $< ; then rm $@ ; false ; fi
+
diff --git a/src/libcoopgamma_native.pyx.gpp b/src/libcoopgamma_native.pyx.gpp
index 94daec2..89509af 100644
--- a/src/libcoopgamma_native.pyx.gpp
+++ b/src/libcoopgamma_native.pyx.gpp
@@ -862,15 +862,27 @@ def libcoopgamma_native_get_pid_file(method : str, site : str):
the pathname of the server's PID file. `None` if the server
does not use PID files.
'''
- cdef char* path
- char bytes bs
- path = libcoopgamma_native_get_pid_file(method, site)
- if errno != 0 and path is NULL:
- try:
+ cdef char* cmethod = NULL
+ cdef char* csite = NULL
+ cdef char* path = NULL
+ cdef bytes bs
+ try:
+ buf = method.encode('utf-8')
+ cmethod = <char*>malloc(len(buf) * sizeof(char))
+ for i in range(len(buf)):
+ cmethod[i] = <char>(buf[i])
+ buf = site.encode('utf-8')
+ csite = <char*>malloc(len(buf) * sizeof(char))
+ for i in range(len(buf)):
+ csite[i] = <char>(buf[i])
+ path = libcoopgamma_get_pid_file(cmethod, csite)
+ if errno != 0 and path is not NULL:
bs = path
return bs.decode('utf-8', 'strict')
- finally:
- free(path)
+ finally:
+ free(cmethod)
+ free(csite)
+ free(path)
return int(errno)
@@ -887,15 +899,27 @@ def libcoopgamma_native_get_socket_file(method : str, site : str):
its own socket, which is the case when communicating with a server
in a multi-server display server like mds
'''
- cdef char* path
- char bytes bs
- path = libcoopgamma_native_get_socket_file(method, site)
- if errno != 0 and path is NULL:
- try:
+ cdef char* cmethod = NULL
+ cdef char* csite = NULL
+ cdef char* path = NULL
+ cdef bytes bs
+ try:
+ buf = method.encode('utf-8')
+ cmethod = <char*>malloc(len(buf) * sizeof(char))
+ for i in range(len(buf)):
+ cmethod[i] = <char>(buf[i])
+ buf = site.encode('utf-8')
+ csite = <char*>malloc(len(buf) * sizeof(char))
+ for i in range(len(buf)):
+ csite[i] = <char>(buf[i])
+ path = libcoopgamma_get_socket_file(cmethod, csite)
+ if errno != 0 and path is not NULL:
bs = path
return bs.decode('utf-8', 'strict')
- finally:
- free(path)
+ finally:
+ free(cmethod)
+ free(csite)
+ free(path)
return int(errno)
@@ -908,7 +932,7 @@ def libcoopgamma_native_context_create():
success, the address of the created instance
'''
cdef libcoopgamma_context_t* this
- this = <libcoopgamma_context_t*>malloc(sizeof(*this))
+ this = <libcoopgamma_context_t*>malloc(sizeof(libcoopgamma_context_t))
if this is NULL:
return (False, int(errno))
if libcoopgamma_context_initialise(this) < 0:
@@ -945,7 +969,7 @@ def libcoopgamma_native_context_marshal(address : int):
return int(errno)
try:
libcoopgamma_context_marshal(this, buf)
- return bytes(<int>(char[i]) for i in range(int(n)))
+ return bytes(<int>(buf[i]) for i in range(int(n)))
finally:
free(buf)
@@ -964,18 +988,24 @@ def libcoopgamma_native_context_unmarshal(buf : bytes):
'''
cdef size_t ret1 = 0
cdef libcoopgamma_context_t* this
- this = <libcoopgamma_context_t*>calloc(1, sizeof(*this))
+ cdef char* bs = NULL
+ this = <libcoopgamma_context_t*>calloc(1, sizeof(libcoopgamma_context_t))
if this is NULL:
return (-1, int(errno))
try:
if libcoopgamma_context_initialise(this) < 0:
- saved_errno = int(errno)
- return (-1, saved_errno)
- ret0 = <int>libcoopgamma_context_unmarshal(this, <bytes>buf, &ret1)
+ return (-1, int(errno))
+ bs = <char*>malloc(len(buf) * sizeof(char))
+ if bs is not NULL:
+ return (-1, int(errno))
+ for i in range(len(buf)):
+ bs[i] = <char>(buf[i])
+ ret0 = <int>libcoopgamma_context_unmarshal(this, bs, &ret1)
return (ret0, <int>ret1)
finally:
- libcoopgamma_context_destroy(this)
+ libcoopgamma_context_destroy(this, 1)
free(this)
+ free(bs)
def libcoopgamma_native_context_set_fd(address : int, fd : int):
@@ -986,7 +1016,7 @@ def libcoopgamma_native_context_set_fd(address : int, fd : int):
@param fd:int The file descriptor
'''
cdef libcoopgamma_context_t* this = <libcoopgamma_context_t*><void*><intptr_t>address
- this->fd = fd
+ this.fd = fd
def libcoopgamma_native_context_create():
@@ -998,7 +1028,7 @@ def libcoopgamma_native_context_create():
success, the address of the created instance
'''
cdef libcoopgamma_context_t* this
- this = <libcoopgamma_context_t*>malloc(sizeof(*this))
+ this = <libcoopgamma_context_t*>malloc(sizeof(libcoopgamma_context_t))
if this is NULL:
return (False, int(errno))
if libcoopgamma_context_initialise(this) < 0:
@@ -1035,7 +1065,7 @@ def libcoopgamma_native_async_context_marshal(address : int):
if buf is NULL:
return int(errno)
libcoopgamma_async_context_marshal(this, buf)
- ret = bytes(<int>(char[i]) for i in range(int(n)))
+ ret = bytes(<int>(buf[i]) for i in range(int(n)))
finally:
free(buf)
return ret
@@ -1055,17 +1085,24 @@ def libcoopgamma_native_async_context_unmarshal(buf : bytes):
'''
cdef size_t ret1 = 0
cdef libcoopgamma_async_context_t* this
- this = <libcoopgamma_async_context_t*>malloc(sizeof(*this))
- if this is NULL:
- return (-1, int(errno))
- if libcoopgamma_async_context_initialise(this) < 0:
- saved_errno = int(errno)
+ cdef char* bs = NULL
+ this = <libcoopgamma_async_context_t*>malloc(sizeof(libcoopgamma_async_context_t))
+ try:
+ if this is NULL:
+ return (-1, int(errno))
+ if libcoopgamma_async_context_initialise(this) < 0:
+ return (-1, int(errno))
+ bs = <char*>malloc(len(buf) * sizeof(char))
+ if bs is not NULL:
+ return (-1, int(errno))
+ for i in range(len(buf)):
+ bs[i] = <char>(buf[i])
+ ret0 = <int>libcoopgamma_async_context_unmarshal(this, bs, &ret1)
+ return (ret0, <int>ret1)
+ finally:
libcoopgamma_async_context_destroy(this)
free(this)
- return (-1, int(errno))
- ret0 = <int>libcoopgamma_async_context_unmarshal(this, <bytes>buf, &ret1)
- free(this)
- return (ret0, <int>ret1)
+ free(bs)
def libcoopgamma_native_connect(method : str, site : str, address : int):
@@ -1140,16 +1177,17 @@ def libcoopgamma_native_synchronise(address : int, pending : list):
'''
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* pends
+ cdef libcoopgamma_async_context_t* pend
cdef size_t selected = 0
- pends = <libcoopgamma_async_context_t*>malloc(n * sizeof(*pends))
+ pends = <libcoopgamma_async_context_t*>malloc(len(pending) * sizeof(libcoopgamma_async_context_t))
try:
if pends is NULL:
return (False, int(errno))
for i in range(len(pending)):
- pends[i] = *<libcoopgamma_async_context_t*><void*><intptr_t>pendings[i]
+ pend = <libcoopgamma_async_context_t*><void*><intptr_t>(pending[i])
+ pends[i] = pend[0]
if libcoopgamma_synchronise(ctx, pends, <size_t>len(pending), &selected) < 0:
- saved_errno = int(errno)
- return (False, saved_errno)
+ return (False, int(errno))
finally:
free(pends)
return (True, <int>selected)
@@ -1221,7 +1259,7 @@ def libcoopgamma_native_get_crtcs_sync(address : int):
a list of the names of the available CRTC:s
'''
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
- cdef char** crtcs = libcoopgamma_get_crtcs_sync(ctxactx)
+ cdef char** crtcs = libcoopgamma_get_crtcs_sync(ctx)
cdef bytes bs
try:
if crtcs is NULL:
@@ -1250,12 +1288,18 @@ def libcoopgamma_native_get_gamma_info_send(crtc : str, address : int, async : i
'''
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
- cdef bytes ccrtc = crtc.encode('utf-8')
+ cdef char* ccrtc = NULL
try:
- if libcoopgamma_get_gamma_info_send(<char*>ccrtc, ctx, actx) < 0:
+ bs = crtc.encode('utf-8')
+ ccrtc = <char*>malloc(len(bs) * sizeof(char))
+ if ccrtc is NULL:
+ return int(errno)
+ for i in range(len(bs)):
+ ccrtc[i] = <char>(bs[i])
+ if libcoopgamma_get_gamma_info_send(ccrtc, ctx, actx) < 0:
return int(errno)
finally:
- free(ccrtcs)
+ free(ccrtc)
return 0
@@ -1272,15 +1316,16 @@ def libcoopgamma_native_get_gamma_info_recv(address : int, async : int):
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
cdef libcoopgamma_crtc_info_t info
+ cdef bytes bs
try:
if libcoopgamma_crtc_info_initialise(&info) < 0:
return int(errno)
if libcoopgamma_get_gamma_info_recv(&info, ctx, actx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- ret = (False, (int(ctx->error.number), ctx->error.custom != 0, ctx->error.server_side != 0, desc))
+ ret = (False, (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc))
else:
ret = (True, (info.cooperative != 0, int(info.depth), int(info.supported), int(info.red_size),
int(info.green_size), int(info.blue_size), int(info.colourspace),
@@ -1308,19 +1353,23 @@ def libcoopgamma_native_get_gamma_info_sync(crtc : str, address : int):
Element 0: whether the call was successful
Element 1: tuple with the data for the structure response (possibly error)
'''
- cdef bytes ccrtc = crtc.encode('utf-8')
+ cdef char* ccrtc = NULL
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
- cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
cdef libcoopgamma_crtc_info_t info
+ cdef bytes bs
try:
if libcoopgamma_crtc_info_initialise(&info) < 0:
return int(errno)
- if libcoopgamma_get_gamma_info_sync(<char*>ccrtc, &info, ctx, actx) < 0:
+ bscrtc = crtc.encode('utf-8')
+ ccrtc = <char*>malloc(len(bscrtc) * sizeof(bscrtc))
+ for i in range(len(bscrtc)):
+ ccrtc[i] = <char>(bscrtc[i])
+ if libcoopgamma_get_gamma_info_sync(ccrtc, &info, ctx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- ret = (False, (int(ctx->error.number), ctx->error.custom != 0, ctx->error.server_side != 0, desc))
+ ret = (False, (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc))
else:
ret = (True, (info.cooperative != 0, int(info.depth), int(info.supported), int(info.red_size),
int(info.green_size), int(info.blue_size), int(info.colourspace),
@@ -1330,7 +1379,7 @@ def libcoopgamma_native_get_gamma_info_sync(crtc : str, address : int):
(info.white_x, info.white_y))))
finally:
libcoopgamma_crtc_info_destroy(&info)
- free(ccrtcs)
+ free(ccrtc)
return ret
@@ -1350,7 +1399,7 @@ def libcoopgamma_native_get_gamma_send(query, address : int, async : int):
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
cdef libcoopgamma_filter_query_t qry
- crtc_bs = crtc.encode('utf-8') + bytes([0])
+ crtc_bs = query.crtc.encode('utf-8') + bytes([0])
qry.high_priority = <int64_t>(query.high_priority)
qry.low_priority = <int64_t>(query.low_priority)
qry.coalesce = <int>(query.coalesce)
@@ -1361,8 +1410,7 @@ def libcoopgamma_native_get_gamma_send(query, address : int, async : int):
for i in range(len(crtc_bs)):
qry.crtc[i] = <char>(crtc_bs[i])
if libcoopgamma_get_gamma_send(&qry, ctx, actx) < 0:
- saved_errno = int(errno)
- return saved_errno
+ return int(errno)
finally:
free(qry.crtc)
return 0
@@ -1381,87 +1429,72 @@ def libcoopgamma_native_get_gamma_recv(address : int, async : int):
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
cdef libcoopgamma_filter_table_t table
+ cdef bytes bs
+ cdef libcoopgamma_ramps_t* rampsp
+ cdef bytes fclass
try:
if libcoopgamma_filter_table_initialise(&table) < 0:
return int(errno)
- if libcoopgamma_get_gamma_recv(&info, ctx, actx) < 0:
+ if libcoopgamma_get_gamma_recv(&table, ctx, actx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- ret = (False, (int(ctx->error.number), ctx->error.custom != 0, ctx->error.server_side != 0, desc))
+ ret = (False, (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc))
else:
filters = [None] * int(table.filter_count)
for i in range(int(table.filter_count)):
- cdef libcoopgamma_ramps_t* rampsp = &(table.filters[i].fclass.ramps)
- cdef bytes fclass = table.filters[i].fclass
- red = [None] * rampsp->red_size
- green = [None] * rampsp->green_size
- blue = [None] * rampsp->blue_size
+ rampsp = &(table.filters[i].fclass.ramps)
+ fclass = table.filters[i].fclass
+ red = [None] * rampsp.red_size
+ green = [None] * rampsp.green_size
+ blue = [None] * rampsp.blue_size
if table.depth == -2:
- cdef double* r = <double*>(rampsp->red)
- cdef double* g = <double*>(rampsp->green)
- cdef double* b = <double*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<double*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<double*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<double*>(rampsp.blue))[i]
elif table.depth == -1:
- cdef float* r = <float*>(rampsp->red)
- cdef float* g = <float*>(rampsp->green)
- cdef float* b = <float*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<float*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<float*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<float*>(rampsp.blue))[i]
elif table.depth == 8:
- cdef uint8_t* r = <uint8_t*>(rampsp->red)
- cdef uint8_t* g = <uint8_t*>(rampsp->green)
- cdef uint8_t* b = <uint8_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint8_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint8_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint8_t*>(rampsp.blue))[i]
elif table.depth == 16:
- cdef uint16_t* r = <uint16_t*>(rampsp->red)
- cdef uint16_t* g = <uint16_t*>(rampsp->green)
- cdef uint16_t* b = <uint16_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint16_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint16_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint16_t*>(rampsp.blue))[i]
elif table.depth == 32:
- cdef uint32_t* r = <uint32_t*>(rampsp->red)
- cdef uint32_t* g = <uint32_t*>(rampsp->green)
- cdef uint32_t* b = <uint32_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint32_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint32_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint32_t*>(rampsp.blue))[i]
elif table.depth == 64:
- cdef uint64_t* r = <uint64_t*>(rampsp->red)
- cdef uint64_t* g = <uint64_t*>(rampsp->green)
- cdef uint64_t* b = <uint64_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
- ramps = (rampsp->red_size, rampsp->green_size, rampsp->blue_size, red, green, blue)
+ for i in range(rampsp.red_size):
+ red[i] = (<uint64_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint64_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint64_t*>(rampsp.blue))[i]
+ ramps = (rampsp.red_size, rampsp.green_size, rampsp.blue_size, red, green, blue)
filters[i] = (int(table.filters[i].priority), fclass.decode('utf-8', 'strict'), ramps)
ret = (True, (int(table.red_size), int(table.green_size), int(table.blue_size),
- int(table.colourspace), int(table.depth), filters))
+ int(table.depth), filters))
finally:
libcoopgamma_filter_table_destroy(&table)
return ret
@@ -1485,7 +1518,10 @@ def libcoopgamma_native_get_gamma_sync(query, address : int):
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_filter_table_t table
cdef libcoopgamma_filter_query_t qry
- crtc_bs = crtc.encode('utf-8') + bytes([0])
+ cdef bytes bs
+ cdef libcoopgamma_ramps_t* rampsp
+ cdef bytes fclass
+ crtc_bs = query.crtc.encode('utf-8') + bytes([0])
qry.high_priority = <int64_t>(query.high_priority)
qry.low_priority = <int64_t>(query.low_priority)
qry.coalesce = <int>(query.coalesce)
@@ -1500,85 +1536,66 @@ def libcoopgamma_native_get_gamma_sync(query, address : int):
libcoopgamma_filter_table_destroy(&table)
return saved_errno
try:
- if libcoopgamma_get_gamma_sync(&qry, &info, ctx) < 0:
+ if libcoopgamma_get_gamma_sync(&qry, &table, ctx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- ret = (False, (int(ctx->error.number), ctx->error.custom != 0,
- ctx->error.server_side != 0, desc))
+ ret = (False, (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc))
else:
filters = [None] * int(table.filter_count)
for i in range(int(table.filter_count)):
- cdef libcoopgamma_ramps_t* rampsp = &(table.filters[i].fclass.ramps)
- cdef bytes fclass = table.filters[i].fclass
- red = [None] * rampsp->red_size
- green = [None] * rampsp->green_size
- blue = [None] * rampsp->blue_size
+ rampsp = &(table.filters[i].fclass.ramps)
+ fclass = table.filters[i].fclass
+ red = [None] * rampsp.red_size
+ green = [None] * rampsp.green_size
+ blue = [None] * rampsp.blue_size
if table.depth == -2:
- cdef double* r = <double*>(rampsp->red)
- cdef double* g = <double*>(rampsp->green)
- cdef double* b = <double*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<double*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<double*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<double*>(rampsp.blue))[i]
elif table.depth == -1:
- cdef float* r = <float*>(rampsp->red)
- cdef float* g = <float*>(rampsp->green)
- cdef float* b = <float*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<float*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<float*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<float*>(rampsp.blue))[i]
elif table.depth == 8:
- cdef uint8_t* r = <uint8_t*>(rampsp->red)
- cdef uint8_t* g = <uint8_t*>(rampsp->green)
- cdef uint8_t* b = <uint8_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint8_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint8_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint8_t*>(rampsp.blue))[i]
elif table.depth == 16:
- cdef uint16_t* r = <uint16_t*>(rampsp->red)
- cdef uint16_t* g = <uint16_t*>(rampsp->green)
- cdef uint16_t* b = <uint16_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint16_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint16_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint16_t*>(rampsp.blue))[i]
elif table.depth == 32:
- cdef uint32_t* r = <uint32_t*>(rampsp->red)
- cdef uint32_t* g = <uint32_t*>(rampsp->green)
- cdef uint32_t* b = <uint32_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
+ for i in range(rampsp.red_size):
+ red[i] = (<uint32_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint32_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint32_t*>(rampsp.blue))[i]
elif table.depth == 64:
- cdef uint64_t* r = <uint64_t*>(rampsp->red)
- cdef uint64_t* g = <uint64_t*>(rampsp->green)
- cdef uint64_t* b = <uint64_t*>(rampsp->blue)
- for i in range(rampsp->red_size):
- red[i] = r[i]
- for i in range(rampsp->green_size):
- green[i] = r[i]
- for i in range(rampsp->blue_size):
- blue[i] = r[i]
- ramps = (rampsp->red_size, rampsp->green_size, rampsp->blue_size, red, green, blue)
+ for i in range(rampsp.red_size):
+ red[i] = (<uint64_t*>(rampsp.red))[i]
+ for i in range(rampsp.green_size):
+ green[i] = (<uint64_t*>(rampsp.green))[i]
+ for i in range(rampsp.blue_size):
+ blue[i] = (<uint64_t*>(rampsp.blue))[i]
+ ramps = (rampsp.red_size, rampsp.green_size, rampsp.blue_size, red, green, blue)
filters[i] = (int(table.filters[i].priority), fclass.decode('utf-8', 'strict'), ramps)
ret = (True, (int(table.red_size), int(table.green_size), int(table.blue_size),
- int(table.colourspace), int(table.depth), filters))
+ int(table.depth), filters))
finally:
libcoopgamma_filter_table_destroy(&table)
finally:
@@ -1639,12 +1656,13 @@ def libcoopgamma_native_set_gamma_recv(address : int, async : int):
'''
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_async_context_t* actx = <libcoopgamma_async_context_t*><void*><intptr_t>async
- if libcoopgamma_set_gamma_recv(&ctx, &actx) < 0:
+ cdef bytes bs
+ if libcoopgamma_set_gamma_recv(ctx, actx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- return (int(ctx->error.number), ctx->error.custom != 0, ctx->error.server_side != 0, desc)
+ return (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc)
return None
@@ -1666,6 +1684,7 @@ def libcoopgamma_native_set_gamma_sync(filtr, address : int):
'''
cdef libcoopgamma_context_t* ctx = <libcoopgamma_context_t*><void*><intptr_t>address
cdef libcoopgamma_filter_t flr
+ cdef bytes bs
crtc_bs = filtr.crtc.encode('utf-8') + bytes([0])
clss_bs = filtr.fclass.encode('utf-8') + bytes([0])
flr.priority = <int64_t>(filtr.priority)
@@ -1678,18 +1697,17 @@ def libcoopgamma_native_set_gamma_sync(filtr, address : int):
return int(errno)
flr.fclass = <char*>malloc(len(clss_bs) * sizeof(char))
if flr.fclass is NULL:
- saved_errno = int(errno)
- return saved_errno
+ return int(errno)
for i in range(len(crtc_bs)):
flr.crtc[i] = <char>(crtc_bs[i])
for i in range(len(clss_bs)):
flr.fclass[i] = <char>(clss_bs[i])
- if libcoopgamma_set_gamma_recv(&ctx, &actx) < 0:
+ if libcoopgamma_set_gamma_sync(&flr, ctx) < 0:
desc = None
- if ctx->error.description is not NULL:
- cdef bytes bs = ctx->error.description
+ if ctx.error.description is not NULL:
+ bs = ctx.error.description
desc = bs.decode('utf-8', 'strict')
- return (int(ctx->error.number), ctx->error.custom != 0, ctx->error.server_side != 0, desc)
+ return (int(ctx.error.number), ctx.error.custom != 0, ctx.error.server_side != 0, desc)
finally:
free(flr.crtc)
free(flr.fclass)