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