summaryrefslogtreecommitdiff
path: root/src/lib/evas
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2017-09-18 19:59:11 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2017-09-19 10:51:48 +0900
commit2df8ad36b4b0068ae5ae3f547d2ece4d3c741a76 (patch)
treee8821395cdc6cca75f968d2e7e7decab42f5a94c /src/lib/evas
parent1f242afdefd27cc11eb71bc598f4e7903ceb5ea9 (diff)
downloadefl-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.c38
-rw-r--r--src/lib/evas/canvas/efl_canvas_proxy.c23
-rw-r--r--src/lib/evas/canvas/efl_canvas_scene3d.c35
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;
}