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();
      }
 }

-- 


Reply via email to