From dd42600e24d9b79bd32fa2f8412a482b33b82a2a Mon Sep 17 00:00:00 2001 From: Neo Xu Date: Thu, 18 Jan 2024 16:23:21 +0800 Subject: [PATCH] chore(decoder): call image post process directly (#5371) Signed-off-by: Xu Xingliang --- src/libs/libpng/lv_libpng.c | 22 +++++++++------------- src/libs/lodepng/lv_lodepng.c | 30 +++++++++++------------------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/libs/libpng/lv_libpng.c b/src/libs/libpng/lv_libpng.c index b35473582b..0671a84d2b 100644 --- a/src/libs/libpng/lv_libpng.c +++ b/src/libs/libpng/lv_libpng.c @@ -135,20 +135,16 @@ static lv_result_t decoder_open(lv_image_decoder_t * decoder, lv_image_decoder_d return LV_RESULT_INVALID; } - /*Stride check and adjustment accordingly*/ - if(args && args->stride_align) { - uint32_t expected = lv_draw_buf_width_to_stride(decoded->header.w, decoded->header.cf); - if(expected != decoded->header.stride) { - LV_LOG_INFO("Convert PNG stride to %" LV_PRId32, expected); - lv_draw_buf_t * aligned = lv_draw_buf_adjust_stride(decoded, expected); - lv_draw_buf_destroy(decoded); - if(aligned == NULL) { - LV_LOG_ERROR("png stride adjust failed"); - return LV_RESULT_INVALID; - } + lv_draw_buf_t * adjusted = lv_image_decoder_post_process(dsc, decoded); + if(adjusted == NULL) { + lv_draw_buf_destroy(decoded); + return LV_RESULT_INVALID; + } - decoded = aligned; - } + /*The adjusted draw buffer is newly allocated.*/ + if(adjusted != decoded) { + lv_draw_buf_destroy(decoded); + decoded = adjusted; } dsc->decoded = decoded; diff --git a/src/libs/lodepng/lv_lodepng.c b/src/libs/lodepng/lv_lodepng.c index 75f7c4f7e3..5f094c6b34 100644 --- a/src/libs/lodepng/lv_lodepng.c +++ b/src/libs/lodepng/lv_lodepng.c @@ -182,32 +182,24 @@ static lv_result_t decoder_open(lv_image_decoder_t * decoder, lv_image_decoder_d } lv_draw_buf_t * decoded = decode_png_data(png_data, png_data_size); + + if(dsc->src_type == LV_IMAGE_SRC_FILE) lv_free((void *)png_data); + if(!decoded) { LV_LOG_WARN("Error decoding PNG\n"); - if(png_data != NULL) { - lv_free((void *)png_data); - } return LV_RESULT_INVALID; } - /*Stride check and adjustment accordingly*/ - if(args && args->stride_align) { - uint32_t expected = lv_draw_buf_width_to_stride(decoded->header.w, decoded->header.cf); - if(expected != decoded->header.stride) { - LV_LOG_INFO("Convert PNG stride to %" LV_PRId32, expected); - lv_draw_buf_t * aligned = lv_draw_buf_adjust_stride(decoded, expected); - lv_draw_buf_destroy(decoded); - if(aligned == NULL) { - LV_LOG_ERROR("png stride adjust failed"); - return LV_RESULT_INVALID; - } - - decoded = aligned; - } + lv_draw_buf_t * adjusted = lv_image_decoder_post_process(dsc, decoded); + if(adjusted == NULL) { + lv_draw_buf_destroy(decoded); + return LV_RESULT_INVALID; } - if(dsc->src_type == LV_IMAGE_SRC_FILE) { - lv_free((void *)png_data); + /*The adjusted draw buffer is newly allocated.*/ + if(adjusted != decoded) { + lv_draw_buf_destroy(decoded); + decoded = adjusted; } dsc->decoded = decoded;