Evas: Add engine function image_ref
authorJean-Philippe Andre <jp.andre@samsung.com>
Thu, 8 Oct 2015 05:00:39 +0000 (14:00 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 12 Oct 2015 04:44:44 +0000 (13:44 +0900)
This is to simplify and fix filters. This is an internal function.

src/lib/evas/include/evas_private.h
src/modules/evas/engines/gl_generic/evas_engine.c
src/modules/evas/engines/software_generic/evas_engine.c

index 0aa28d1..91e7b33 100644 (file)
@@ -1311,6 +1311,7 @@ struct _Evas_Func
    void *(*image_new_from_data)            (void *data, int w, int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
    void *(*image_new_from_copied_data)     (void *data, int w, int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace);
    void (*image_free)                      (void *data, void *image);
+   void *(*image_ref)                      (void *data, void *image);
    void (*image_size_get)                  (void *data, void *image, int *w, int *h);
    void *(*image_size_set)                 (void *data, void *image, int w, int h);
    void (*image_stride_get)                (void *data, void *image, int *stride);
index f4c7233..2cf26ab 100644 (file)
@@ -527,6 +527,15 @@ eng_image_free(void *data, void *image)
    evas_gl_common_image_free(image);
 }
 
+static void *
+eng_image_ref(void *data EINA_UNUSED, void *image)
+{
+   Evas_GL_Image *im = image;
+   if (!im) return NULL;
+   im->references++;
+   return im;
+}
+
 static void
 eng_image_size_get(void *data EINA_UNUSED, void *image, int *w, int *h)
 {
@@ -2591,6 +2600,7 @@ module_open(Evas_Module *em)
    ORD(image_new_from_data);
    ORD(image_new_from_copied_data);
    ORD(image_free);
+   ORD(image_ref);
    ORD(image_size_get);
    ORD(image_size_set);
    ORD(image_dirty_region);
index dbeee24..5c860ae 100644 (file)
@@ -1221,6 +1221,21 @@ eng_image_free(void *data EINA_UNUSED, void *image)
    evas_cache_image_drop(image);
 }
 
+static void *
+eng_image_ref(void *data EINA_UNUSED, void *image)
+{
+   if (!image) return NULL;
+#ifdef EVAS_CSERVE2
+   if (evas_cserve2_use_get() && evas_cache2_image_cached(image))
+     {
+        evas_cache2_image_ref(image);
+        return image;
+     }
+#endif
+   evas_cache_image_ref(image);
+   return image;
+}
+
 static void
 eng_image_size_get(void *data EINA_UNUSED, void *image, int *w, int *h)
 {
@@ -3980,6 +3995,7 @@ static Evas_Func func =
      eng_image_new_from_data,
      eng_image_new_from_copied_data,
      eng_image_free,
+     eng_image_ref,
      eng_image_size_get,
      eng_image_size_set,
      NULL, // eng_image_stride_get