From a8243ed382780615dd572babfeee3a333375ba80 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Thu, 8 Oct 2015 14:00:39 +0900 Subject: [PATCH] Evas: Add engine function image_ref This is to simplify and fix filters. This is an internal function. --- src/lib/evas/include/evas_private.h | 1 + src/modules/evas/engines/gl_generic/evas_engine.c | 10 ++++++++++ src/modules/evas/engines/software_generic/evas_engine.c | 16 ++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 0aa28d1..91e7b33 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_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); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index f4c7233..2cf26ab 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -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); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index dbeee24..5c860ae 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -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 -- 2.7.4