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,

-- 


Reply via email to