Port all buffer related code to the new Shiboken buffer interface.
Reviewer: Renato Araújo <renato.filho@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
This commit is contained in:
parent
7109418dbe
commit
f1c7c78694
3 changed files with 36 additions and 66 deletions
|
|
@ -518,9 +518,9 @@
|
||||||
<replace-type modified-type="PyObject" />
|
<replace-type modified-type="PyObject" />
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
const uchar* d = %CPPSELF.%FUNCTION_NAME();
|
const void* d = %CPPSELF.%FUNCTION_NAME();
|
||||||
if (d) {
|
if (d) {
|
||||||
%PYARG_0 = PyBuffer_FromMemory(const_cast<uchar*>(d), %CPPSELF.size());
|
%PYARG_0 = Shiboken::Buffer::newObject(d, %CPPSELF.size());
|
||||||
} else {
|
} else {
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
%PYARG_0 = Py_None;
|
%PYARG_0 = Py_None;
|
||||||
|
|
@ -528,21 +528,13 @@
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<template name="QResource_registerResource">
|
<template name="QResource_registerResource">
|
||||||
PyTypeObject* pyType = %PYARG_1->ob_type;
|
uchar* ptr = (uchar*) Shiboken::Buffer::getPointer(%PYARG_1);
|
||||||
if (pyType->tp_as_buffer
|
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(const_cast<const uchar*>(ptr), %2));
|
||||||
&& pyType->tp_as_buffer->bf_getreadbuffer
|
|
||||||
&& pyType->tp_as_buffer->bf_getsegcount(%PYARG_1, 0) == 1) {
|
|
||||||
void* ptr;
|
|
||||||
pyType->tp_as_buffer->bf_getreadbuffer(%PYARG_1, 0, &ptr);
|
|
||||||
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(const_cast<const uchar*>((uchar*)ptr), %2));
|
|
||||||
} else {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "The object must support buffer protocol with just one segment.");
|
|
||||||
}
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<modify-function signature="unregisterResource(const uchar*, const QString&)" rename="unregisterResourceData">
|
<modify-function signature="unregisterResource(const uchar*, const QString&)" rename="unregisterResourceData">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
<insert-template name="QResource_registerResource" />
|
<insert-template name="QResource_registerResource" />
|
||||||
|
|
@ -550,7 +542,7 @@
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="registerResource(const uchar*, const QString&)" rename="registerResourceData">
|
<modify-function signature="registerResource(const uchar*, const QString&)" rename="registerResourceData">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
<insert-template name="QResource_registerResource" />
|
<insert-template name="QResource_registerResource" />
|
||||||
|
|
@ -1968,15 +1960,13 @@
|
||||||
<replace-type modified-type="PyBuffer"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
const void* ptr;
|
uchar* ptr = (uchar*) Shiboken::Buffer::getPointer(%PYARG_1);
|
||||||
Py_ssize_t len;
|
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(ptr));
|
||||||
PyObject_AsReadBuffer(%PYARG_1, &ptr, &len);
|
|
||||||
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME((uchar*)ptr));
|
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="map(qint64,qint64,QFile::MemoryMapFlags)">
|
<modify-function signature="map(qint64,qint64,QFile::MemoryMapFlags)">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromReadWriteMemory(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2);
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2, Shiboken::Buffer::ReadWrite);
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="remove()" allow-thread="yes"/>
|
<modify-function signature="remove()" allow-thread="yes"/>
|
||||||
|
|
@ -2175,22 +2165,15 @@
|
||||||
<object-type name="QTranslator">
|
<object-type name="QTranslator">
|
||||||
<modify-function signature="load(const uchar*, int)">
|
<modify-function signature="load(const uchar*, int)">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyObject" />
|
<replace-type modified-type="PyBuffer" />
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<modify-argument index="2">
|
<modify-argument index="2">
|
||||||
<remove-argument />
|
<remove-argument />
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
PyTypeObject* pyType = %PYARG_1->ob_type;
|
Py_ssize_t size;
|
||||||
if (pyType->tp_as_buffer
|
uchar* ptr = (uchar*) Shiboken::Buffer::getPointer(%PYARG_1, &size);
|
||||||
&& pyType->tp_as_buffer->bf_getreadbuffer
|
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(const_cast<const uchar*>(ptr), size));
|
||||||
&& pyType->tp_as_buffer->bf_getsegcount(%PYARG_1, 0) == 1) {
|
|
||||||
void* ptr;
|
|
||||||
Py_ssize_t size = pyType->tp_as_buffer->bf_getreadbuffer(%PYARG_1, 0, &ptr);
|
|
||||||
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(const_cast<const uchar*>((uchar*)ptr), size));
|
|
||||||
} else {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "The object must support buffer protocol with just one segment.");
|
|
||||||
}
|
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
</object-type>
|
</object-type>
|
||||||
|
|
@ -2309,15 +2292,13 @@
|
||||||
<replace-type modified-type="PyBuffer"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
const void* ptr;
|
uchar* ptr = (uchar*)Shiboken::Buffer::getPointer(%PYARG_1);
|
||||||
Py_ssize_t len;
|
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME(ptr));
|
||||||
PyObject_AsReadBuffer(%PYARG_1, &ptr, &len);
|
|
||||||
%PYARG_0 = %CONVERTTOPYTHON[bool](%CPPSELF.%FUNCTION_NAME((uchar*)ptr));
|
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="map(qint64,qint64,QFile::MemoryMapFlags)">
|
<modify-function signature="map(qint64,qint64,QFile::MemoryMapFlags)">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromReadWriteMemory(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2);
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2, Shiboken::Buffer::ReadWrite);
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
|
|
||||||
|
|
@ -2983,8 +2964,8 @@
|
||||||
</object-type>
|
</object-type>
|
||||||
|
|
||||||
<!-- We will use inject code to implement the function below -->
|
<!-- We will use inject code to implement the function below -->
|
||||||
<rejection class="QEasingCurve" function-name="setCustomType" />
|
<rejection class="QEasingCurve" function-name="setCustomType" />
|
||||||
<rejection class="QEasingCurve" function-name="customType" />
|
<rejection class="QEasingCurve" function-name="customType" />
|
||||||
<value-type name="QEasingCurve" since="4.6">
|
<value-type name="QEasingCurve" since="4.6">
|
||||||
<extra-includes>
|
<extra-includes>
|
||||||
<include file-name="pysideweakref.h" location="global"/>
|
<include file-name="pysideweakref.h" location="global"/>
|
||||||
|
|
|
||||||
|
|
@ -415,13 +415,11 @@
|
||||||
<value-type name="QBitmap" >
|
<value-type name="QBitmap" >
|
||||||
<modify-function signature="fromData(QSize,const uchar*,QImage::Format)">
|
<modify-function signature="fromData(QSize,const uchar*,QImage::Format)">
|
||||||
<modify-argument index="2">
|
<modify-argument index="2">
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
const void* buffer;
|
uchar* buffer = (uchar*) Shiboken::Buffer::getPointer(%PYARG_2);
|
||||||
Py_ssize_t size;
|
%PYARG_0 = %CONVERTTOPYTHON[QBitmap](QBitmap::fromData(%1, buffer, %3));
|
||||||
if (PyObject_AsReadBuffer(%PYARG_2, &buffer, &size) != -1)
|
|
||||||
%PYARG_0 = %CONVERTTOPYTHON[QBitmap](QBitmap::fromData(%1, (const uchar*)buffer, %3));
|
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
</value-type>
|
</value-type>
|
||||||
|
|
@ -553,25 +551,24 @@
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyObject"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromMemory(const_cast<char*>(%CPPSELF.data()), %CPPSELF.size());
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.data(), %CPPSELF.size());
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="setData(const char*,uint)">
|
<modify-function signature="setData(const char*,uint)">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyBuffer"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
<conversion-rule class="target">
|
<conversion-rule class="target">
|
||||||
PyObject *%out = PyBuffer_FromMemory(const_cast<char*>(%in), size);
|
PyObject* %out = Shiboken::Buffer::newObject(%in, size);
|
||||||
</conversion-rule>
|
</conversion-rule>
|
||||||
<conversion-rule class="native">
|
<conversion-rule class="native">
|
||||||
const char *%out;
|
Py_ssize_t bufferLen;
|
||||||
Py_ssize_t buffer_len;
|
char* %out = (char*) Shiboken::Buffer::getPointer(arg, &bufferLen);
|
||||||
PyObject_AsCharBuffer(arg, &%out, &buffer_len);
|
|
||||||
</conversion-rule>
|
</conversion-rule>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<modify-argument index="2">
|
<modify-argument index="2">
|
||||||
<remove-argument/>
|
<remove-argument/>
|
||||||
<conversion-rule class="native">
|
<conversion-rule class="native">
|
||||||
uint %out = buffer_len;
|
uint %out = bufferLen;
|
||||||
</conversion-rule>
|
</conversion-rule>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
|
|
@ -975,20 +972,12 @@
|
||||||
</extra-includes>
|
</extra-includes>
|
||||||
|
|
||||||
<template name="qimage_buffer_constructor">
|
<template name="qimage_buffer_constructor">
|
||||||
PyTypeObject* pyType = reinterpret_cast<PyTypeObject*>(%PYARG_1->ob_type);
|
uchar* ptr = (uchar*) Shiboken::Buffer::getPointer(%PYARG_1);
|
||||||
if (pyType->tp_as_buffer
|
%0 = new %TYPE(ptr, %ARGS);
|
||||||
&& pyType->tp_as_buffer->bf_getreadbuffer
|
|
||||||
&& pyType->tp_as_buffer->bf_getsegcount(%PYARG_1, 0) == 1) {
|
|
||||||
void* ptr;
|
|
||||||
pyType->tp_as_buffer->bf_getreadbuffer(%PYARG_1, 0, &ptr);
|
|
||||||
%0 = new %TYPE((uchar*)ptr, %ARGS);
|
|
||||||
} else {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "The object must support buffer protocol with just one segment.");
|
|
||||||
}
|
|
||||||
</template>
|
</template>
|
||||||
<modify-function signature="QImage(uchar *,int,int,int,QImage::Format)">
|
<modify-function signature="QImage(uchar *,int,int,int,QImage::Format)">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
<insert-template name="qimage_buffer_constructor">
|
<insert-template name="qimage_buffer_constructor">
|
||||||
|
|
@ -998,7 +987,7 @@
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="QImage(uchar*,int,int,QImage::Format)">
|
<modify-function signature="QImage(uchar*,int,int,QImage::Format)">
|
||||||
<modify-argument index="1">
|
<modify-argument index="1">
|
||||||
<replace-type modified-type="PyObject"/>
|
<replace-type modified-type="PyBuffer"/>
|
||||||
</modify-argument>
|
</modify-argument>
|
||||||
<inject-code>
|
<inject-code>
|
||||||
<insert-template name="qimage_buffer_constructor">
|
<insert-template name="qimage_buffer_constructor">
|
||||||
|
|
@ -1054,23 +1043,23 @@
|
||||||
|
|
||||||
<modify-function signature="constBits()const" since="4.7">
|
<modify-function signature="constBits()const" since="4.7">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromMemory(const_cast<uchar*>(%CPPSELF.%FUNCTION_NAME()), %CPPSELF.byteCount());
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.byteCount());
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="bits()">
|
<modify-function signature="bits()">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
// byteCount() is only available on Qt4.7, so we use bytesPerLine * height
|
// byteCount() is only available on Qt4.7, so we use bytesPerLine * height
|
||||||
%PYARG_0 = PyBuffer_FromReadWriteMemory(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.bytesPerLine() * %CPPSELF.height());
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(), %CPPSELF.bytesPerLine() * %CPPSELF.height(), Shiboken::Buffer::ReadWrite);
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="constScanLine(int)const" since="4.7">
|
<modify-function signature="constScanLine(int)const" since="4.7">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromMemory(const_cast<uchar*>(%CPPSELF.%FUNCTION_NAME(%1)), %CPPSELF.bytesPerLine());
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine());
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<modify-function signature="scanLine(int)">
|
<modify-function signature="scanLine(int)">
|
||||||
<inject-code>
|
<inject-code>
|
||||||
%PYARG_0 = PyBuffer_FromReadWriteMemory(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine());
|
%PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine(), Shiboken::Buffer::ReadWrite);
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
<!--
|
<!--
|
||||||
|
|
|
||||||
|
|
@ -130,9 +130,9 @@
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
%PYARG_0 = Py_None;
|
%PYARG_0 = Py_None;
|
||||||
} else if (%1 == QGLBuffer::ReadOnly) {
|
} else if (%1 == QGLBuffer::ReadOnly) {
|
||||||
%PYARG_0 = PyBuffer_FromMemory(data, dataSize);
|
%PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadOnly);
|
||||||
} else {
|
} else {
|
||||||
%PYARG_0 = PyBuffer_FromReadWriteMemory(data, dataSize);
|
%PYARG_0 = Shiboken::Buffer::newObject(data, dataSize, Shiboken::Buffer::ReadWrite);
|
||||||
}
|
}
|
||||||
</inject-code>
|
</inject-code>
|
||||||
</modify-function>
|
</modify-function>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue