diff --git a/src/draw/sw/arm2d/lv_draw_sw_arm2d.h b/src/draw/sw/arm2d/lv_draw_sw_arm2d.h index 9c09480d47..77c6cc4de9 100644 --- a/src/draw/sw/arm2d/lv_draw_sw_arm2d.h +++ b/src/draw/sw/arm2d/lv_draw_sw_arm2d.h @@ -17,6 +17,7 @@ extern "C" { *********************/ #include "../../../lv_conf_internal.h" +#include "../../../misc/lv_area_private.h" #if LV_USE_DRAW_ARM2D_SYNC diff --git a/src/draw/sw/blend/arm2d/lv_blend_arm2d.h b/src/draw/sw/blend/arm2d/lv_blend_arm2d.h index 77b4e2bc13..7e9720ee3a 100644 --- a/src/draw/sw/blend/arm2d/lv_blend_arm2d.h +++ b/src/draw/sw/blend/arm2d/lv_blend_arm2d.h @@ -29,6 +29,12 @@ extern "C" { #elif defined(__IS_COMPILER_GCC__) #pragma GCC diagnostic ignored "-Wdiscarded-qualifiers" #endif + + +#if ARM_2D_VERSION < 10106ul +#error Please upgrade to Arm-2D v1.1.6 or above +#endif + /********************* * DEFINES *********************/ @@ -301,20 +307,15 @@ static inline lv_result_t lv_rgb565_blend_normal_to_rgb565_mix_mask_opa_arm2d(lv int16_t des_stride = dsc->dest_stride / sizeof(uint16_t); int16_t src_stride = dsc->src_stride / sizeof(uint16_t); - __arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - 0x00, - 255 - dsc->opa); - - __arm_2d_impl_rgb565_src_msk_copy((uint16_t *)dsc->src_buf, - src_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - &draw_size); + __arm_2d_impl_rgb565_tile_copy_with_src_mask_and_opacity((uint16_t *)dsc->src_buf, + src_stride, + (uint8_t *)dsc->mask_buf, + dsc->mask_stride, + &draw_size, + (uint16_t *)dsc->dest_buf, + des_stride, + &draw_size, + dsc->opa); return LV_RESULT_OK; } @@ -428,20 +429,15 @@ static inline lv_result_t lv_rgb888_blend_normal_to_rgb565_mix_mask_opa_arm2d(lv des_stride, &draw_size); - __arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - 0x00, - 255 - dsc->opa); - - __arm_2d_impl_rgb565_src_msk_copy(tmp_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - &draw_size); + __arm_2d_impl_rgb565_tile_copy_with_src_mask_and_opacity(tmp_buf, + des_stride, + (uint8_t *)dsc->mask_buf, + dsc->mask_stride, + &draw_size, + (uint16_t *)dsc->dest_buf, + des_stride, + &draw_size, + dsc->opa); lv_free(tmp_buf); return LV_RESULT_OK; @@ -453,37 +449,12 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_arm2d(lv_draw_sw_bl int16_t des_stride = dsc->dest_stride / sizeof(uint16_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul - __arm_2d_impl_ccca8888_to_rgb565((uint32_t *)dsc->src_buf, src_stride, (uint16_t *)dsc->dest_buf, des_stride, &draw_size); -#else - uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h); - if(NULL == tmp_buf) { - return LV_RESULT_INVALID; - } - - __arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf, - src_stride, - (uint16_t *)tmp_buf, - des_stride, - &draw_size); - - __arm_2d_impl_rgb565_src_chn_msk_copy(tmp_buf, - des_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - &draw_size); - - lv_free(tmp_buf); -#endif return LV_RESULT_OK; } @@ -493,7 +464,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_opa_arm2d(lv_d int16_t des_stride = dsc->dest_stride / sizeof(uint16_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul __arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_opacity((uint32_t *)dsc->src_buf, src_stride, (uint16_t *)dsc->dest_buf, @@ -501,50 +471,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_opa_arm2d(lv_d &draw_size, dsc->opa); -#else - uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h); - if(NULL == tmp_buf) { - return LV_RESULT_INVALID; - } - - - uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h); - if(NULL == tmp_msk) { - lv_free(tmp_buf); - return LV_RESULT_INVALID; - } - - /* get rgb565 */ - __arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf, - src_stride, - (uint16_t *)tmp_buf, - des_stride, - &draw_size); - - lv_memzero(tmp_msk, des_stride * dsc->dest_h); - - /* get mask */ - __arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk, - des_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - 0xFF, - dsc->opa); - - __arm_2d_impl_rgb565_src_msk_copy(tmp_buf, - des_stride, - tmp_msk, - des_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - &draw_size); - - lv_free(tmp_msk); - lv_free(tmp_buf); -#endif - return LV_RESULT_OK; } @@ -554,8 +480,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_mask_arm2d(lv_ int16_t des_stride = dsc->dest_stride / sizeof(uint16_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul - __arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_src_mask((uint32_t *)dsc->src_buf, src_stride, (uint8_t *)dsc->mask_buf, @@ -564,49 +488,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_with_mask_arm2d(lv_ (uint16_t *)dsc->dest_buf, des_stride, &draw_size); -#else - uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h); - if(NULL == tmp_buf) { - return LV_RESULT_INVALID; - } - uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h); - if(NULL == tmp_msk) { - lv_free(tmp_buf); - return LV_RESULT_INVALID; - } - - /* get rgb565 */ - __arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf, - src_stride, - (uint16_t *)tmp_buf, - des_stride, - &draw_size); - - lv_memzero(tmp_msk, des_stride * dsc->dest_h); - - /* get mask */ - __arm_2d_impl_gray8_colour_filling_channel_mask(tmp_msk, - des_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - 0xFF); - - __arm_2d_impl_rgb565_masks_copy(tmp_buf, - des_stride, - tmp_msk, - des_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - &draw_size); - - lv_free(tmp_msk); - lv_free(tmp_buf); -#endif return LV_RESULT_OK; } @@ -617,7 +498,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_arm2d( int16_t des_stride = dsc->dest_stride / sizeof(uint16_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul __arm_2d_impl_ccca8888_tile_copy_to_rgb565_with_src_mask_and_opacity((uint32_t *)dsc->src_buf, src_stride, (uint8_t *)dsc->mask_buf, @@ -627,50 +507,7 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb565_mix_mask_opa_arm2d( des_stride, &draw_size, dsc->opa); -#else - uint16_t * tmp_buf = (uint16_t *)lv_malloc(dsc->dest_stride * dsc->dest_h); - if(NULL == tmp_buf) { - return LV_RESULT_INVALID; - } - uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h); - if(NULL == tmp_msk) { - lv_free(tmp_buf); - return LV_RESULT_INVALID; - } - /* get rgb565 */ - __arm_2d_impl_cccn888_to_rgb565((uint32_t *)dsc->src_buf, - src_stride, - (uint16_t *)tmp_buf, - des_stride, - &draw_size); - - lv_memzero(tmp_msk, des_stride * dsc->dest_h); - - /* get mask */ - __arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk, - des_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - 0xFF, - dsc->opa); - - __arm_2d_impl_rgb565_masks_copy(tmp_buf, - des_stride, - tmp_msk, - des_stride, - &draw_size, - (uint16_t *)dsc->dest_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - &draw_size); - - lv_free(tmp_msk); - lv_free(tmp_buf); -#endif return LV_RESULT_OK; } @@ -861,20 +698,15 @@ static inline lv_result_t lv_rgb565_blend_normal_to_rgb888_mix_mask_opa_arm2d(lv des_stride, &draw_size); - __arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - 0x00, - 255 - dsc->opa); - - __arm_2d_impl_cccn888_src_msk_copy(tmp_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - &draw_size); + __arm_2d_impl_cccn888_tile_copy_with_src_mask_and_opacity(tmp_buf, + des_stride, + (uint8_t *)dsc->mask_buf, + dsc->mask_stride, + &draw_size, + (uint32_t *)dsc->dest_buf, + des_stride, + &draw_size, + dsc->opa); lv_free(tmp_buf); return LV_RESULT_OK; @@ -955,20 +787,15 @@ static inline lv_result_t lv_rgb888_blend_normal_to_rgb888_mix_mask_opa_arm2d(lv int16_t des_stride = dsc->dest_stride / sizeof(uint32_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); - __arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - 0x00, - 255 - dsc->opa); - - __arm_2d_impl_cccn888_src_msk_copy((uint32_t *)dsc->src_buf, - src_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - &draw_size); + __arm_2d_impl_cccn888_tile_copy_with_src_mask_and_opacity((uint32_t *)dsc->src_buf, + src_stride, + (uint8_t *)dsc->mask_buf, + dsc->mask_stride, + &draw_size, + (uint32_t *)dsc->dest_buf, + des_stride, + &draw_size, + dsc->opa); return LV_RESULT_OK; } @@ -984,22 +811,12 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_arm2d(lv_draw_sw_bl int16_t des_stride = dsc->dest_stride / sizeof(uint32_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul __arm_2d_impl_ccca8888_to_cccn888((uint32_t *)dsc->src_buf, src_stride, (uint32_t *)dsc->dest_buf, des_stride, &draw_size); -#else - __arm_2d_impl_cccn888_src_chn_msk_copy((uint32_t *)dsc->src_buf, - src_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - &draw_size); -#endif + return LV_RESULT_OK; } @@ -1014,42 +831,13 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_opa_arm2d(lv_d int16_t des_stride = dsc->dest_stride / sizeof(uint32_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul - __arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_opacity((uint32_t *)dsc->src_buf, src_stride, (uint32_t *)dsc->dest_buf, des_stride, &draw_size, dsc->opa); -#else - uint8_t * tmp_msk = (uint8_t *)lv_malloc(des_stride * dsc->dest_h); - if(NULL == tmp_msk) { - return LV_RESULT_INVALID; - } - lv_memzero(tmp_msk, des_stride * dsc->dest_h); - - /* get mask */ - __arm_2d_impl_gray8_colour_filling_channel_mask_opacity(tmp_msk, - des_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - 0xFF, - dsc->opa); - - __arm_2d_impl_cccn888_src_msk_copy((uint32_t *)dsc->src_buf, - src_stride, - tmp_msk, - des_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - &draw_size); - - lv_free(tmp_msk); -#endif return LV_RESULT_OK; } @@ -1065,8 +853,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_mask_arm2d(lv_ int16_t des_stride = dsc->dest_stride / sizeof(uint32_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul - __arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_src_mask((uint32_t *)dsc->src_buf, src_stride, (uint8_t *)dsc->mask_buf, @@ -1075,19 +861,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_with_mask_arm2d(lv_ (uint32_t *)dsc->dest_buf, des_stride, &draw_size); -#else - __arm_2d_impl_cccn888_src_chn_msk_des_msk_copy((uint32_t *)dsc->src_buf, - src_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - &draw_size); -#endif return LV_RESULT_OK; } @@ -1103,8 +876,6 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_arm2d( int16_t des_stride = dsc->dest_stride / sizeof(uint32_t); int16_t src_stride = dsc->src_stride / sizeof(uint32_t); -#if ARM_2D_VERSION >= 10106ul - __arm_2d_impl_ccca8888_tile_copy_to_cccn888_with_src_mask_and_opacity((uint32_t *)dsc->src_buf, src_stride, (uint8_t *)dsc->mask_buf, @@ -1114,25 +885,7 @@ static inline lv_result_t lv_argb8888_blend_normal_to_rgb888_mix_mask_opa_arm2d( des_stride, &draw_size, dsc->opa); -#else - __arm_2d_impl_gray8_colour_filling_with_opacity((uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - 0x00, - 255 - dsc->opa); - __arm_2d_impl_cccn888_src_chn_msk_des_msk_copy((uint32_t *)dsc->src_buf, - src_stride, - (uint32_t *)((uintptr_t)(dsc->src_buf) + 3), - src_stride, - &draw_size, - (uint32_t *)dsc->dest_buf, - des_stride, - (uint8_t *)dsc->mask_buf, - dsc->mask_stride, - &draw_size, - &draw_size); -#endif return LV_RESULT_OK; }