Skip to content

Commit

Permalink
swap the cython buffer implementation for a pure C one (fixes compila…
Browse files Browse the repository at this point in the history
…tion problems on win32)

git-svn-id: https://xpra.org/svn/Xpra/trunk@6252 3bb7dfac-3a0b-4e04-842a-767bc560f471
  • Loading branch information
totaam committed Apr 30, 2014
1 parent 386f6d0 commit 5b2b113
Show file tree
Hide file tree
Showing 23 changed files with 187 additions and 201 deletions.
7 changes: 5 additions & 2 deletions src/MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ include xpra/x11/bindings/constants.txt
include xpra/x11/gtk_x11/constants.txt
include xpra/codecs/inline.h
include xpra/codecs/inline.c
include xpra/codecs/memalign/memalign.h
include xpra/codecs/memalign/memalign.c
include xpra/codecs/buffers/memalign.h
include xpra/codecs/buffers/memalign.c
include xpra/codecs/buffers/buffers.h
include xpra/codecs/buffers/new_buffers.c
include xpra/codecs/buffers/old_buffers.c
include xpra/codecs/vpx/vpxlib.h
include xpra/codecs/vpx/vpxlib.c
include xpra/codecs/webm/LICENSE
Expand Down
70 changes: 30 additions & 40 deletions src/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@ def pkg_config_ok(*args, **kwargs):
webm_ENABLED = True
nvenc_ENABLED = pkg_config_ok("--exists", "nvenc3") #or os.path.exists("C:\\nvenc_3.0_windows_sdk")
csc_opencl_ENABLED = pkg_config_ok("--exists", "OpenCL")
buffers_ENABLED = True
memoryview_ENABLED = PYTHON3

warn_ENABLED = True
Expand All @@ -159,7 +158,7 @@ def pkg_config_ok(*args, **kwargs):
"csc_opencl", "csc_cython",
"vpx", "vpx_static",
"webp", "webm",
"buffers", "memoryview",
"memoryview",
"rencode", "bencode", "cython_bencode",
"clipboard",
"server", "client", "x11", "gtk_x11",
Expand Down Expand Up @@ -236,13 +235,6 @@ def pkg_config_ok(*args, **kwargs):
if not client_ENABLED and not server_ENABLED:
print("Error: you must build at least the client or server!")
exit(1)
if not buffers_ENABLED:
req_buffers = ("csc_cython", "csc_swscale", "dec_avcodec2", "vpx_ENABLED", "enc_x264", "enc_x265")
for mod in req_buffers:
v = vars()["%s_ENABLED" % mod]
if v:
print("Error: you must enable 'buffers' to build %s (or: %s)" % (mod, ", ".join([x for x in req_buffers if x!=mod])))
exit(1)
if memoryview_ENABLED and sys.version<"2.7":
print("Error: memoryview support requires Python version 2.7 or greater")
exit(1)
Expand Down Expand Up @@ -688,8 +680,6 @@ def pkgconfig(*pkgs_options, **ekw):
"xpra/x11/bindings/ximage.c",
"xpra/net/rencode/rencode.c",
"xpra/net/bencode/cython_bencode.c",
"xpra/codecs/buffers/new_buffers.c",
"xpra/codecs/buffers/old_buffers.c",
"xpra/codecs/vpx/encoder.c",
"xpra/codecs/vpx/decoder.c",
"xpra/codecs/nvenc/encoder.c",
Expand Down Expand Up @@ -841,7 +831,7 @@ def add_exe(script, icon, base_name, **kwargs):
appendScriptToExe = True,
appendScriptToLibrary = False,
**kwargs))

def add_console_exe(script, icon, base_name):
add_exe(script, icon, base_name, base="Console")
def add_gui_exe(script, icon, base_name):
Expand All @@ -868,12 +858,12 @@ def add_gui_exe(script, icon, base_name):
#with py2exe, we don't use py_modules, we use "packages"... sigh
#(and it is a little bit different too - see below)
del setup_options["py_modules"]

windows = []
setup_options["windows"] = windows
console = []
setup_options["console"] = console

