Hey guys,

Some of you know that I am trying to get directfb on evas working. Attached is my evas patch in case anyone wants to hack around and help out. Right now I am testing it by playing with kaa.canvas and am running into some problems. Also, I had problems building evas's directfb suport into kaa.evas and had to remove some defines (maybe I should see why now).

In case anyone is feeling like fixing broken code here's my patch. The latest segfault is actually occurring in imlib2. Here's the backtrace from dfbtest.py in kaa.canvas:

#0  0xb7e3d060 in free () from /lib/tls/libc.so.6
#1  0xb7e3ec4f in malloc () from /lib/tls/libc.so.6
#2  0xb784e383 in __imlib_ProduceImage () at image.c:145
#3 0xb784f2fb in __imlib_CreateImage (w=976, h=976, data=0x3d0) at image.c:952 #4 0xb784797d in imlib_render_str (im=0x829f3d8, fn=0x829aee8, drx=0, dry=0, text=0xb73b77b4 "H ", r=255 '', g=255 '', b=255 '', a=255 '', dir=0 '\0', angle=0, retw=0xbf943e44, reth=0xbf943e48, blur=0, nextx=0xbf943e4c, nexty=0xbf943e50,
    op=OP_COPY, clx=0, cly=0, clw=0, clh=0) at font_draw.c:89
#5 0xb7836781 in imlib_text_draw_with_return_metrics (x=0, y=0, text=0xb73b77b4 "H ", width_return=0x0, height_return=0x0, horizontal_advance_return=0x0, vertical_advance_return=0x0) at api.c:3131 #6 0xb78c90b4 in Image_PyObject__draw_text (self=0x0, args=0x0) at src/image.c:430
#7  0x080b9485 in PyEval_EvalFrame ()


I don't know where that w=976, h=976 is comming from, we only have an 800x600 surface and background heree - could be why it's crashing.

Any help is welcome. :)
-Rob

Index: src/modules/engines/directfb/evas_engine_dfb.c
===================================================================
RCS file: 
/var/cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb.c,v
retrieving revision 1.8
diff -u -r1.8 evas_engine_dfb.c
--- src/modules/engines/directfb/evas_engine_dfb.c      17 Oct 2006 10:36:36 
-0000      1.8
+++ src/modules/engines/directfb/evas_engine_dfb.c      16 Jan 2007 04:36:55 
-0000
@@ -80,6 +80,10 @@
    evas_engine_directfb_image_draw,
    evas_engine_directfb_image_comment_get,
    evas_engine_directfb_image_format_get,
+   evas_engine_directfb_image_colorspace_set,
+   evas_engine_directfb_image_colorspace_get,
+   evas_engine_directfb_image_native_set,
+   evas_engine_directfb_image_native_get,
 
    evas_engine_directfb_image_cache_flush,
    evas_engine_directfb_image_cache_set,
@@ -771,7 +775,7 @@
  *
  * */
 void *
-eng_gradient_new(void *data)
+evas_engine_directfb_gradient_new(void *data)
 {
    return evas_common_gradient_new();
 }
@@ -914,10 +918,10 @@
    re = (Render_Engine *)data;
    if (!context || !gradient)  return 0;
    return 1;
- }
+}
 
-static void
-eng_gradient_render_pre(void *data, void *context, void *gradient)
+void
+evas_engine_directfb_gradient_render_pre(void *data, void *context, void 
*gradient)
 {
    int  len;
    Render_Engine *re;
@@ -930,8 +934,8 @@
    evas_common_gradient_map(context, gradient, len);
 }
 
-static void
-eng_gradient_render_post(void *data, void *gradient)
+void
+evas_engine_directfb_gradient_render_post(void *data, void *gradient)
 {
 }
 
@@ -965,7 +969,7 @@
  * */
 
 void        *
-evas_engine_directfb_font_load(void *data, char *name, int size)
+evas_engine_directfb_font_load(void *data, const char *name, int size)
 {
    Render_Engine      *re;
 
@@ -983,7 +987,7 @@
 }
 
 void *
