diff options
Diffstat (limited to 'src/draw/arm2d/lv_gpu_arm2d.c')
-rw-r--r-- | src/draw/arm2d/lv_gpu_arm2d.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/draw/arm2d/lv_gpu_arm2d.c b/src/draw/arm2d/lv_gpu_arm2d.c index 132268ab9..c42f23872 100644 --- a/src/draw/arm2d/lv_gpu_arm2d.c +++ b/src/draw/arm2d/lv_gpu_arm2d.c @@ -3,6 +3,24 @@ * */ +/* + * Copyright (C) 2010-2023 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + /********************* * INCLUDES *********************/ @@ -94,6 +112,8 @@ arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare #define arm_2d_tile_transform_with_opacity_prepare \ arm_2dp_rgb565_tile_transform_with_opacity_prepare +#define arm_2d_tile_transform_only_with_opacity_prepare \ + arm_2dp_rgb565_tile_transform_only_with_opacity_prepare #define arm_2d_tile_transform_prepare \ arm_2dp_rgb565_tile_transform_prepare @@ -131,6 +151,8 @@ arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare #define arm_2d_tile_transform_with_opacity_prepare \ arm_2dp_cccn888_tile_transform_with_opacity_prepare +#define arm_2d_tile_transform_only_with_opacity_prepare \ + arm_2dp_cccn888_tile_transform_only_with_opacity_prepare #define arm_2d_tile_transform_prepare \ arm_2dp_cccn888_tile_transform_prepare @@ -317,7 +339,7 @@ lv_color_t *rgb_tmp_buf = NULL; \ if(draw_dsc->recolor_opa > LV_OPA_MIN) { \ rgb_tmp_buf \ - = lv_malloc(src_w * src_h * sizeof(lv_color_t)); \ + = lv_mem_buf_get(src_w * src_h * sizeof(lv_color_t)); \ if (NULL == rgb_tmp_buf) { \ LV_LOG_WARN( \ "Failed to allocate memory for accelerating recolour, " \ @@ -345,7 +367,7 @@ #define __RECOLOUR_END() \ } while(0); \ if (NULL != rgb_tmp_buf) { \ - lv_free(rgb_tmp_buf); \ + lv_mem_buf_release(rgb_tmp_buf); \ } \ } while(0); \ src_buf = src_buf_org; @@ -1288,6 +1310,24 @@ static void lv_draw_arm2d_img_decoded(struct _lv_draw_ctx_t * draw_ctx, ); is_accelerated = true; } + #if ARM_2D_VERISON >= 10103 + else if (LV_IMG_CF_TRUE_COLOR == cf) { + __ARM_2D_PREPARE_TRANS_AND_TARGET_REGION( + arm_2d_tile_transform_only_with_opacity_prepare, + &source_tile, + source_center, + ARM_2D_ANGLE((draw_dsc->angle / 10.0f)), + draw_dsc->zoom / 256.0f, + blend_dsc.opa); + + arm_2d_tile_transform( + &target_tile, + &target_region, + NULL + ); + is_accelerated = true; + } + #endif else if (LV_IMG_CF_RGB565A8 == cf) { static arm_2d_tile_t mask_tile; mask_tile = source_tile; |