jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=64de2f6ce505283ee3de8d69297b7f39e7e5a2d6
commit 64de2f6ce505283ee3de8d69297b7f39e7e5a2d6 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Thu Oct 29 21:46:08 2015 +0900 Evas: Add some internal engine APIs - image_file_colorspace_get This will be used to determine the best loading format, especially targeted at edje_cc / edje_decc so we can avoid ETC re-encoding. - image_data_has Checks whether the image is currently loaded in (CPU) memory, and also returns the current colorspace. --- src/lib/evas/include/evas_private.h | 3 +- src/modules/evas/engines/gl_cocoa/evas_engine.c | 45 ++++++++++++---------- src/modules/evas/engines/gl_generic/evas_engine.c | 28 ++++++++++++-- .../evas/engines/software_generic/evas_engine.c | 28 ++++++++++++-- 4 files changed, 74 insertions(+), 30 deletions(-) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 6d2019f..f237a2e 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1311,6 +1311,7 @@ struct _Evas_Func void *(*image_dirty_region) (void *data, void *image, int x, int y, int w, int h); void *(*image_data_get) (void *data, void *image, int to_write, DATA32 **image_data, int *err, Eina_Bool *tofree); void *(*image_data_put) (void *data, void *image, DATA32 *image_data); + Eina_Bool (*image_data_has) (void *data, void *image, Evas_Colorspace *cspace); void (*image_data_preload_request) (void *data, void *image, const Eo *target); void (*image_data_preload_cancel) (void *data, void *image, const Eo *target); void *(*image_alpha_set) (void *data, void *image, int has_alpha); @@ -1321,9 +1322,9 @@ struct _Evas_Func void (*image_border_get) (void *data, void *image, int *l, int *r, int *t, int *b); Eina_Bool (*image_draw) (void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth, Eina_Bool do_async); char *(*image_comment_get) (void *data, void *image, char *key); - char *(*image_format_get) (void *data, void *image); void (*image_colorspace_set) (void *data, void *image, Evas_Colorspace cspace); Evas_Colorspace (*image_colorspace_get) (void *data, void *image); + Evas_Colorspace (*image_file_colorspace_get)(void *data, void *image); Eina_Bool (*image_can_region_get) (void *data, void *image); void *(*image_native_set) (void *data, void *image, void *native); void *(*image_native_get) (void *data, void *image); diff --git a/src/modules/evas/engines/gl_cocoa/evas_engine.c b/src/modules/evas/engines/gl_cocoa/evas_engine.c index 56d41eb..9c35280 100644 --- a/src/modules/evas/engines/gl_cocoa/evas_engine.c +++ b/src/modules/evas/engines/gl_cocoa/evas_engine.c @@ -377,10 +377,8 @@ eng_polygon_draw(void *data, void *context, void *surface EINA_UNUSED, void *pol static int eng_image_alpha_get(void *data EINA_UNUSED, void *image) { - // Render_Engine *re; Evas_GL_Image *im; - // re = (Render_Engine *)data; if (!image) return 1; im = image; return im->alpha; @@ -389,10 +387,8 @@ eng_image_alpha_get(void *data EINA_UNUSED, void *image) static Evas_Colorspace eng_image_colorspace_get(void *data EINA_UNUSED, void *image) { - // Render_Engine *re; Evas_GL_Image *im; - // re = (Render_Engine *)data; if (!image) return EVAS_COLORSPACE_ARGB8888; im = image; return im->cs.space; @@ -450,42 +446,48 @@ eng_image_alpha_set(void *data, void *image, int has_alpha) static void * eng_image_border_set(void *data EINA_UNUSED, void *image, int l EINA_UNUSED, int r EINA_UNUSED, int t EINA_UNUSED, int b EINA_UNUSED) { - // Render_Engine *re; - // - // re = (Render_Engine *)data; return image; } static void eng_image_border_get(void *data EINA_UNUSED, void *image EINA_UNUSED, int *l EINA_UNUSED, int *r EINA_UNUSED, int *t EINA_UNUSED, int *b EINA_UNUSED) { - // Render_Engine *re; - // - // re = (Render_Engine *)data; } static char * eng_image_comment_get(void *data EINA_UNUSED, void *image, char *key EINA_UNUSED) { - // Render_Engine *re; Evas_GL_Image *im; - // re = (Render_Engine *)data; if (!image) return NULL; im = image; if (!im->im) return NULL; return im->im->info.comment; } -static char * -eng_image_format_get(void *data EINA_UNUSED, void *image) +static Evas_Colorspace +eng_image_file_colorspace_get(void *data EINA_UNUSED, void *image) { - // Render_Engine *re; - Evas_GL_Image *im; + Evas_GL_Image *im = image; - // re = (Render_Engine *)data; - im = image; - return NULL; + if (!im || !im->im) return EVAS_COLORSPACE_ARGB8888; + if (im->im->cache_entry.cspaces) + return im->im->cache_entry.cspaces[0]; + return im->im->cache_entry.space; +} + +static Eina_Bool +eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace *cspace) +{ + Evas_GL_Image *im = image; + + if (!im || !im->im) return EINA_FALSE; + if (im->im->image.data) + { + if (cspace) *cspace = im->im->cache_entry.space; + return EINA_TRUE; + } + return EINA_FALSE; } static void @@ -1378,6 +1380,7 @@ module_open(Evas_Module *em) ORD(image_dirty_region); ORD(image_data_get); ORD(image_data_put); + ORD(image_data_has); ORD(image_data_preload_request); ORD(image_data_preload_cancel); ORD(image_alpha_set); @@ -1386,9 +1389,9 @@ module_open(Evas_Module *em) ORD(image_border_get); ORD(image_draw); ORD(image_comment_get); - ORD(image_format_get); ORD(image_colorspace_set); ORD(image_colorspace_get); + ORD(image_file_colorspace_get); // ORD(image_native_set); // ORD(image_native_get); @@ -1412,7 +1415,7 @@ module_open(Evas_Module *em) ORD(image_load_error_get); -#define LINK2GENERIC(sym) \ +#define LINK2GENERIC(sym) \ glsym_##sym = dlsym(RTLD_DEFAULT, #sym); LINK2GENERIC(evas_gl_symbols); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 72acaf6..eaca5e4 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -249,10 +249,29 @@ eng_image_comment_get(void *data EINA_UNUSED, void *image, char *key EINA_UNUSED return im->im->info.comment; } -static char * -eng_image_format_get(void *data EINA_UNUSED, void *image EINA_UNUSED) +static Evas_Colorspace +eng_image_file_colorspace_get(void *data EINA_UNUSED, void *image) { - return NULL; + Evas_GL_Image *im = image; + + if (!im || !im->im) return EVAS_COLORSPACE_ARGB8888; + if (im->im->cache_entry.cspaces) + return im->im->cache_entry.cspaces[0]; + return im->im->cache_entry.space; +} + +static Eina_Bool +eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace *cspace) +{ + Evas_GL_Image *im = image; + + if (!im || !im->im) return EINA_FALSE; + if (im->im->image.data) + { + if (cspace) *cspace = im->im->cache_entry.space; + return EINA_TRUE; + } + return EINA_FALSE; } static void @@ -2631,6 +2650,7 @@ module_open(Evas_Module *em) ORD(image_dirty_region); ORD(image_data_get); ORD(image_data_put); + ORD(image_data_has); ORD(image_data_preload_request); ORD(image_data_preload_cancel); ORD(image_alpha_set); @@ -2641,9 +2661,9 @@ module_open(Evas_Module *em) ORD(image_border_get); ORD(image_draw); ORD(image_comment_get); - ORD(image_format_get); ORD(image_colorspace_set); ORD(image_colorspace_get); + ORD(image_file_colorspace_get); ORD(image_can_region_get); ORD(image_native_set); ORD(image_native_get); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 267867b..e1f73cb 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -1073,10 +1073,29 @@ eng_image_comment_get(void *data EINA_UNUSED, void *image, char *key EINA_UNUSED return im->info.comment; } -static char * -eng_image_format_get(void *data EINA_UNUSED, void *image EINA_UNUSED) +static Evas_Colorspace +eng_image_file_colorspace_get(void *data EINA_UNUSED, void *image) { - return NULL; + RGBA_Image *im = image; + + if (!im) return EVAS_COLORSPACE_ARGB8888; + if (im->cache_entry.cspaces) + return im->cache_entry.cspaces[0]; + return im->cache_entry.space; +} + +static Eina_Bool +eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace *cspace) +{ + RGBA_Image *im = image; + + if (!im) return EINA_FALSE; + if (im->image.data) + { + if (cspace) *cspace = im->cache_entry.space; + return EINA_TRUE; + } + return EINA_FALSE; } static void @@ -4011,6 +4030,7 @@ static Evas_Func func = eng_image_dirty_region, eng_image_data_get, eng_image_data_put, + eng_image_data_has, eng_image_data_preload_request, eng_image_data_preload_cancel, eng_image_alpha_set, @@ -4021,9 +4041,9 @@ static Evas_Func func = eng_image_border_get, eng_image_draw, eng_image_comment_get, - eng_image_format_get, eng_image_colorspace_set, eng_image_colorspace_get, + eng_image_file_colorspace_get, eng_image_can_region_get, eng_image_native_set, eng_image_native_get, --