Author: tack
Date: Sun May 27 23:09:07 2007
New Revision: 2691
Modified:
trunk/evas/src/__init__.py
trunk/evas/src/image.c
trunk/evas/src/image.h
Log:
Support stride option on data_set and import.
Modified: trunk/evas/src/__init__.py
==============================================================================
--- trunk/evas/src/__init__.py (original)
+++ trunk/evas/src/__init__.py Sun May 27 23:09:07 2007
@@ -324,8 +324,9 @@
def reload(self):
return self._object.image_reload()
- def data_set(self, data, copy = -1):
- return self._object.image_data_set(data, copy)
+ def data_set(self, data, copy = -1, stride = None):
+ # Stride is only relevant for YUV colorspace
+ return self._object.image_data_set(data, copy, stride)
def data_get(self, for_writing = True):
return self._object.image_data_get(for_writing)
@@ -339,8 +340,10 @@
def pixels_dirty_get(self):
return self._object.image_pixels_dirty_get()
- def pixels_import(self, data, w, h, format):
- return self._object.image_pixels_import(data, w, h, format)
+ def pixels_import(self, data, w, h, format, stride = None):
+ if not stride:
+ stride = w
+ return self._object.image_pixels_import(data, w, h, format, stride)
def colorspace_set(self, colorspace):
return self._object.image_colorspace_set(colorspace)
Modified: trunk/evas/src/image.c
==============================================================================
--- trunk/evas/src/image.c (original)
+++ trunk/evas/src/image.c Sun May 27 23:09:07 2007
@@ -54,9 +54,9 @@
}
static void **
-_yuv_planes_to_rows(PyObject *data, int w, int h)
+_yuv_planes_to_rows(PyObject *data, int w, int h, int stride)
{
- int i, stride, plane;
+ int i, plane;
void **rows;
void *p, *planes[3] = {0, 0, 0};
/* Data can be a single buffer/int pointing to memory that holds each
@@ -65,8 +65,8 @@
if (!PyTuple_Check(data)) {
if ((planes[0] = get_ptr_from_pyobject(data, NULL)) == 0)
return NULL;
- planes[1] = planes[0] + (w * h);
- planes[2] = planes[1] + ((w * h) >> 2);
+ planes[1] = planes[0] + (stride * h);
+ planes[2] = planes[1] + ((stride * h) >> 2);
//printf("Planes (%d,%d) 0=%u 1=%u 2=%u\n", ps.w, ps.h, planes[0],
planes[1], planes[2]);
} else {
if (PySequence_Length(data) != 3) {
@@ -81,7 +81,6 @@
}
}
rows = malloc(h * 2 * sizeof(void *));
- stride = w;
for (i = 0, plane = 0, p = planes[0]; i < h * 2; i++) {
rows[i] = p;
if (i == h)
@@ -314,21 +313,25 @@
/****************************************************************************/
PyObject *
-Evas_Object_PyObject_image_data_set(Evas_Object_PyObject * self, PyObject *
args)
+Evas_Object_PyObject_image_data_set(Evas_Object_PyObject * self, PyObject *
args, PyObject *kwargs)
{
- PyObject *buffer;
+ PyObject *buffer, *stride;
void *data;
int len, result, is_write_buffer = 0, copy;
- if (!PyArg_ParseTuple(args, "Oi", &buffer, ©))
+ if (!PyArg_ParseTuple(args, "OiO", &buffer, ©, &stride))
return NULL;
if (PyNumber_Check(buffer)) {
int cspace = evas_object_image_colorspace_get(self->object);
if (cspace == EVAS_COLORSPACE_YCBCR422P601_PL || cspace ==
EVAS_COLORSPACE_YCBCR422P709_PL) {
int w, h;
+ if (!PyNumber_Check(stride)) {
+ PyErr_SetString(PyExc_ValueError, "stride parameter is not an
integer");
+ return NULL;
+ }
evas_object_image_size_get(self->object, &w, &h);
- data = _yuv_planes_to_rows(buffer, w, h);
+ data = _yuv_planes_to_rows(buffer, w, h, PyLong_AsLong(stride));
is_write_buffer = 1;
} else {
is_write_buffer = 1;
@@ -431,8 +434,7 @@
}
PyObject *
-Evas_Object_PyObject_image_pixels_import(Evas_Object_PyObject * self,
- PyObject * args)
+Evas_Object_PyObject_image_pixels_import(Evas_Object_PyObject * self, PyObject
* args, PyObject *kwargs)
{
Evas_Pixel_Import_Source ps;
PyObject *data;
@@ -441,9 +443,13 @@
if (!PyArg_ParseTuple(args, "Oiii", &data, &ps.w, &ps.h, &ps.format))
return NULL;
-
if (ps.format == EVAS_PIXEL_FORMAT_YUV420P_601) {
- ps.rows = _yuv_planes_to_rows(data, ps.w, ps.h);
+ PyObject *stride = PyDict_GetItemString(kwargs, "stride");
+ if (!stride || !PyNumber_Check(stride)) {
+ PyErr_SetString(PyExc_ValueError, "stride parameter is missing or
not an integer");
+ return NULL;
+ }
+ ps.rows = _yuv_planes_to_rows(data, ps.w, ps.h, PyLong_AsLong(stride));
BENCH_START
result = evas_object_image_pixels_import(self->object, &ps);
BENCH_END
Modified: trunk/evas/src/image.h
==============================================================================
--- trunk/evas/src/image.h (original)
+++ trunk/evas/src/image.h Sun May 27 23:09:07 2007
@@ -52,7 +52,7 @@
PyObject *Evas_Object_PyObject_image_smooth_scale_set(Evas_Object_PyObject *,
PyObject *);
PyObject *Evas_Object_PyObject_image_smooth_scale_get(Evas_Object_PyObject *,
PyObject *);
-PyObject *Evas_Object_PyObject_image_data_set(Evas_Object_PyObject *, PyObject
*);
+PyObject *Evas_Object_PyObject_image_data_set(Evas_Object_PyObject *, PyObject
*, PyObject *);
PyObject *Evas_Object_PyObject_image_data_get(Evas_Object_PyObject *, PyObject
*);
PyObject *Evas_Object_PyObject_image_data_update_add(Evas_Object_PyObject *,
PyObject *);
@@ -61,7 +61,7 @@
PyObject *Evas_Object_PyObject_image_pixels_dirty_set(Evas_Object_PyObject *,
PyObject *);
PyObject *Evas_Object_PyObject_image_pixels_dirty_get(Evas_Object_PyObject *,
PyObject *);
-PyObject *Evas_Object_PyObject_image_pixels_import(Evas_Object_PyObject *,
PyObject *);
+PyObject *Evas_Object_PyObject_image_pixels_import(Evas_Object_PyObject *,
PyObject *, PyObject *);
PyObject *Evas_Object_PyObject_image_colorspace_set(Evas_Object_PyObject *,
PyObject *);
PyObject *Evas_Object_PyObject_image_colorspace_get(Evas_Object_PyObject *,
PyObject *);
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog