aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/draw/vg_lite/lv_draw_vg_lite.c36
-rw-r--r--src/draw/vg_lite/lv_vg_lite_utils.c20
2 files changed, 44 insertions, 12 deletions
diff --git a/src/draw/vg_lite/lv_draw_vg_lite.c b/src/draw/vg_lite/lv_draw_vg_lite.c
index 5a6e52a81..07f1504db 100644
--- a/src/draw/vg_lite/lv_draw_vg_lite.c
+++ b/src/draw/vg_lite/lv_draw_vg_lite.c
@@ -83,6 +83,18 @@ void lv_draw_vg_lite_deinit(void)
* STATIC FUNCTIONS
**********************/
+static bool check_image_is_supported(const lv_draw_image_dsc_t * dsc)
+{
+ lv_image_header_t header;
+ lv_result_t res = lv_image_decoder_get_info(dsc->src, &header);
+ if(res != LV_RESULT_OK) {
+ LV_LOG_TRACE("get image info failed");
+ return false;
+ }
+
+ return lv_vg_lite_is_src_cf_supported(header.cf);
+}
+
static void draw_execute(lv_draw_vg_lite_unit_t * u)
{
lv_draw_task_t * t = u->task_act;
@@ -191,23 +203,33 @@ static int32_t draw_evaluate(lv_draw_unit_t * draw_unit, lv_draw_task_t * task)
case LV_DRAW_TASK_TYPE_FILL:
case LV_DRAW_TASK_TYPE_BORDER:
case LV_DRAW_TASK_TYPE_BOX_SHADOW:
- case LV_DRAW_TASK_TYPE_IMAGE:
case LV_DRAW_TASK_TYPE_LAYER:
case LV_DRAW_TASK_TYPE_LINE:
case LV_DRAW_TASK_TYPE_ARC:
case LV_DRAW_TASK_TYPE_TRIANGLE:
case LV_DRAW_TASK_TYPE_MASK_RECTANGLE:
- // case LV_DRAW_TASK_TYPE_MASK_BITMAP:
+
#if LV_USE_VECTOR_GRAPHIC
case LV_DRAW_TASK_TYPE_VECTOR:
#endif
- task->preference_score = 80;
- task->preferred_draw_unit_id = VG_LITE_DRAW_UNIT_ID;
- return 1;
- default:
break;
+
+ case LV_DRAW_TASK_TYPE_IMAGE: {
+ if(!check_image_is_supported(task->draw_dsc)) {
+ return 0;
+ }
+ }
+ break;
+
+ default:
+ /*The draw unit is not able to draw this task. */
+ return 0;
}
- return 0;
+
+ /* The draw unit is able to draw this task. */
+ task->preference_score = 80;
+ task->preferred_draw_unit_id = VG_LITE_DRAW_UNIT_ID;
+ return 1;
}
static int32_t draw_delete(lv_draw_unit_t * draw_unit)
diff --git a/src/draw/vg_lite/lv_vg_lite_utils.c b/src/draw/vg_lite/lv_vg_lite_utils.c
index bf3ee9840..73c517140 100644
--- a/src/draw/vg_lite/lv_vg_lite_utils.c
+++ b/src/draw/vg_lite/lv_vg_lite_utils.c
@@ -305,14 +305,18 @@ bool lv_vg_lite_is_dest_cf_supported(lv_color_format_t cf)
{
switch(cf) {
case LV_COLOR_FORMAT_RGB565:
- case LV_COLOR_FORMAT_RGB565A8:
- case LV_COLOR_FORMAT_RGB888:
case LV_COLOR_FORMAT_ARGB8888:
case LV_COLOR_FORMAT_XRGB8888:
return true;
+
+ case LV_COLOR_FORMAT_RGB565A8:
+ case LV_COLOR_FORMAT_RGB888:
+ return vg_lite_query_feature(gcFEATURE_BIT_VG_24BIT) ? true : false;
+
default:
break;
}
+
return false;
}
@@ -323,15 +327,21 @@ bool lv_vg_lite_is_src_cf_supported(lv_color_format_t cf)
case LV_COLOR_FORMAT_A8:
case LV_COLOR_FORMAT_I8:
case LV_COLOR_FORMAT_RGB565:
- case LV_COLOR_FORMAT_RGB565A8:
- case LV_COLOR_FORMAT_RGB888:
case LV_COLOR_FORMAT_ARGB8888:
case LV_COLOR_FORMAT_XRGB8888:
- case LV_COLOR_FORMAT_NV12:
return true;
+
+ case LV_COLOR_FORMAT_RGB565A8:
+ case LV_COLOR_FORMAT_RGB888:
+ return vg_lite_query_feature(gcFEATURE_BIT_VG_24BIT) ? true : false;
+
+ case LV_COLOR_FORMAT_NV12:
+ return vg_lite_query_feature(gcFEATURE_BIT_VG_YUV_INPUT) ? true : false;
+
default:
break;
}
+
return false;
}