efl/software_generic: Fix map/image drawing with Cserve2

We must check whether source image has been loaded or not before
enqueueing draw commands. Otherwise, cserve2 may not have a specific
loader and then it does not load the source image and the enqueued draw
commands dereference the NULL pointer "data" from source image.

Patch by: Paulo Alcantara <pcacjr@profusion.mobi>


SVN revision: 82483
This commit is contained in:
Paulo Alcantara 2013-01-09 21:39:06 +00:00 committed by Ulisses Furquim
parent cf46337e17
commit e8cc9680d0
1 changed files with 27 additions and 4 deletions

View File

@ -1275,6 +1275,8 @@ eng_image_draw(void *data EINA_UNUSED, void *context, void *surface, void *image
else
#endif
evas_cache_image_load_data(&im->cache_entry);
if (!im->cache_entry.flags.loaded) return;
}
evas_common_image_colorspace_normalize(im);
@ -1609,14 +1611,35 @@ evas_software_image_map_draw(void *data, void *context, RGBA_Image *surface, RGB
static void
eng_image_map_draw(void *data, void *context, void *surface, void *image, RGBA_Map *m, int smooth, int level, Eina_Bool do_async)
{
if (!image) return;
RGBA_Image *im = image;
if (!im) return;
if (m->count < 3) return;
if (do_async)
evas_common_map_thread_rgba_cb(image, surface, context,
m, smooth, level, 0, _map_draw_thread_cmd);
{
/* Since the thread that'll draw the map won't call eng_image_draw()
* (which sends the load request of source image to Cserve2) - we need
* to send the load request here before enqueueing thread command.
*/
if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
{
#if EVAS_CSERVE2
if (evas_cserve2_use_get())
evas_cache2_image_load_data(&im->cache_entry);
else
#endif
evas_cache_image_load_data(&im->cache_entry);
if (!im->cache_entry.flags.loaded) return;
}
evas_common_map_thread_rgba_cb(im, surface, context,
m, smooth, level, 0,
_map_draw_thread_cmd);
}
else
evas_software_image_map_draw(data, context, surface, image, m,
evas_software_image_map_draw(data, context, surface, im, m,
smooth, level, 0, do_async);
}