diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-09-18 19:59:11 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-09-19 10:51:48 +0900 |
commit | 2df8ad36b4b0068ae5ae3f547d2ece4d3c741a76 (patch) | |
tree | e8821395cdc6cca75f968d2e7e7decab42f5a94c /src/lib/evas | |
parent | 1f242afdefd27cc11eb71bc598f4e7903ceb5ea9 (diff) | |
download | efl-2df8ad36b4b0068ae5ae3f547d2ece4d3c741a76.tar.gz |
evas: Use Eina.Slice on the stack (gfx.buffer)
Diffstat (limited to 'src/lib/evas')
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_image.c | 38 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_proxy.c | 23 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_scene3d.c | 35 |
3 files changed, 37 insertions, 59 deletions
diff --git a/src/lib/evas/canvas/efl_canvas_image.c b/src/lib/evas/canvas/efl_canvas_image.c index 71d16c96cf..b4634519f9 100644 --- a/src/lib/evas/canvas/efl_canvas_image.c +++ b/src/lib/evas/canvas/efl_canvas_image.c @@ -758,28 +758,24 @@ _efl_canvas_image_efl_gfx_buffer_buffer_copy_set(Eo *eo_obj, void *_pd EINA_UNUS return _image_pixels_set(obj, o, slice, size.w, size.h, stride, cspace, plane, EINA_TRUE); } -EOLIAN static Eina_Bool +EOLIAN static Eina_Slice _efl_canvas_image_efl_gfx_buffer_buffer_managed_get(Eo *eo_obj, void *_pd EINA_UNUSED EINA_UNUSED, - Eina_Slice *slice, int plane) + int plane) { Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); Evas_Colorspace cspace = EVAS_COLORSPACE_ARGB8888; - - EINA_SAFETY_ON_NULL_RETURN_VAL(slice, EINA_FALSE); - - slice->len = 0; - slice->mem = NULL; + Eina_Slice slice = {}; if (!o->buffer_data_set || !o->engine_data || !ENFN->image_data_direct_get) - return EINA_FALSE; + return slice; - return ENFN->image_data_direct_get(ENC, o->engine_data, plane, slice, &cspace, EINA_FALSE); + ENFN->image_data_direct_get(ENC, o->engine_data, plane, &slice, &cspace, EINA_FALSE); + return slice; } -EOLIAN static Eina_Bool +EOLIAN static Eina_Rw_Slice _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, - Eina_Rw_Slice *slice, Efl_Gfx_Buffer_Access_Mode mode, const Eina_Rect *region, Efl_Gfx_Colorspace cspace, @@ -788,14 +784,9 @@ _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); int s = 0, width = 0, height = 0; - Eina_Bool ret = EINA_FALSE; + Eina_Rw_Slice slice = {}; int x, y, w, h; - EINA_SAFETY_ON_NULL_RETURN_VAL(slice, EINA_FALSE); - - slice->len = 0; - slice->mem = NULL; - if (!ENFN->image_data_map) goto end; // not implemented @@ -831,30 +822,29 @@ _efl_canvas_image_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, goto end; } - if (ENFN->image_data_map(ENC, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane)) + if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, cspace, mode, plane)) { DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT, - eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(*slice)); - ret = EINA_TRUE; + eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice)); } else DBG("map(%p, %d,%d %dx%d plane:%d) -> (null)", eo_obj, x, y, w, h, plane); end: if (stride) *stride = s; - return ret; + return slice; } EOLIAN static Eina_Bool _efl_canvas_image_efl_gfx_buffer_buffer_unmap(Eo *eo_obj, void *_pd EINA_UNUSED, - const Eina_Rw_Slice *slice) + Eina_Rw_Slice slice) { Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); - if (!slice || !ENFN->image_data_unmap || !o->engine_data) + if (!slice.mem || !ENFN->image_data_unmap || !o->engine_data) return EINA_FALSE; - if (!ENFN->image_data_unmap(ENC, o->engine_data, slice)) + if (!ENFN->image_data_unmap(ENC, o->engine_data, &slice)) return EINA_FALSE; return EINA_TRUE; diff --git a/src/lib/evas/canvas/efl_canvas_proxy.c b/src/lib/evas/canvas/efl_canvas_proxy.c index 26bbd942ab..6b603695dc 100644 --- a/src/lib/evas/canvas/efl_canvas_proxy.c +++ b/src/lib/evas/canvas/efl_canvas_proxy.c @@ -259,9 +259,8 @@ _proxy_image_get(Evas_Image_Data *o) return source->proxy->surface; } -EOLIAN static Eina_Bool +EOLIAN static Eina_Rw_Slice _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, - Eina_Rw_Slice *slice, Efl_Gfx_Buffer_Access_Mode mode, const Eina_Rect *region, Efl_Gfx_Colorspace cspace, int plane, @@ -270,15 +269,10 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); int s = 0, width = 0, height = 0; - Eina_Bool ret = EINA_FALSE; + Eina_Rw_Slice slice = {}; int x, y, w, h; void *image; - EINA_SAFETY_ON_NULL_RETURN_VAL(slice, EINA_FALSE); - - slice->len = 0; - slice->mem = NULL; - if (!ENFN->image_data_map) goto end; // not implemented @@ -327,30 +321,29 @@ _efl_canvas_proxy_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, goto end; } - if (ENFN->image_data_map(ENC, &o->engine_data, slice, &s, x, y, w, h, cspace, mode, plane)) + if (ENFN->image_data_map(ENC, &o->engine_data, &slice, &s, x, y, w, h, cspace, mode, plane)) { DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT, - eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(*slice)); - ret = EINA_TRUE; + eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice)); } else DBG("map(%p, %d,%d %dx%d plane:%d) -> (null)", eo_obj, x, y, w, h, plane); end: if (stride) *stride = s; - return ret; + return slice; } EOLIAN static Eina_Bool _efl_canvas_proxy_efl_gfx_buffer_buffer_unmap(Eo *eo_obj, void *_pd EINA_UNUSED, - const Eina_Rw_Slice *slice) + const Eina_Rw_Slice slice) { Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS); Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); - if (!slice || !ENFN->image_data_unmap || !o->engine_data) + if (!slice.mem || !ENFN->image_data_unmap || !o->engine_data) return EINA_FALSE; - if (!ENFN->image_data_unmap(ENC, o->engine_data, slice)) + if (!ENFN->image_data_unmap(ENC, o->engine_data, &slice)) return EINA_FALSE; return EINA_TRUE; diff --git a/src/lib/evas/canvas/efl_canvas_scene3d.c b/src/lib/evas/canvas/efl_canvas_scene3d.c index 6b6dc35e89..3444e73d0d 100644 --- a/src/lib/evas/canvas/efl_canvas_scene3d.c +++ b/src/lib/evas/canvas/efl_canvas_scene3d.c @@ -208,9 +208,8 @@ _evas_image_3d_unset(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data EINA_COW_WRITE_END(evas_object_3d_cow, obj->data_3d, data); } -EOLIAN static Eina_Bool +EOLIAN static Eina_Rw_Slice _efl_canvas_scene3d_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, - Eina_Rw_Slice *slice, Efl_Gfx_Buffer_Access_Mode mode, const Eina_Rect *region, Efl_Gfx_Colorspace cspace, int plane, @@ -222,28 +221,24 @@ _efl_canvas_scene3d_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, Evas_Canvas3D_Scene_Data *pd_scene; int width = -1, height = -1, ntex = -1; unsigned char *pixels = NULL; + Eina_Rw_Slice slice = {}; int x, y, w, h; size_t len = 0; - EINA_SAFETY_ON_NULL_RETURN_VAL(slice, EINA_FALSE); - - slice->len = 0; - slice->mem = NULL; - if (!o->cur->scene) { ERR("invalid scene data"); - return EINA_FALSE; + return slice; } if (mode & EFL_GFX_BUFFER_ACCESS_MODE_WRITE) { ERR("invalid map access mode"); - return EINA_FALSE; + return slice; } if (cspace != EFL_GFX_COLORSPACE_ARGB8888) { ERR("invalid map colorspace. Only ARGB is supported"); - return EINA_FALSE; + return slice; } pd_parent = efl_data_scope_get(o->cur->scene, EVAS_CANVAS3D_OBJECT_CLASS); @@ -274,7 +269,7 @@ _efl_canvas_scene3d_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, { ERR("Invalid map dimensions : %dx%d +%d,%d. Image is %dx%d.", w, h, x, y, width, height); - return EINA_FALSE; + return slice; } if (e->engine.func->drawable_texture_target_id_get) @@ -284,29 +279,29 @@ _efl_canvas_scene3d_efl_gfx_buffer_buffer_map(Eo *eo_obj, void *_pd EINA_UNUSED, if (e->engine.func->drawable_texture_rendered_pixels_get) { len = w * h * sizeof(DATA32); //four component texture - pixels = malloc(len + sizeof(*slice) + 8); + pixels = malloc(len + sizeof(slice) + 8); e->engine.func->drawable_texture_rendered_pixels_get(ntex, x, y, w, h, pd_scene->surface, pixels); } else - return EINA_FALSE; + return slice; } else - return EINA_FALSE; + return slice; if (stride) *stride = w * sizeof(DATA32); - slice->mem = pixels; - slice->len = len; + slice.mem = pixels; + slice.len = len; DBG("map(%p, %d,%d %dx%d plane:%d) -> " EINA_SLICE_FMT, - eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(*slice)); + eo_obj, x, y, w, h, plane, EINA_SLICE_PRINT(slice)); - return EINA_TRUE; + return slice; } EOLIAN static Eina_Bool _efl_canvas_scene3d_efl_gfx_buffer_buffer_unmap(Eo *eo_obj EINA_UNUSED, void *_pd EINA_UNUSED, - const Eina_Rw_Slice *slice) + const Eina_Rw_Slice slice) { - free(slice->mem); + free(slice.mem); return EINA_TRUE; } |