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, &copy))
+    if (!PyArg_ParseTuple(args, "OiO", &buffer, &copy, &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

Reply via email to