def add_exe(tolist, script, icon, base_name):
tolist.append({ 'script' : script,
'icon_resources' : [(1, "win32/%s" % icon)],
Expand All @@ -883,7 +873,7 @@ def add_console_exe(*args):
def add_gui_exe(*args):
add_exe(windows, *args)

# Python2.7 was compiled with Visual Studio 2008:
# Python2.7 was compiled with Visual Studio 2008:
# (you can find the DLLs in various packages, including Visual Studio 2008,
# pywin32, etc...)
# This is where I keep them, you will obviously need to change this value
Expand Down Expand Up @@ -914,6 +904,7 @@ def add_gui_exe(*args):
add_gui_exe("xpra/gtk_common/gtk_view_clipboard.py","clipboard.ico", "GTK_Clipboard_Test")
#Console: provide an Xpra_cmd.exe we can run from the cmd.exe shell
add_console_exe("scripts/xpra", "xpra_txt.ico", "Xpra_cmd")
add_console_exe("xpra/net/net_util.py", "network.ico", "Network_info")
add_console_exe("win32/python_execfile.py", "python.ico", "Python_execfile")
add_console_exe("xpra/platform/win32/gui.py", "loop.ico", "Events_Test")
add_console_exe("xpra/codecs/loader.py", "encoding.ico", "Encoding_info")
Expand Down Expand Up @@ -1265,6 +1256,17 @@ def cython_add(*args, **kwargs):


#*******************************************************************************
#which file to link against (new-style buffers or old?):
if memoryview_ENABLED:
bmod = "new"
else:
assert not PYTHON3
bmod = "old"
buffers_c = "xpra/codecs/buffers/%s_buffers.c" % bmod
#convenience grouping for codecs:
membuffers_c = ["xpra/codecs/buffers/memalign.c", "xpra/codecs/inline.c", buffers_c]


toggle_packages(server_ENABLED, "xpra.server", "xpra.server.stats", "xpra.server.auth")
toggle_packages(server_ENABLED or gtk2_ENABLED or gtk3_ENABLED, "xpra.gtk_common", "xpra.clipboard")

Expand Down Expand Up @@ -1300,7 +1302,7 @@ def cython_add(*args, **kwargs):
**pkgconfig("xtst", "xfixes", "xcomposite", "xdamage")
))
cython_add(Extension("xpra.x11.bindings.ximage",
["xpra/x11/bindings/ximage.pyx"],
["xpra/x11/bindings/ximage.pyx", buffers_c],
**pkgconfig("xcomposite", "xdamage", "xext")
))

Expand Down Expand Up @@ -1328,7 +1330,7 @@ def cython_add(*args, **kwargs):
toggle_packages(argb_ENABLED, "xpra.codecs.argb")
if argb_ENABLED:
cython_add(Extension("xpra.codecs.argb.argb",
["xpra/codecs/argb/argb.pyx"]))
["xpra/codecs/argb/argb.pyx", buffers_c]))


if bundle_tests_ENABLED:
Expand Down Expand Up @@ -1359,7 +1361,7 @@ def cython_add(*args, **kwargs):

if cyxor_ENABLED:
cython_add(Extension("xpra.codecs.xor.cyxor",
["xpra/codecs/xor/cyxor.pyx"],
["xpra/codecs/xor/cyxor.pyx", buffers_c],
**pkgconfig()))

if cymaths_ENABLED:
Expand All @@ -1368,18 +1370,6 @@ def cython_add(*args, **kwargs):
**pkgconfig()))


#build buffer bits (needed for many csc modules and decoders):
toggle_packages(buffers_ENABLED, "xpra.codecs.buffers")
if buffers_ENABLED:
#new-style buffers or old?
if memoryview_ENABLED:
bmod = "new"
else:
bmod = "old"
cython_add(Extension("xpra.codecs.buffers.util",
["xpra/codecs/buffers/%s_buffers.pyx" % bmod]))


toggle_packages(csc_opencl_ENABLED, "xpra.codecs.csc_opencl")
toggle_packages(enc_proxy_ENABLED, "xpra.codecs.enc_proxy")

