feat(draw-sw): add Helium (transform) acceleration to sw-draw-image-core (#5231)

Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
Gabriel Wang
2024-01-14 11:36:42 +00:00
committed by GitHub
parent ee8de1e1a0
commit ab1182b1b2
13 changed files with 1235 additions and 71 deletions

View File

@@ -36,10 +36,11 @@
<repository type="git">https://github.com/lvgl/lvgl.git</repository>
<releases>
<release date="2024-01-02" version="9.0.0-dev3" url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/LVGL.lvgl.9.0.0-dev3.pack">
<release date="2024-01-13" version="9.0.0-dev4" url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/LVGL.lvgl.9.0.0-dev4.pack">
- LVGL 9.0.0-dev
- New Driver Architecture
- Adds Helium support
- Accelerates SW-Render with NEON and Helium technology for Cortex architectures.
- Adds supports for GPUs: VG-Lite, PXP and Dave2D
- Other fixes
</release>
<release date="2023-12-05" version="8.3.11" url="https://github.com/lvgl/lvgl/raw/8194d83226c27c84f12dd51e16f5add9939215a5/env_support/cmsis-pack/LVGL.lvgl.8.3.11.pack">
@@ -277,16 +278,6 @@
<require Cclass="Acceleration" Cgroup="Arm-2D"/>
</condition>
<condition id="LVGL-GPU-Arm-2D">
<description>Enable LVGL Arm-2D GPU Support</description>
<require Cclass="LVGL" Cgroup="LVGL9" Csub="Essential"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU STM32-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU SWM341-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
</condition>
<condition id="LVGL-GPU-STM32-DMA2D">
<description>Enable LVGL Arm-2D GPU Support</description>
<require Cclass="LVGL" Cgroup="LVGL9" Csub="Essential"/>
@@ -295,6 +286,7 @@
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>
</condition>
<condition id="LVGL-GPU-SWM341-DMA2D">
@@ -305,6 +297,7 @@
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>
</condition>
<condition id="LVGL-GPU-NXP-PXP">
@@ -313,8 +306,9 @@
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU STM32-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU SWM341-DMA2D"/>
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>-->
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>-->
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>
</condition>
<condition id="LVGL-GPU-NXP-VGLite">
@@ -322,9 +316,10 @@
<require Cclass="LVGL" Cgroup="LVGL9" Csub="Essential"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU STM32-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU SWM341-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>-->
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>-->
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>
</condition>
<condition id="LVGL-GPU-GD32-IPA">
@@ -335,6 +330,18 @@
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>-->
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>
</condition>
<condition id="LVGL-GPU-Renesas-Dave2D">
<description>Enable LVGL Arm-2D GPU Support</description>
<require Cclass="LVGL" Cgroup="LVGL9" Csub="Essential"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU STM32-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU SWM341-DMA2D"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-PXP"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU NXP-VGLite"/>
<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU GD32-IPA"/>
<!--<deny Cclass="LVGL" Cgroup="LVGL9" Csub="GPU Renesas-Dave2D"/>-->
</condition>
</conditions>
@@ -397,11 +404,10 @@
<!-- src/dev -->
<file category="sourceC" name="src/dev/display/drm/lv_linux_drm.c" />
<file category="sourceC" name="src/dev/display/fb/lv_linux_fbdev.c" />
<file category="sourceCpp" name="src/dev/display/tft_espi/lv_tft_espi.cpp" />
<file category="sourceC" name="src/dev/evdev/lv_evdev.c" />
<file category="sourceC" name="src/dev/display/lcd/lv_lcd_generic_mipi.c" />
<file category="sourceC" name="src/dev/nuttx/lv_nuttx_entry.c" />
<file category="sourceC" name="src/dev/nuttx/lv_nuttx_fbdev.c" />
<file category="sourceC" name="src/dev/nuttx/lv_nuttx_lcd.c" />
@@ -415,7 +421,7 @@
<file category="sourceC" name="src/dev/x11/lv_x11_display.c" />
<file category="sourceC" name="src/dev/x11/lv_x11_input.c" />
<!-- src/dev -->
<file category="sourceC" name="src/display/lv_display.c" />
@@ -456,8 +462,6 @@
<file category="sourceC" name="src/draw/sw/blend/lv_draw_sw_blend_to_rgb565.c" />
<file category="sourceC" name="src/draw/sw/blend/lv_draw_sw_blend_to_rgb888.c" />
<file category="sourceAsm" name="src/draw/sw/blend/neon/lv_blend_neon.S" condition="Helium GNU Assembler"/>
<!--file category="sourceAsm" name="src/draw/sw/blend/helium/lv_blend_helium.c" condition="Helium" /-->
<!-- src/font -->
<file category="sourceC" name="src/font/lv_binfont_loader.c" />
@@ -600,6 +604,8 @@
<!-- src/others -->
<file category="sourceC" name="src/others/sysmon/lv_sysmon.c" />
<file category="sourceC" name="src/others/observer/lv_observer.c" />
<file category="sourceC" name="src/others/vg_lite_tvg/vg_lite_matrix.c" />
<file category="sourceCpp" name="src/others/vg_lite_tvg/vg_lite_tvg.cpp" />
<!-- src/demons -->
<file category="sourceC" name="demos/lv_demos.c" />
@@ -608,7 +614,7 @@
<file category="sourceC" name="src/osal/lv_os_none.c"/>
<!-- general -->
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.1.0" />
<file category="preIncludeGlobal" name="lv_conf_cmsis.h" attr="config" version="2.1.2" />
<file category="sourceC" name="lv_cmsis_pack.c" />
<file category="header" name="lvgl.h" />
<file category="doc" name="README.md"/>
@@ -636,7 +642,100 @@
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="Linux DRM" condition="LVGL-Essential">
<description>Add the display driver for Linux /dev/dri/card*/ </description>
<files>
<file category="sourceC" name="src/dev/display/drm/lv_linux_drm.c" />
</files>
<RTE_Components_h>
/* use display driver for Linux /dev/dri/card*/ */
#define LV_USE_LINUX_DRM 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="Linux FBDEV" condition="LVGL-Essential">
<description>Add the display driver for Linux /dev/fb </description>
<files>
<file category="sourceC" name="src/dev/display/fb/lv_linux_fbdev.c" />
<file category="sourceCpp" name="src/dev/display/tft_espi/lv_tft_espi.cpp" />
</files>
<RTE_Components_h>
/* use display driver for Linux /dev/fb */
#define LV_USE_LINUX_FBDEV 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="TFT_eSPI" condition="LVGL-Essential">
<description>Add the display driver for TFT_eSPI </description>
<files>
<file category="sourceCpp" name="src/dev/display/tft_espi/lv_tft_espi.cpp" />
</files>
<RTE_Components_h>
/* use display driver for TFT_eSPI */
#define LV_USE_TFT_ESPI 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="ILI9341" condition="LVGL-Essential">
<description>Add the display driver for ILI9341 </description>
<files>
<file category="sourceC" name="src/dev/display/ili9341/lv_ili9341.c" />
</files>
<RTE_Components_h>
/* use display driver for ILI9341 */
#define LV_USE_ILI9341 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="st7735" condition="LVGL-Essential">
<description>Add the display driver for st7735 </description>
<files>
<file category="sourceC" name="src/dev/display/st7735/lv_st7735.c" />
</files>
<RTE_Components_h>
/* use display driver for st7735 */
#define LV_USE_ST7735 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="st7789" condition="LVGL-Essential">
<description>Add the display driver for st7789 </description>
<files>
<file category="sourceC" name="src/dev/display/st7789/lv_st7789.c" />
</files>
<RTE_Components_h>
/* use display driver for st7789 */
#define LV_USE_ST7789 1
</RTE_Components_h>
</component>
<component Cgroup="Display" Cvariant="st7796" condition="LVGL-Essential">
<description>Add the display driver for st7796 </description>
<files>
<file category="sourceC" name="src/dev/display/st7796/lv_st7796.c" />
</files>
<RTE_Components_h>
/* use display driver for st7796 */
#define LV_USE_ST7796 1
</RTE_Components_h>
</component>
<component Cgroup="OS Abstraction Layer" Cvariant="pthreads" condition="LVGL-Essential">
<description>Add the support for pthreads</description>
<files>
@@ -791,13 +890,34 @@
</files>
</component>
<component Cgroup="Acceleration" Csub="GPU Renesas-Dave2D" condition="LVGL-GPU-Renesas-Dave2D">
<description>An hardware acceleration from Renesas Dave2D</description>
<files>
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_arc.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_border.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_fill.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_image.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_label.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_line.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_mask_rectangle.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_triangle.c" />
<file category="sourceC" name="src/draw/renesas/dave2d/lv_draw_dave2d_utils.c" />
</files>
<RTE_Components_h>
/*! \brief enable Renesas Dave2D */
#define LV_USE_DRAW_DAVE2D 1
</RTE_Components_h>
</component>
<component Cgroup="Acceleration" Csub="GPU NXP-PXP" condition="LVGL-GPU-NXP-PXP">
<description>An hardware acceleration from NXP-PXP</description>
<files>
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_buf_pxp.c" />
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_pxp.c" />
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_pxp_bg_img.c" />
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_pxp_fill.c" />
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_pxp_img.c" />
<file category="sourceC" name="src/draw/nxp/pxp/lv_draw_pxp_layer.c" />
@@ -820,17 +940,16 @@
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_buf_vglite.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_arc.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_bg_img.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_border.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_fill.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_img.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_label.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_layer.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_line.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_draw_vglite_triangle.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_vglite_buf.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_vglite_matrix.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_vglite_path.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_vglite_buf.c" />
<file category="sourceC" name="src/draw/nxp/vglite/lv_vglite_utils.c" />
</files>

View File

@@ -2,8 +2,8 @@
<index schemaVersion="1.0.0" xs:noNamespaceSchemaLocation="PackIndex.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<vendor>LVGL</vendor>
<url>https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/</url>
<timestamp>2024-01-02</timestamp>
<timestamp>2024-01-13</timestamp>
<pindex>
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.0.0-dev3"/>
<pdsc url="https://raw.githubusercontent.com/lvgl/lvgl/master/env_support/cmsis-pack/" vendor="LVGL" name="lvgl" version="9.0.0-dev4"/>
</pindex>
</index>

View File

@@ -89,6 +89,18 @@ remove the misleading guide above this code segment.
- LV_USE_IMGFONT
- LV_USE_LINUX_DRM
- LV_USE_TFT_ESPI
- LV_USE_ST7735
- LV_USE_ST7789
- LV_USE_ST7796
- LV_USE_ILI9341
5. Update `LV_LOG_PRINTF` to `1` and `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER`

View File

@@ -71,6 +71,14 @@
} while(0)
#endif
/*=================
* OPERATING SYSTEM
*=================*/
#if LV_USE_OS == LV_OS_CUSTOM
#define LV_OS_CUSTOM_INCLUDE <stdint.h>
#endif
/*========================
* RENDERING CONFIGURATION
*========================*/
@@ -130,13 +138,22 @@
#endif
#endif
#if LV_USE_DRAW_VGLITE
/* Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */
#define LV_USE_VGLITE_BLIT_SPLIT 0
/*=================
* OPERATING SYSTEM
*=================*/
#if LV_USE_OS
/* Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */
#define LV_USE_VGLITE_DRAW_ASYNC 1
#endif
#if LV_USE_OS == LV_OS_CUSTOM
#define LV_OS_CUSTOM_INCLUDE <stdint.h>
/* Enable VGLite asserts. */
#define LV_USE_VGLITE_ASSERT 0
#endif
#if LV_USE_DRAW_PXP
/* Enable PXP asserts. */
#define LV_USE_PXP_ASSERT 0
#endif
/*=======================
@@ -330,7 +347,7 @@
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_24 1
#define LV_FONT_MONTSERRAT_26 0
#define LV_FONT_MONTSERRAT_28 0
#define LV_FONT_MONTSERRAT_30 0
@@ -779,15 +796,11 @@
#endif
/*Driver for /dev/dri/card*/
#define LV_USE_LINUX_DRM 0
/*Interface for TFT_eSPI*/
#define LV_USE_TFT_ESPI 0
/*Driver for evdev input devices*/
#define LV_USE_EVDEV 0
#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341)
/*==================
* EXAMPLES
*==================*/

