From 386250a336777910020013e076b70a1f78598d0a Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Mon, 6 Nov 2023 09:54:56 +0100 Subject: [PATCH] fix(draw): stride handling in case of layers --- src/draw/lv_draw.c | 9 +++++++-- src/draw/sw/lv_draw_sw_img.c | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/draw/lv_draw.c b/src/draw/lv_draw.c index 479463a7d..63b334036 100644 --- a/src/draw/lv_draw.c +++ b/src/draw/lv_draw.c @@ -338,11 +338,12 @@ lv_layer_t * lv_draw_layer_create(lv_layer_t * parent_layer, lv_color_format_t c void * lv_draw_layer_alloc_buf(lv_layer_t * layer) { + int32_t w = lv_area_get_width(&layer->buf_area); + uint32_t stride = lv_draw_buf_width_to_stride(w, layer->color_format); + /*If the buffer of the layer is not allocated yet, allocate it now*/ if(layer->buf == NULL) { - int32_t w = lv_area_get_width(&layer->buf_area); int32_t h = lv_area_get_height(&layer->buf_area); - int32_t stride = lv_draw_buf_width_to_stride(w, layer->color_format); uint32_t layer_size_byte = h * stride; layer->buf_unaligned = lv_draw_buf_malloc(layer_size_byte, layer->color_format); @@ -368,6 +369,10 @@ void * lv_draw_layer_alloc_buf(lv_layer_t * layer) } } + /*Set the stride also for static allocated buffers as well as for new dynamically allocated*/ + layer->buf_stride = stride; + + /*Make sure the buffer address is aligned in case of already allocated buffers*/ return lv_draw_buf_align(layer->buf, layer->color_format); } diff --git a/src/draw/sw/lv_draw_sw_img.c b/src/draw/sw/lv_draw_sw_img.c index 16c8a4bb2..c71a743d1 100644 --- a/src/draw/sw/lv_draw_sw_img.c +++ b/src/draw/sw/lv_draw_sw_img.c @@ -58,10 +58,9 @@ void lv_draw_sw_layer(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * dr img_dsc.header.w = lv_area_get_width(&layer_to_draw->buf_area); img_dsc.header.h = lv_area_get_height(&layer_to_draw->buf_area); img_dsc.header.cf = layer_to_draw->color_format; - img_dsc.header.stride = lv_draw_buf_width_to_stride(lv_area_get_width(&layer_to_draw->buf_area), - layer_to_draw->color_format); + img_dsc.header.stride = layer_to_draw->buf_stride; img_dsc.header.always_zero = 0; - img_dsc.data = lv_draw_buf_align(layer_to_draw->buf, layer_to_draw->color_format); + img_dsc.data = layer_to_draw->buf; lv_draw_image_dsc_t new_draw_dsc; lv_memcpy(&new_draw_dsc, draw_dsc, sizeof(lv_draw_image_dsc_t));