jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=48433efc43de9eeaf353e3da18c7109e434902da
commit 48433efc43de9eeaf353e3da18c7109e434902da Author: subhransu mohanty <sub.moha...@samsung.com> Date: Thu Feb 8 14:27:15 2018 +0900 ector: Updated the ector_buffer_pixels_set() api with stride info Reviewers: jypark, jpeg Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5795 --- src/lib/ector/cairo/ector_cairo_software_surface.c | 4 ++-- src/lib/ector/ector_buffer.eo | 1 + src/lib/ector/software/ector_software_buffer.c | 10 +++++++--- src/modules/evas/engines/gl_generic/evas_engine.c | 4 ++-- .../evas/engines/software_generic/evas_ector_software_buffer.c | 2 +- src/modules/evas/engines/software_generic/evas_engine.c | 6 +++--- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/lib/ector/cairo/ector_cairo_software_surface.c b/src/lib/ector/cairo/ector_cairo_software_surface.c index 98dd8e0a4f..96bf1c1081 100644 --- a/src/lib/ector/cairo/ector_cairo_software_surface.c +++ b/src/lib/ector/cairo/ector_cairo_software_surface.c @@ -51,7 +51,7 @@ struct _Ector_Cairo_Software_Surface_Data EOLIAN static Eina_Bool _ector_cairo_software_surface_ector_buffer_pixels_set(Eo *obj, Ector_Cairo_Software_Surface_Data *pd, - void *pixels, int width, int height, + void *pixels, int width, int height, int stride, Efl_Gfx_Colorspace cspace, Eina_Bool writable) { cairo_t *ctx = NULL; @@ -72,7 +72,7 @@ _ector_cairo_software_surface_ector_buffer_pixels_set(Eo *obj, Ector_Cairo_Softw cairo_surface_destroy(pd->surface); pd->surface = NULL; - ok = ector_buffer_pixels_set(efl_super(obj, MY_CLASS), pixels, width, height, cspace, writable); + ok = ector_buffer_pixels_set(efl_super(obj, MY_CLASS), pixels, width, height, stride, cspace, writable); if (ok && pixels) { diff --git a/src/lib/ector/ector_buffer.eo b/src/lib/ector/ector_buffer.eo index 143dcbb846..58d5409f37 100644 --- a/src/lib/ector/ector_buffer.eo +++ b/src/lib/ector/ector_buffer.eo @@ -77,6 +77,7 @@ mixin Ector.Buffer @in pixels: void_ptr; [[If $null, allocates an empty buffer]] @in width: int; [[Buffer width]] @in height: int; [[Buffer height]] + @in stride: int; [[Buffer stride (in bytes). If 0 then calculated based on $cspace and $width]] @in cspace: Efl.Gfx.Colorspace; [[Buffer colorspace]] @in writable: bool; [[Buffer is writable]] } diff --git a/src/lib/ector/software/ector_software_buffer.c b/src/lib/ector/software/ector_software_buffer.c index d44962bbec..8afe6c85c4 100644 --- a/src/lib/ector/software/ector_software_buffer.c +++ b/src/lib/ector/software/ector_software_buffer.c @@ -71,10 +71,10 @@ on_fail: EOLIAN static Eina_Bool _ector_software_buffer_base_ector_buffer_pixels_set(Eo *obj, Ector_Software_Buffer_Base_Data *pd, - void *pixels, int width, int height, + void *pixels, int width, int height, int stride, Efl_Gfx_Colorspace cspace, Eina_Bool writable) { - unsigned pxs, stride; + unsigned pxs; if (pd->generic->immutable) fail("This buffer is immutable."); @@ -92,7 +92,11 @@ _ector_software_buffer_base_ector_buffer_pixels_set(Eo *obj, Ector_Software_Buff if (((unsigned long long)(uintptr_t)pixels) & (pxs - 1)) fail ("Pixel data is not aligned to %u bytes!", pxs); - stride = width * pxs; + if (stride == 0) + stride = width * pxs; + else if (stride < (int)(width * pxs)) + fail ("Stride is less than minimum stride: provided %u bytes, minimum %u bytes!", stride, (width * pxs)); + if (pd->pixels.u8 && (pd->pixels.u8 != pixels)) _ector_software_buffer_base_pixels_clear(obj, pd); diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index b0edce0255..623e96aea4 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -2657,7 +2657,7 @@ eng_ector_begin(void *engine, void *output, memset(pixels, 0, stride * h); // it just uses the software backend to draw for now - ector_buffer_pixels_set(ector, pixels, w, h, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, pixels, w, h, stride, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); ector_surface_reference_point_set(ector, x, y); } else @@ -2681,7 +2681,7 @@ eng_ector_end(void *engine, void *output, eng_image_data_put(engine, glim, pixels); eng_image_data_put(engine, glim, pixels); - ector_buffer_pixels_set(ector, NULL, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, NULL, 0, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); evas_common_cpu_end_opt(); } else if (use_gl) diff --git a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c index 0b85c33d9a..41730d7298 100644 --- a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c +++ b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c @@ -32,7 +32,7 @@ _evas_ector_software_buffer_evas_ector_buffer_engine_image_set(Eo *obj, evas_cache_image_ref(&im->cache_entry); pd->image = im; - ector_buffer_pixels_set(obj, im->image.data, im->cache_entry.w, im->cache_entry.h, im->cache_entry.space, EINA_TRUE); + ector_buffer_pixels_set(obj, im->image.data, im->cache_entry.w, im->cache_entry.h, 0, im->cache_entry.space, EINA_TRUE); } EOLIAN static void * diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index d1085c3665..a265c42d9c 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -4574,7 +4574,7 @@ _draw_thread_ector_surface_set(void *data) memset(pixels, 0, (w * h * 4)); } - ector_buffer_pixels_set(ector_surface->ector, pixels, w, h, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector_surface->ector, pixels, w, h, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); ector_surface_reference_point_set(ector_surface->ector, x, y); eina_mempool_free(_mp_command_ector_surface, ector_surface); @@ -4612,7 +4612,7 @@ eng_ector_begin(void *engine EINA_UNUSED, void *surface, // clear the surface before giving to ector memset(pixels, 0, (w * h * 4)); - ector_buffer_pixels_set(ector, pixels, w, h, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, pixels, w, h, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); ector_surface_reference_point_set(ector, x, y); } } @@ -4636,7 +4636,7 @@ eng_ector_end(void *engine EINA_UNUSED, void *surface EINA_UNUSED, } else { - ector_buffer_pixels_set(ector, NULL, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); + ector_buffer_pixels_set(ector, NULL, 0, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); evas_common_cpu_end_opt(); } } --