View File

@@ -16,7 +16,11 @@ extern "C" {
#include "../../../../lv_conf_internal.h"
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM && !defined(__ASSEMBLY__) && LV_USE_DRAW_ARM2D
#ifdef LV_DRAW_SW_HELIUM_CUSTOM_INCLUDE
#include LV_DRAW_SW_HELIUM_CUSTOM_INCLUDE
#endif
#if LV_USE_DRAW_ARM2D
#define __ARM_2D_IMPL__
#include "arm_2d.h"
@@ -33,149 +37,245 @@ extern "C" {
* DEFINES
*********************/
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565(dsc) \
_lv_color_blend_to_rgb565_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA(dsc) \
_lv_color_blend_to_rgb565_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK(dsc) \
_lv_color_blend_to_rgb565_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_color_blend_to_rgb565_mix_mask_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565(dsc) \
_lv_rgb565_blend_normal_to_rgb565_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc) \
_lv_rgb565_blend_normal_to_rgb565_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc) \
_lv_rgb565_blend_normal_to_rgb565_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_with_opa_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_with_mask_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565(dsc) \
_lv_argb8888_blend_normal_to_rgb565_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc) \
_lv_argb8888_blend_normal_to_rgb565_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc) \
_lv_argb8888_blend_normal_to_rgb565_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_with_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_with_mask_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_mix_mask_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_with_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_with_mask_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_helium(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_with_opa_helium(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_with_mask_helium(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_helium(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_with_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_with_mask_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_helium(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888(dsc) \
_lv_color_blend_to_argb8888_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA(dsc) \
_lv_color_blend_to_argb8888_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK(dsc) \
_lv_color_blend_to_argb8888_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_color_blend_to_argb8888_mix_mask_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888(dsc) \
_lv_rgb565_blend_normal_to_argb8888_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc) \
_lv_rgb565_blend_normal_to_argb8888_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc) \
_lv_rgb565_blend_normal_to_argb8888_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_with_opa_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_with_mask_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_helium(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888(dsc) \
_lv_argb8888_blend_normal_to_argb8888_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc) \
_lv_argb8888_blend_normal_to_argb8888_with_opa_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc) \
_lv_argb8888_blend_normal_to_argb8888_with_mask_helium(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_helium(dsc)
#endif
/**********************
* TYPEDEFS
@@ -1336,7 +1436,7 @@ static inline lv_result_t _lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_hel
* MACROS
**********************/
#endif /*LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM && !defined(__ASSEMBLY__)*/
#endif /* LV_USE_DRAW_ARM2D */
#ifdef __cplusplus
} /*extern "C"*/

View File

@@ -67,22 +67,67 @@ LV_ATTRIBUTE_FAST_MEM static inline void * drawbuf_next_row(const void * buf, ui
* MACROS
**********************/
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_NONE
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif

View File

@@ -54,22 +54,67 @@ LV_ATTRIBUTE_FAST_MEM static inline void * drawbuf_next_row(const void * buf, ui
* MACROS
**********************/
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_NONE
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif

View File

@@ -56,22 +56,67 @@ LV_ATTRIBUTE_FAST_MEM static inline void * drawbuf_next_row(const void * buf, ui
* MACROS
**********************/
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_NONE
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(...) LV_RESULT_INVALID
#endif

View File

@@ -16,155 +16,254 @@ extern "C" {
#include "../../../../lv_conf_internal.h"
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_NEON && !defined(__ASSEMBLY__)
#ifdef LV_DRAW_SW_NEON_CUSTOM_INCLUDE
#include LV_DRAW_SW_NEON_CUSTOM_INCLUDE
#endif
/*********************
* DEFINES
*********************/
#if !defined(__ASSEMBLY__)
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565(dsc) \
_lv_color_blend_to_rgb565_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_OPA(dsc) \
_lv_color_blend_to_rgb565_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_WITH_MASK(dsc) \
_lv_color_blend_to_rgb565_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_color_blend_to_rgb565_mix_mask_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565(dsc) \
_lv_rgb565_blend_normal_to_rgb565_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc) \
_lv_rgb565_blend_normal_to_rgb565_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc) \
_lv_rgb565_blend_normal_to_rgb565_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_with_opa_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_with_mask_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565(dsc) \
_lv_argb8888_blend_normal_to_rgb565_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_OPA(dsc) \
_lv_argb8888_blend_normal_to_rgb565_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_WITH_MASK(dsc) \
_lv_argb8888_blend_normal_to_rgb565_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB565_MIX_MASK_OPA(dsc) \
_lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_with_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_with_mask_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_color_blend_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_neon(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size, src_px_size) \
_lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_OPA(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_with_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_WITH_MASK(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_with_mask_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_RGB888_MIX_MASK_OPA(dsc, dst_px_size) \
_lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_neon(dsc, dst_px_size)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888(dsc) \
_lv_color_blend_to_argb8888_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_OPA(dsc) \
_lv_color_blend_to_argb8888_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_WITH_MASK(dsc) \
_lv_color_blend_to_argb8888_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_COLOR_BLEND_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_color_blend_to_argb8888_mix_mask_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888(dsc) \
_lv_rgb565_blend_normal_to_argb8888_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc) \
_lv_rgb565_blend_normal_to_argb8888_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc) \
_lv_rgb565_blend_normal_to_argb8888_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB565_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_rgb565_blend_normal_to_argb8888_mix_mask_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_with_opa_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_with_mask_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_RGB888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc, src_px_size) \
_lv_rgb888_blend_normal_to_argb8888_mix_mask_opa_neon(dsc, src_px_size)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888(dsc) \
_lv_argb8888_blend_normal_to_argb8888_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_OPA(dsc) \
_lv_argb8888_blend_normal_to_argb8888_with_opa_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_WITH_MASK(dsc) \
_lv_argb8888_blend_normal_to_argb8888_with_mask_neon(dsc)
#endif
#ifndef LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA
#define LV_DRAW_SW_ARGB8888_BLEND_NORMAL_TO_ARGB8888_MIX_MASK_OPA(dsc) \
_lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neon(dsc)
#endif
/**********************
* TYPEDEFS
@@ -1183,12 +1282,12 @@ static inline lv_result_t _lv_argb8888_blend_normal_to_argb8888_mix_mask_opa_neo
return LV_RESULT_OK;
}
#endif /* !defined(__ASSEMBLY__) */
/**********************
* MACROS
**********************/
#endif /*LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_NEON && !defined(__ASSEMBLY__)*/
#ifdef __cplusplus
} /*extern "C"*/
#endif

View File

@@ -0,0 +1,568 @@
/**
* @file lv_draw_sw_helium.h
*
*/
#ifndef LV_DRAW_SW_HELIUM_H
#define LV_DRAW_SW_HELIUM_H
#ifdef __cplusplus
extern "C" {
#endif
/* *INDENT-OFF* */
/*********************
* INCLUDES
*********************/
#include "../../../lv_conf_internal.h"
#ifdef LV_DRAW_SW_HELIUM_CUSTOM_INCLUDE
#include LV_DRAW_SW_HELIUM_CUSTOM_INCLUDE
#endif
#if LV_USE_DRAW_ARM2D
#define __ARM_2D_IMPL__
#include "arm_2d.h"
#include "__arm_2d_impl.h"
#if defined(__IS_COMPILER_ARM_COMPILER_5__)
#pragma diag_suppress 174,177,188,68,513,144,1296
#elif defined(__IS_COMPILER_IAR__)
#pragma diag_suppress=Pa093
#elif defined(__IS_COMPILER_GCC__)
#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
#endif
/*********************
* DEFINES
*********************/
#ifndef LV_DRAW_SW_RGB565_SWAP
#define LV_DRAW_SW_RGB565_SWAP(__buf_ptr, __buf_size_px) \
_lv_draw_sw_rgb565_swap_helium((__buf_ptr), (__buf_size_px))
#endif
#ifndef LV_DRAW_SW_IMAGE
#define LV_DRAW_SW_IMAGE(__transformed, \
__cf, \
__src_buf, \
__img_coords, \
__src_stride, \
__blend_area, \
__draw_unit, \
__draw_dsc) \
_lv_draw_sw_image_helium( (__transformed), \
(__cf), \
(uint8_t *)(__src_buf), \
(__img_coords), \
(__src_stride), \
(__blend_area), \
(__draw_unit), \
(__draw_dsc))
#endif
#ifndef LV_DRAW_SW_RGB565_RECOLOR
#define LV_DRAW_SW_RGB565_RECOLOR(__src_buf, __blend_area, __color, __opa) \
_lv_draw_sw_image_recolor_rgb565( (__src_buf), \
&(__blend_area), \
(__color), \
(__opa))
#endif
#ifndef LV_DRAW_SW_RGB888_RECOLOR
#define LV_DRAW_SW_RGB888_RECOLOR( __src_buf, \
__blend_area, \
__color, \
__opa, \
__cf) \
_lv_draw_sw_image_recolor_rgb888( (__src_buf), \
&(__blend_area), \
(__color), \
(__opa), \
(__cf))
#endif
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
extern void arm_2d_helper_swap_rgb16(uint16_t * phwBuffer, uint32_t wCount);
/**********************
* MACROS
**********************/
#define __RECOLOUR_BEGIN() \
do { \
lv_color_t *rgb_tmp_buf = NULL; \
if(draw_dsc->recolor_opa > LV_OPA_MIN) { \
if(LV_COLOR_FORMAT_RGB565 == des_cf) { \
rgb_tmp_buf \
= lv_malloc(src_w * src_h * sizeof(uint16_t)); \
if (NULL == rgb_tmp_buf) { \
LV_LOG_WARN( \
"Failed to allocate memory for accelerating recolor, " \
"use normal route instead."); \
break; \
} \
lv_memcpy( rgb_tmp_buf, \
src_buf, \
src_w * src_h * sizeof(uint16_t)); \
arm_2d_size_t copy_size = { \
.iWidth = src_w, \
.iHeight = src_h, \
}; \
/* apply re-color */ \
__arm_2d_impl_rgb565_colour_filling_with_opacity( \
(uint16_t *)rgb_tmp_buf, \
src_w, \
&copy_size, \
lv_color_to_u16(draw_dsc->recolor), \
draw_dsc->recolor_opa); \
\
/* replace src_buf for the following operation */ \
src_buf = (const uint8_t *)rgb_tmp_buf; \
} \
else if(LV_COLOR_FORMAT_XRGB8888 == des_cf) { \
rgb_tmp_buf \
= lv_malloc(src_w * src_h * sizeof(uint32_t)); \
if (NULL == rgb_tmp_buf) { \
LV_LOG_WARN( \
"Failed to allocate memory for accelerating recolor, " \
"use normal route instead."); \
break; \
} \
lv_memcpy( rgb_tmp_buf, \
src_buf, \
src_w * src_h * sizeof(uint32_t)); \
arm_2d_size_t copy_size = { \
.iWidth = src_w, \
.iHeight = src_h, \
}; \
/* apply re-color */ \
__arm_2d_impl_cccn888_colour_filling_with_opacity( \
(uint32_t *)rgb_tmp_buf, \
src_w, \
&copy_size, \
lv_color_to_u32(draw_dsc->recolor), \
draw_dsc->recolor_opa); \
\
/* replace src_buf for the following operation */ \
src_buf = (const uint8_t *)rgb_tmp_buf; \
} \
} \
do {
#define __RECOLOUR_END() \
} while(0); \
if (NULL != rgb_tmp_buf) { \
lv_free(rgb_tmp_buf); \
} \
} while(0);
static inline lv_result_t _lv_draw_sw_rgb565_swap_helium(void * buf, uint32_t buf_size_px)
{
arm_2d_helper_swap_rgb16((uint16_t *)buf, buf_size_px);
return LV_RESULT_OK;
}
static inline lv_result_t _lv_draw_sw_image_helium(
bool is_transform,
lv_color_format_t src_cf,
const uint8_t *src_buf,
const lv_area_t * coords,
int32_t src_stride,
const lv_area_t * des_area,
lv_draw_unit_t * draw_unit,
const lv_draw_image_dsc_t * draw_dsc)
{
lv_result_t result = LV_RESULT_INVALID;
lv_layer_t * layer = draw_unit->target_layer;
lv_color_format_t des_cf = layer->color_format;
static bool arm_2d_initialized = false;
if (!arm_2d_initialized) {
arm_2d_initialized = true;
arm_2d_init();
}
do {
if (!is_transform) {
break;
}
if(draw_dsc->scale_x != draw_dsc->scale_y) {
break;
}
/* filter the unsupported colour format combination */
if((LV_COLOR_FORMAT_RGB565 == des_cf)
&& !( (LV_COLOR_FORMAT_RGB565 == src_cf)
|| (LV_COLOR_FORMAT_RGB565A8 == src_cf))) {
break;
}
if((LV_COLOR_FORMAT_XRGB8888 == des_cf)
&& !( (LV_COLOR_FORMAT_ARGB8888 == src_cf)
|| (LV_COLOR_FORMAT_XRGB8888 == src_cf))) {
break;
}
/* ------------- prepare parameters for arm-2d APIs - BEGIN --------- */
lv_area_t blend_area;
if(!_lv_area_intersect(&blend_area, des_area, draw_unit->clip_area)) {
break;
}
int32_t src_w = lv_area_get_width(coords);
int32_t src_h = lv_area_get_height(coords);
arm_2d_size_t src_size = {
.iWidth = (int16_t)src_w,
.iHeight = (int16_t)src_h,
};
// arm_2d_size_t des_size;
// do{
// int32_t des_w = lv_area_get_width(&blend_area);
// int32_t des_h = lv_area_get_height(&blend_area);
// LV_ASSERT(des_w <= INT16_MAX);
// LV_ASSERT(des_h <= INT16_MAX);
// des_size.iWidth = (int16_t)des_w;
// des_size.iHeight = (int16_t)des_h;
// } while(0);
//
// arm_2d_size_t copy_size = {
// .iWidth = MIN(des_size.iWidth, src_size.iWidth),
// .iHeight = MIN(des_size.iHeight, src_size.iHeight),
// };
//
// int32_t des_stride = lv_draw_buf_width_to_stride(
// lv_area_get_width(&layer->buf_area),
// des_cf);
// uint8_t *des_buf_moved = (uint8_t *)lv_draw_layer_go_to_xy(
// layer,
// blend_area.x1 - layer->buf_area.x1,
// blend_area.y1 - layer->buf_area.y1);
uint8_t *des_buf = (uint8_t *)layer->buf;
uint8_t opa = draw_dsc->opa;
/* ------------- prepare parameters for arm-2d APIs - END ----------- */
__RECOLOUR_BEGIN()
static arm_2d_tile_t target_tile_origin;
static arm_2d_tile_t target_tile;
arm_2d_region_t clip_region;
static arm_2d_region_t target_region;
target_region = (arm_2d_region_t) {
.tLocation = {
.iX = (int16_t)(coords->x1 - draw_unit->clip_area->x1),
.iY = (int16_t)(coords->y1 - draw_unit->clip_area->y1),
},
.tSize = src_size,
};
target_tile_origin = (arm_2d_tile_t) {
.tRegion = {
.tSize = {
.iWidth = (int16_t)lv_area_get_width(&layer->buf_area),
.iHeight = (int16_t)lv_area_get_height(&layer->buf_area),
},
},
.tInfo = {
.bIsRoot = true,
},
.phwBuffer = (uint16_t *)des_buf,
};
clip_region = (arm_2d_region_t) {
.tLocation = {
.iX = (int16_t)(draw_unit->clip_area->x1 - layer->buf_area.x1),
.iY = (int16_t)(draw_unit->clip_area->y1 - layer->buf_area.y1),
},
.tSize = {
.iWidth = (int16_t)lv_area_get_width(draw_unit->clip_area),
.iHeight = (int16_t)lv_area_get_height(draw_unit->clip_area),
},
};
arm_2d_tile_generate_child(&target_tile_origin,
&clip_region,
&target_tile,
false);
static arm_2d_tile_t source_tile;
source_tile = (arm_2d_tile_t) {
.tRegion = {
.tSize = {
.iWidth = (int16_t)src_w,
.iHeight = (int16_t)src_h,
},
},
.tInfo = {
.bIsRoot = true,
},
.pchBuffer = (uint8_t *)src_buf,
};
static arm_2d_location_t source_center, target_center;
source_center.iX = draw_dsc->pivot.x;
source_center.iY = draw_dsc->pivot.y;
target_center = target_region.tLocation;
target_center.iX += draw_dsc->pivot.x;
target_center.iY += draw_dsc->pivot.y;
if(LV_COLOR_FORMAT_A8 == src_cf) {
source_tile.tInfo.bHasEnforcedColour = true;
source_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_GRAY8;
if(LV_COLOR_FORMAT_RGB565 == des_cf) {
arm_2d_rgb565_fill_colour_with_mask_opacity_and_transform(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
lv_color_to_u16(draw_dsc->recolor),
opa,
&target_center
);
}
else if(LV_COLOR_FORMAT_XRGB8888 == des_cf) {
arm_2d_cccn888_fill_colour_with_mask_opacity_and_transform(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
lv_color_to_int(draw_dsc->recolor),
opa,
&target_center
);
}
else {
break;
}
}
else if(LV_COLOR_FORMAT_RGB565A8 == src_cf) {
LV_ASSERT(LV_COLOR_FORMAT_RGB565 == des_cf);
/* mask_buf = src_buf + src_stride * src_w / header->w * src_h; */
const uint8_t *mask_buf = src_buf + src_stride * src_h;
int32_t mask_stride = src_stride / 2;
static arm_2d_tile_t mask_tile;
mask_tile = source_tile;
mask_tile.tInfo.bHasEnforcedColour = true;
mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_COLOUR_GRAY8;
mask_tile.pchBuffer = (uint8_t *)mask_buf;
if(opa >= LV_OPA_MAX) {
arm_2d_rgb565_tile_transform_with_src_mask(
&source_tile,
&mask_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
&target_center
);
}
else {
arm_2d_rgb565_tile_transform_with_src_mask_and_opacity(
&source_tile,
&mask_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
opa,
&target_center
);
}
}
else if(LV_COLOR_FORMAT_RGB565 == src_cf) {
LV_ASSERT(LV_COLOR_FORMAT_RGB565 == des_cf);
if(opa >= LV_OPA_MAX) {
arm_2d_rgb565_tile_transform_only(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
&target_center
);
}
else {
arm_2d_rgb565_tile_transform_only_with_opacity(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
opa,
&target_center
);
}
}
else if(LV_COLOR_FORMAT_ARGB8888 == src_cf) {
LV_ASSERT(LV_COLOR_FORMAT_XRGB8888 == des_cf);
static arm_2d_tile_t mask_tile;
mask_tile = source_tile;
mask_tile.tInfo.bHasEnforcedColour = true;
mask_tile.tInfo.tColourInfo.chScheme = ARM_2D_CHANNEL_8in32;
mask_tile.pchBuffer = (uint8_t *)src_buf + 3;
if(opa >= LV_OPA_MAX) {
arm_2d_cccn888_tile_transform_with_src_mask(
&source_tile,
&mask_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
&target_center
);
}
else {
arm_2d_cccn888_tile_transform_with_src_mask_and_opacity(
&source_tile,
&mask_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
opa,
&target_center
);
}
}
else if(LV_COLOR_FORMAT_XRGB8888 == src_cf) {
LV_ASSERT(LV_COLOR_FORMAT_XRGB8888 == des_cf);
if(opa >= LV_OPA_MAX) {
arm_2d_cccn888_tile_transform_only(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
&target_center
);
}
else {
arm_2d_cccn888_tile_transform_only_with_opacity(
&source_tile,
&target_tile,
NULL,
source_center,
ARM_2D_ANGLE((draw_dsc->rotation / 10.0f)),
draw_dsc->scale_x / 256.0f,
opa,
&target_center
);
}
}
else {
break;
}
result = LV_RESULT_OK;
__RECOLOUR_END()
} while(0);
return result;
}
static inline lv_result_t _lv_draw_sw_image_recolor_rgb565(
const uint8_t *src_buf,
const lv_area_t * blend_area,
lv_color_t color,
lv_opa_t opa)
{
int32_t src_w = lv_area_get_width(blend_area);
int32_t src_h = lv_area_get_height(blend_area);
arm_2d_size_t copy_size = {
.iWidth = (int16_t)src_w,
.iHeight = (int16_t)src_h,
};
__arm_2d_impl_rgb565_colour_filling_with_opacity(
(uint16_t *)src_buf,
src_w,
&copy_size,
lv_color_to_u16(color),
opa);
return LV_RESULT_OK;
}
static inline lv_result_t _lv_draw_sw_image_recolor_rgb888(
const uint8_t *src_buf,
const lv_area_t * blend_area,
lv_color_t color,
lv_opa_t opa,
lv_color_format_t src_cf)
{
if(LV_COLOR_FORMAT_XRGB8888 != src_cf) {
return LV_RESULT_INVALID;
}
int32_t src_w = lv_area_get_width(blend_area);
int32_t src_h = lv_area_get_height(blend_area);
arm_2d_size_t copy_size = {
.iWidth = (int16_t)src_w,
.iHeight = (int16_t)src_h,
};
__arm_2d_impl_cccn888_colour_filling_with_opacity(
(uint32_t *)src_buf,
src_w,
&copy_size,
lv_color_to_u32(color),
opa);
return LV_RESULT_OK;
}
#endif /* LV_USE_DRAW_ARM2D */
/* *INDENT-ON* */
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif /*LV_DRAW_SW_HELIUM_H*/

View File

@@ -22,11 +22,58 @@
#include "../../libs/thorvg/thorvg_capi.h"
#endif
#endif
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM
#include "helium/lv_draw_sw_helium.h"
#elif LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM
#include LV_DRAW_SW_ASM_CUSTOM_INCLUDE
#endif
/*********************
* DEFINES
*********************/
#define DRAW_UNIT_ID_SW 1
#ifndef LV_DRAW_SW_RGB565_SWAP
#define LV_DRAW_SW_RGB565_SWAP(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE90_ARGB8888
#define LV_DRAW_SW_ROTATE90_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE180_ARGB8888
#define LV_DRAW_SW_ROTATE180_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE270_ARGB8888
#define LV_DRAW_SW_ROTATE270_ARGB8888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE90_RGB888
#define LV_DRAW_SW_ROTATE90_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE180_RGB888
#define LV_DRAW_SW_ROTATE180_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE270_RGB888
#define LV_DRAW_SW_ROTATE270_RGB888(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE90_RGB565
#define LV_DRAW_SW_ROTATE90_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE180_RGB565
#define LV_DRAW_SW_ROTATE180_RGB565(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_ROTATE270_RGB565
#define LV_DRAW_SW_ROTATE270_RGB565(...) LV_RESULT_INVALID
#endif
/**********************
* TYPEDEFS
**********************/
@@ -137,6 +184,8 @@ static int32_t lv_draw_sw_delete(lv_draw_unit_t * draw_unit)
void lv_draw_sw_rgb565_swap(void * buf, uint32_t buf_size_px)
{
if(LV_DRAW_SW_RGB565_SWAP(buf, buf_size_px) == LV_RESULT_OK) return;
uint32_t u32_cnt = buf_size_px / 2;
uint16_t * buf16 = buf;
uint32_t * buf32 = buf;
@@ -164,6 +213,7 @@ void lv_draw_sw_rgb565_swap(void * buf, uint32_t buf_size_px)
uint32_t e = buf_size_px - 1;
buf16[e] = ((buf16[e] & 0xff00) >> 8) | ((buf16[e] & 0x00ff) << 8);
}
}
void lv_draw_sw_rotate(const void * src, void * dest, int32_t src_width, int32_t src_height, int32_t src_sride,
@@ -392,6 +442,10 @@ static void rotate90_argb8888(const uint32_t * src, uint32_t * dst, int32_t srcW
int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE90_ARGB8888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
srcStride /= sizeof(uint32_t);
dstStride /= sizeof(uint32_t);
@@ -408,6 +462,10 @@ static void rotate90_argb8888(const uint32_t * src, uint32_t * dst, int32_t srcW
static void rotate180_argb8888(const uint32_t * src, uint32_t * dst, int32_t width, int32_t height, int32_t src_stride,
int32_t dest_stride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE180_ARGB8888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
src_stride /= sizeof(uint32_t);
dest_stride /= sizeof(uint32_t);
@@ -424,6 +482,10 @@ static void rotate270_argb8888(const uint32_t * src, uint32_t * dst, int32_t src
int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE270_ARGB8888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
srcStride /= sizeof(uint32_t);
dstStride /= sizeof(uint32_t);
@@ -440,6 +502,10 @@ static void rotate270_argb8888(const uint32_t * src, uint32_t * dst, int32_t src
static void rotate90_rgb888(const uint8_t * src, uint8_t * dst, int32_t srcWidth, int32_t srcHeight, int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE90_RGB888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
for(int32_t x = 0; x < srcWidth; ++x) {
for(int32_t y = 0; y < srcHeight; ++y) {
int32_t srcIndex = y * srcStride + x * 3;
@@ -454,6 +520,9 @@ static void rotate90_rgb888(const uint8_t * src, uint8_t * dst, int32_t srcWidth
static void rotate180_rgb888(const uint8_t * src, uint8_t * dst, int32_t width, int32_t height, int32_t src_stride,
int32_t dest_stride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE180_RGB888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
for(int32_t y = 0; y < height; ++y) {
for(int32_t x = 0; x < width; ++x) {
@@ -469,6 +538,10 @@ static void rotate180_rgb888(const uint8_t * src, uint8_t * dst, int32_t width,
static void rotate270_rgb888(const uint8_t * src, uint8_t * dst, int32_t width, int32_t height, int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE270_RGB888(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
for(int32_t x = 0; x < width; ++x) {
for(int32_t y = 0; y < height; ++y) {
int32_t srcIndex = y * srcStride + x * 3;
@@ -484,6 +557,10 @@ static void rotate90_rgb565(const uint16_t * src, uint16_t * dst, int32_t srcWid
int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE90_RGB565(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
srcStride /= sizeof(uint16_t);
dstStride /= sizeof(uint16_t);
@@ -500,6 +577,10 @@ static void rotate90_rgb565(const uint16_t * src, uint16_t * dst, int32_t srcWid
static void rotate180_rgb565(const uint16_t * src, uint16_t * dst, int32_t width, int32_t height, int32_t src_stride,
int32_t dest_stride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE180_RGB565(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
src_stride /= sizeof(uint16_t);
dest_stride /= sizeof(uint16_t);
@@ -516,6 +597,10 @@ static void rotate270_rgb565(const uint16_t * src, uint16_t * dst, int32_t srcWi
int32_t srcStride,
int32_t dstStride)
{
if(LV_RESULT_OK == LV_DRAW_SW_ROTATE270_RGB565(src, dst, srcWidth, srcHeight, srcStride, dstStride)) {
return ;
}
srcStride /= sizeof(uint16_t);
dstStride /= sizeof(uint16_t);

View File

@@ -19,11 +19,29 @@
#include "../../stdlib/lv_string.h"
#include "../../core/lv_global.h"
#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM
#include "helium/lv_draw_sw_helium.h"
#elif LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM
#include LV_DRAW_SW_ASM_CUSTOM_INCLUDE
#endif
/*********************
* DEFINES
*********************/
#define MAX_BUF_SIZE (uint32_t) (4 * lv_display_get_horizontal_resolution(_lv_refr_get_disp_refreshing()) * lv_color_format_get_size(lv_display_get_color_format(_lv_refr_get_disp_refreshing())))
#ifndef LV_DRAW_SW_IMAGE
#define LV_DRAW_SW_IMAGE(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB565_RECOLOR
#define LV_DRAW_SW_RGB565_RECOLOR(...) LV_RESULT_INVALID
#endif
#ifndef LV_DRAW_SW_RGB888_RECOLOR
#define LV_DRAW_SW_RGB888_RECOLOR(...) LV_RESULT_INVALID
#endif
/**********************
* TYPEDEFS
**********************/
@@ -225,8 +243,17 @@ static void img_draw_core(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t
blend_dsc.src_color_format = cf;
lv_draw_sw_blend(draw_unit, &blend_dsc);
}
/*In the other cases every pixel need to be checked one-by-one*/
else {
/* check whethr it is possible to accelerate the operation in synchronouse mode */
else if(LV_RESULT_INVALID == LV_DRAW_SW_IMAGE(transformed, /* whether require transform */
cf, /* image format */
src_buf, /* image buffer */
img_coords, /* src_h, src_w, src_x1, src_y1 */
img_stride, /* image stride */
clipped_img_area, /* blend area */
draw_unit, /* target buffer, buffer width, buffer height, buffer stride */
draw_dsc)) { /* opa, recolour_opa and colour */
/*In the other cases every pixel need to be checked one-by-one*/
lv_area_t blend_area = *clipped_img_area;
blend_dsc.blend_area = &blend_area;
@@ -240,6 +267,7 @@ static void img_draw_core(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t
if(cf == LV_COLOR_FORMAT_RGB888 || cf == LV_COLOR_FORMAT_XRGB8888) cf_final = LV_COLOR_FORMAT_ARGB8888;
else if(cf == LV_COLOR_FORMAT_RGB565) cf_final = LV_COLOR_FORMAT_RGB565A8;
}
uint8_t * tmp_buf;
uint32_t px_size = lv_color_format_get_size(cf_final);
int32_t buf_h;
@@ -255,6 +283,7 @@ static void img_draw_core(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t
if(buf_h > blend_h) buf_h = blend_h;
tmp_buf = lv_malloc(buf_stride * buf_h);
}
LV_ASSERT_MALLOC(tmp_buf);
blend_dsc.src_buf = tmp_buf;
blend_dsc.src_color_format = cf_final;
@@ -330,31 +359,35 @@ static void img_draw_core(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t
lv_opa_t mix = draw_dsc->recolor_opa;
lv_opa_t mix_inv = 255 - mix;
if(cf_final == LV_COLOR_FORMAT_RGB565A8 || cf_final == LV_COLOR_FORMAT_RGB565) {
uint16_t c_mult[3];
c_mult[0] = (color.blue >> 3) * mix;
c_mult[1] = (color.green >> 2) * mix;
c_mult[2] = (color.red >> 3) * mix;
uint16_t * buf16 = (uint16_t *)tmp_buf;
int32_t i;
int32_t size = lv_area_get_size(&blend_area);
for(i = 0; i < size; i++) {
buf16[i] = (((c_mult[2] + ((buf16[i] >> 11) & 0x1F) * mix_inv) << 3) & 0xF800) +
(((c_mult[1] + ((buf16[i] >> 5) & 0x3F) * mix_inv) >> 3) & 0x07E0) +
((c_mult[0] + (buf16[i] & 0x1F) * mix_inv) >> 8);
if(LV_RESULT_INVALID == LV_DRAW_SW_RGB565_RECOLOR(tmp_buf, blend_area, color, mix)) {
uint16_t c_mult[3];
c_mult[0] = (color.blue >> 3) * mix;
c_mult[1] = (color.green >> 2) * mix;
c_mult[2] = (color.red >> 3) * mix;
uint16_t * buf16 = (uint16_t *)tmp_buf;
int32_t i;
int32_t size = lv_area_get_size(&blend_area);
for(i = 0; i < size; i++) {
buf16[i] = (((c_mult[2] + ((buf16[i] >> 11) & 0x1F) * mix_inv) << 3) & 0xF800) +
(((c_mult[1] + ((buf16[i] >> 5) & 0x3F) * mix_inv) >> 3) & 0x07E0) +
((c_mult[0] + (buf16[i] & 0x1F) * mix_inv) >> 8);
}
}
}
else if(cf_final != LV_COLOR_FORMAT_A8) {
uint32_t size = lv_area_get_size(&blend_area);
uint32_t i;
uint16_t c_mult[3];
c_mult[0] = color.blue * mix;
c_mult[1] = color.green * mix;
c_mult[2] = color.red * mix;
uint8_t * tmp_buf_2 = tmp_buf;
for(i = 0; i < size * px_size; i += px_size) {
tmp_buf_2[i + 0] = (c_mult[0] + (tmp_buf_2[i + 0] * mix_inv)) >> 8;
tmp_buf_2[i + 1] = (c_mult[1] + (tmp_buf_2[i + 1] * mix_inv)) >> 8;
tmp_buf_2[i + 2] = (c_mult[2] + (tmp_buf_2[i + 2] * mix_inv)) >> 8;
if(LV_RESULT_INVALID == LV_DRAW_SW_RGB888_RECOLOR(tmp_buf, blend_area, color, mix, cf_final)) {
uint32_t size = lv_area_get_size(&blend_area);
uint32_t i;
uint16_t c_mult[3];
c_mult[0] = color.blue * mix;
c_mult[1] = color.green * mix;
c_mult[2] = color.red * mix;
uint8_t * tmp_buf_2 = tmp_buf;
for(i = 0; i < size * px_size; i += px_size) {
tmp_buf_2[i + 0] = (c_mult[0] + (tmp_buf_2[i + 0] * mix_inv)) >> 8;
tmp_buf_2[i + 1] = (c_mult[1] + (tmp_buf_2[i + 1] * mix_inv)) >> 8;
tmp_buf_2[i + 2] = (c_mult[2] + (tmp_buf_2[i + 2] * mix_inv)) >> 8;
}
}
}
}