Expand All @@ -1392,43 +1382,43 @@ def cython_add(*args, **kwargs):
if "nvidia-encode" in libraries:
libraries.remove("nvidia-encode")
cython_add(Extension("xpra.codecs.nvenc.encoder",
["xpra/codecs/nvenc/encoder.pyx"],
["xpra/codecs/nvenc/encoder.pyx", buffers_c],
**nvenc_pkgconfig))

toggle_packages(enc_x264_ENABLED, "xpra.codecs.enc_x264")
if enc_x264_ENABLED:
x264_pkgconfig = pkgconfig("x264", static=x264_static_ENABLED)
cython_add(Extension("xpra.codecs.enc_x264.encoder",
["xpra/codecs/enc_x264/encoder.pyx"],
["xpra/codecs/enc_x264/encoder.pyx", buffers_c],
**x264_pkgconfig))

toggle_packages(enc_x265_ENABLED, "xpra.codecs.enc_x265")
if enc_x265_ENABLED:
x265_pkgconfig = pkgconfig("x265", static=x265_static_ENABLED)
cython_add(Extension("xpra.codecs.enc_x265.encoder",
["xpra/codecs/enc_x265/encoder.pyx"],
["xpra/codecs/enc_x265/encoder.pyx", buffers_c],
**x265_pkgconfig))

toggle_packages(webp_ENABLED, "xpra.codecs.webp")
if webp_ENABLED:
webp_pkgconfig = pkgconfig("webp")
cython_add(Extension("xpra.codecs.webp.encode",
["xpra/codecs/webp/encode.pyx"],
["xpra/codecs/webp/encode.pyx", buffers_c],
**webp_pkgconfig))

toggle_packages(dec_avcodec_ENABLED, "xpra.codecs.dec_avcodec")
if dec_avcodec_ENABLED:
make_constants("xpra", "codecs", "dec_avcodec", "constants")
avcodec_pkgconfig = pkgconfig("avcodec", "avutil", static=avcodec_static_ENABLED)
cython_add(Extension("xpra.codecs.dec_avcodec.decoder",
["xpra/codecs/dec_avcodec/decoder.pyx", "xpra/codecs/memalign/memalign.c", "xpra/codecs/inline.c"],
["xpra/codecs/dec_avcodec/decoder.pyx"]+membuffers_c,
**avcodec_pkgconfig))

toggle_packages(dec_avcodec2_ENABLED, "xpra.codecs.dec_avcodec2")
if dec_avcodec2_ENABLED:
avcodec2_pkgconfig = pkgconfig("avcodec", "avutil", static=avcodec2_static_ENABLED)
cython_add(Extension("xpra.codecs.dec_avcodec2.decoder",
["xpra/codecs/dec_avcodec2/decoder.pyx", "xpra/codecs/memalign/memalign.c", "xpra/codecs/inline.c"],
["xpra/codecs/dec_avcodec2/decoder.pyx"]+membuffers_c,
**avcodec2_pkgconfig))


Expand All @@ -1437,24 +1427,24 @@ def cython_add(*args, **kwargs):
make_constants("xpra", "codecs", "csc_swscale", "constants")
swscale_pkgconfig = pkgconfig("swscale", static=swscale_static_ENABLED)
cython_add(Extension("xpra.codecs.csc_swscale.colorspace_converter",
["xpra/codecs/csc_swscale/colorspace_converter.pyx", "xpra/codecs/memalign/memalign.c", "xpra/codecs/inline.c"],
["xpra/codecs/csc_swscale/colorspace_converter.pyx"]+membuffers_c,
**swscale_pkgconfig))

toggle_packages(csc_cython_ENABLED, "xpra.codecs.csc_cython")
if csc_cython_ENABLED:
csc_cython_pkgconfig = pkgconfig()
cython_add(Extension("xpra.codecs.csc_cython.colorspace_converter",
["xpra/codecs/csc_cython/colorspace_converter.pyx", "xpra/codecs/memalign/memalign.c"],
["xpra/codecs/csc_cython/colorspace_converter.pyx"]+membuffers_c,
**csc_cython_pkgconfig))