-evas_engine_directfb_font_add(void *data, void *font, char *name, int size)
+evas_engine_directfb_font_add(void *data, void *font, const char *name, int 
size)
 {
    Render_Engine *re;
 
@@ -1047,7 +1051,7 @@
 }
 
 void
-evas_engine_directfb_font_string_size_get(void *data, void *font, char *text,
+evas_engine_directfb_font_string_size_get(void *data, void *font, const char 
*text,
                                          int *w, int *h)
 {
    Render_Engine      *re;
@@ -1057,7 +1061,7 @@
 }
 
 int
-evas_engine_directfb_font_inset_get(void *data, void *font, char *text)
+evas_engine_directfb_font_inset_get(void *data, void *font, const char *text)
 {
    Render_Engine      *re;
 
@@ -1066,7 +1070,7 @@
 }
 
 int
-evas_engine_directfb_font_h_advance_get(void *data, void *font, char *text)
+evas_engine_directfb_font_h_advance_get(void *data, void *font, const char 
*text)
 {
    Render_Engine      *re;
    int                 h, v;
@@ -1077,7 +1081,7 @@
 }
 
 int
-evas_engine_directfb_font_v_advance_get(void *data, void *font, char *text)
+evas_engine_directfb_font_v_advance_get(void *data, void *font, const char 
*text)
 {
    Render_Engine      *re;
    int                 h, v;
@@ -1088,7 +1092,7 @@
 }
 
 int
-evas_engine_directfb_font_char_coords_get(void *data, void *font, char *text,
+evas_engine_directfb_font_char_coords_get(void *data, void *font, const char 
*text,
                                          int pos, int *cx, int *cy, int *cw,
                                          int *ch)
 {
@@ -1099,7 +1103,7 @@
 }
 
 int
-evas_engine_directfb_font_char_at_coords_get(void *data, void *font, char 
*text,
+evas_engine_directfb_font_char_at_coords_get(void *data, void *font, const 
char *text,
                                             int x, int y, int *cx, int *cy,
                                             int *cw, int *ch)
 {
@@ -1112,7 +1116,7 @@
 void
 evas_engine_directfb_font_draw(void *data, void *context, void *surface,
                               void *font, int x, int y, int w, int h, int ow,
-                              int oh, char *text)
+                              int oh, const char *text)
 {
    Render_Engine *re;
    void *p;
Index: src/modules/engines/directfb/evas_engine_dfb.h
===================================================================
RCS file: 
/var/cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb.h,v
retrieving revision 1.4
diff -u -r1.4 evas_engine_dfb.h
--- src/modules/engines/directfb/evas_engine_dfb.h      30 Sep 2006 10:18:34 
-0000      1.4
+++ src/modules/engines/directfb/evas_engine_dfb.h      16 Jan 2007 04:36:55 
-0000
@@ -152,15 +152,18 @@
 void               evas_engine_directfb_gradient_draw(void *data, void 
*context, void *surface,
                                                       void *gradient, int x, 
int y, int w, int h);
 
-void               *evas_engine_directfb_font_load(void *data, char *name,
+void               *evas_engine_directfb_font_load(void *data, const char 
*name,
                                                   int size);
 void               *evas_engine_directfb_font_memory_load(void *data,
                                                          char *name,
                                                          int size,
                                                          const void *fdata,
                                                          int fdata_size);
-void *evas_engine_directfb_font_add(void *data, void *font, char *name, int 
size);
-void *evas_engine_directfb_font_memory_add(void *data, void *font, char *name, 
int size, const void *fdata, int fdata_size);
+void                *evas_engine_directfb_font_add(void *data, void *font, 
const char *name, int size);
+void                *evas_engine_directfb_font_memory_add(void *data, void 
*font, 
+                                                         char *name, int size, 
+                                                         const void *fdata, 
+                                                         int fdata_size);
 void                evas_engine_directfb_font_free(void *data, void *font);
 int                 evas_engine_directfb_font_ascent_get(void *data,
                                                         void *font);
@@ -172,25 +175,25 @@
                                                              void *font);
 void                evas_engine_directfb_font_string_size_get(void *data,
                                                              void *font,
-                                                             char *text,
+                                                             const char *text,
                                                              int *w, int *h);
 int                 evas_engine_directfb_font_inset_get(void *data, void *font,
-                                                       char *text);
+                                                       const char *text);
 int                 evas_engine_directfb_font_h_advance_get(void *data,
                                                            void *font,
-                                                           char *text);
+                                                           const char *text);
 int                 evas_engine_directfb_font_v_advance_get(void *data,
                                                            void *font,
-                                                           char *text);
+                                                           const char *text);
 int                 evas_engine_directfb_font_char_coords_get(void *data,
                                                              void *font,
-                                                             char *text,
+                                                             const char *text,
                                                              int pos, int *cx,
                                                              int *cy, int *cw,
                                                              int *ch);
 int                 evas_engine_directfb_font_char_at_coords_get(void *data,
                                                                 void *font,
-                                                                char *text,
+                                                                const char 
*text,
                                                                 int x, int y,
                                                                 int *cx,
                                                                 int *cy,
@@ -199,7 +202,7 @@
 void                evas_engine_directfb_font_draw(void *data, void *context,
                                                   void *surface, void *font,
                                                   int x, int y, int w, int h,
-                                                  int ow, int oh, char *text);
+                                                  int ow, int oh, const char 
*text);
 void                evas_engine_directfb_font_cache_flush(void *data);
 void                evas_engine_directfb_font_cache_set(void *data, int bytes);
 int                 evas_engine_directfb_font_cache_get(void *data);
Index: src/modules/engines/directfb/evas_engine_dfb_image_objects.c
===================================================================
RCS file: 
/var/cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb_image_objects.c,v
retrieving revision 1.8
diff -u -r1.8 evas_engine_dfb_image_objects.c
--- src/modules/engines/directfb/evas_engine_dfb_image_objects.c        17 Dec 
2006 15:48:51 -0000      1.8
+++ src/modules/engines/directfb/evas_engine_dfb_image_objects.c        16 Jan 
2007 04:36:55 -0000
@@ -28,7 +28,7 @@
  */
 
 void               *
-evas_engine_directfb_image_load(void *data, char *file, char *key, int *error, 
Evas_Image_Load_Opts *lo)
+evas_engine_directfb_image_load(void *data, const char *file, const char *key, 
int *error, Evas_Image_Load_Opts *lo)
 {
    Render_Engine      *re;
    DFBSurfaceDescription dsc;
@@ -99,13 +99,14 @@
                                         DATA32 * image_data, int alpha, int 
cspace)
 {
    /* FIXME document this peculiarity */
-   return evas_engine_directfb_image_new_from_copied_data(data, w, h, 
image_data);
+   return evas_engine_directfb_image_new_from_copied_data(data, w, h, 
image_data, alpha, cspace);
 }
 
 void               *
 evas_engine_directfb_image_new_from_copied_data(void *data, int w, int h,
                                                DATA32 * image_data, int alpha, 
int cspace)
 {
+   /* FIXME use alpha and cspace here or not? */
 
    Render_Engine      *re;
    RGBA_Image         *im = NULL;
@@ -116,7 +117,7 @@
    re = (Render_Engine *) data;
    im = _dfb_image_create(re, w, h);
 
-   if (im)
+   if (im && image_data)
    {
       surf = (IDirectFBSurface *) im->image->data;
       if (surf->Lock(surf, DSLF_WRITE, &p, &pitch) == DFB_OK)
@@ -164,7 +165,7 @@
 
    re = (Render_Engine *) data;
    im_old = image;
-   im = _dfb_image_create(re, w,h);
+   im = _dfb_image_create(re, w, h);
    old_surf = (IDirectFBSurface *) im_old->image->data;
    if (im)
      {
@@ -235,7 +236,8 @@
        w = im->image->w;
        h = im->image->h;
        _dfb_image_unref(im);
-       return evas_engine_directfb_image_new_from_data(data, w, h, image_data);
+        /* FIXME alpha and cspace (0, 0) is not used here yet */
+       return evas_engine_directfb_image_new_from_data(data, w, h, image_data, 
0, 0);
      }
    _dfb_image_dirty(im);
 
@@ -539,8 +541,31 @@
    return NULL;
 }
 
+void
+evas_engine_directfb_image_colorspace_set(void *data, void *image, int cspace)
+{
+   /* FIXME impliment image_colorspace_set */
+}
 
+int
+evas_engine_directfb_image_colorspace_get(void *data, void *image)
+{
+   /* FIXME impliment image_colorspace_get */
+   return 0;
+}
 
+void
+evas_engine_directfb_image_native_set(void *data, void *image, void *native)
+{
+   /* FIXME impliment image_native_set */
+}
+
+void               *
+evas_engine_directfb_image_native_get(void *data, void *image)
+{
+   /* FIXME impliment image_native_get */
+   return NULL;
+}
 
 /*
  * Private routines. These are slightly modified versions of the ones in
Index: src/modules/engines/directfb/evas_engine_dfb_image_objects.h
===================================================================
RCS file: 
/var/cvs/e/e17/libs/evas/src/modules/engines/directfb/evas_engine_dfb_image_objects.h,v
retrieving revision 1.3
diff -u -r1.3 evas_engine_dfb_image_objects.h
--- src/modules/engines/directfb/evas_engine_dfb_image_objects.h        18 Aug 
2006 14:45:25 -0000      1.3
+++ src/modules/engines/directfb/evas_engine_dfb_image_objects.h        16 Jan 
2007 04:36:55 -0000
@@ -1,16 +1,16 @@
 #ifndef EVAS_ENGINE_DFB_IMAGE_OBJECTS_H
 #define EVAS_ENGINE_DFB_IMAGE_OBJECTS_H
-void               *evas_engine_directfb_image_load(void *data, char *file,
-                                                   char *key, int *error, 
Evas_Image_Load_Opts *lo);
+void               *evas_engine_directfb_image_load(void *data, const char 
*file,
+                                                   const char *key, int 
*error, Evas_Image_Load_Opts *lo);
 void               *evas_engine_directfb_image_new_from_data(void *data, int w,
                                                             int h,
-                                                            DATA32 *
-                                                            image_data);
+                                                            DATA32 
*image_data, 
+                                                            int alpha, int 
cspace);
 void               *evas_engine_directfb_image_new_from_copied_data(void *data,
                                                                    int w,
                                                                    int h,
-                                                                   DATA32 *
-                                                                   image_data);
+                                                                   DATA32 
*image_data, 
+                                                                   int alpha, 
int cspace);
 void                evas_engine_directfb_image_free(void *data, void *image);
 void                evas_engine_directfb_image_size_get(void *data, void 
*image,
                                                        int *w, int *h);
@@ -48,6 +48,16 @@
                                                           char *key);
 char               *evas_engine_directfb_image_format_get(void *data,
                                                          void *image);
+void                evas_engine_directfb_image_colorspace_set(void *data, 
+                                                             void *image, 
+                                                             int cspace);
+int                 evas_engine_directfb_image_colorspace_get(void *data, 
+                                                             void *image);
+void                evas_engine_directfb_image_native_set(void *data, 
+                                                         void *image, 
+                                                         void *native);
+void               *evas_engine_directfb_image_native_get(void *data, 
+                                                         void *image);
 void                evas_engine_directfb_image_cache_flush(void *data);
 void                evas_engine_directfb_image_cache_set(void *data, int 
bytes);
 int                 evas_engine_directfb_image_cache_get(void *data);
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-devel mailing list
Freevo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freevo-devel

Reply via email to