toggle_packages(vpx_ENABLED, "xpra.codecs.vpx")
if vpx_ENABLED:
vpx_pkgconfig = pkgconfig("vpx", static=vpx_static_ENABLED)
cython_add(Extension("xpra.codecs.vpx.encoder",
["xpra/codecs/vpx/encoder.pyx", "xpra/codecs/memalign/memalign.c"],
["xpra/codecs/vpx/encoder.pyx"]+membuffers_c,
**vpx_pkgconfig))
cython_add(Extension("xpra.codecs.vpx.decoder",
["xpra/codecs/vpx/decoder.pyx", "xpra/codecs/memalign/memalign.c"],
["xpra/codecs/vpx/decoder.pyx"]+membuffers_c,
**vpx_pkgconfig))


Expand Down
4 changes: 3 additions & 1 deletion src/xpra/codecs/argb/argb.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
cdef extern from "Python.h":
ctypedef int Py_ssize_t

from xpra.codecs.buffers.util cimport object_as_buffer, object_as_write_buffer
cdef extern from "../buffers/buffers.h":
int object_as_buffer(object obj, const void ** buffer, Py_ssize_t * buffer_len)
int object_as_write_buffer(object obj, const void ** buffer, Py_ssize_t * buffer_len)


import struct
Expand Down
13 changes: 13 additions & 0 deletions src/xpra/codecs/buffers/buffers.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/**
* This file is part of Xpra.
* Copyright (C) 2014 Antoine Martin <[email protected]>
* Xpra is released under the terms of the GNU GPL v2, or, at your option, any
* later version. See the file COPYING for details.
*/

#include "Python.h"

int get_version(void);
PyObject *memory_as_pybuffer(void* ptr, Py_ssize_t buf_len, int readonly);
int object_as_buffer(PyObject *obj, const void ** buffer, Py_ssize_t * buffer_len);
int object_as_write_buffer(PyObject *obj, void ** buffer, Py_ssize_t * buffer_len);
File renamed without changes.
File renamed without changes.
51 changes: 51 additions & 0 deletions src/xpra/codecs/buffers/new_buffers.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/**
* This file is part of Xpra.
* Copyright (C) 2014 Antoine Martin <[email protected]>
* Xpra is released under the terms of the GNU GPL v2, or, at your option, any
* later version. See the file COPYING for details.
*/

#include "Python.h"

int get_version(void) {
return 1;
}

PyObject *memory_as_pybuffer(void *ptr, Py_ssize_t buf_len, int readonly) {
Py_buffer pybuf;
Py_ssize_t shape[] = {buf_len};
int ret;
if (readonly)
ret = PyBuffer_FillInfo(&pybuf, NULL, ptr, buf_len, 0, PyBUF_SIMPLE);
else
ret = PyBuffer_FillInfo(&pybuf, NULL, ptr, buf_len, 0, PyBUF_WRITABLE);
if (ret!=0)
return NULL;
pybuf.format = "B";
pybuf.shape = shape;
return PyMemoryView_FromBuffer(&pybuf);
}

int object_as_buffer(PyObject *obj, const void ** buffer, Py_ssize_t * buffer_len) {
Py_buffer *rpybuf;
if (PyMemoryView_Check(obj)) {
rpybuf = PyMemoryView_GET_BUFFER(obj);
if (rpybuf->buf==NULL)
return 1;
buffer[0] = rpybuf->buf;
return 0;
}
return PyObject_AsReadBuffer(obj, buffer, buffer_len);
}

int object_as_write_buffer(PyObject *obj, void ** buffer, Py_ssize_t * buffer_len) {
Py_buffer *wpybuf;
if (PyMemoryView_Check(obj)) {
wpybuf = PyMemoryView_GET_BUFFER(obj);
if (wpybuf->buf==NULL)
return 1;
buffer[0] = wpybuf->buf;
return 0;
}
return PyObject_AsWriteBuffer(obj, buffer, buffer_len);
}
77 changes: 0 additions & 77 deletions src/xpra/codecs/buffers/new_buffers.pyx

This file was deleted.

Loading

0 comments on commit 5b2b113

Please sign in to comment.