diff --git a/src/draw/lv_image_decoder.c b/src/draw/lv_image_decoder.c index b6573ddcfc..e6b503e26b 100644 --- a/src/draw/lv_image_decoder.c +++ b/src/draw/lv_image_decoder.c @@ -277,6 +277,9 @@ static lv_image_decoder_t * image_decoder_get_info(const void * src, lv_image_he if(img_dsc->data == NULL) return NULL; } + if(src_type == LV_IMAGE_SRC_FILE) LV_LOG_INFO("Try to find decoder for %s", (const char *)src); + else LV_LOG_INFO("Try to find decoder for %p", src); + lv_image_decoder_t * decoder; bool is_header_cache_enabled = lv_image_header_cache_is_enabled(); @@ -292,14 +295,21 @@ static lv_image_decoder_t * image_decoder_get_info(const void * src, lv_image_he *header = cached_data->header; decoder = cached_data->decoder; lv_cache_release(img_header_cache_p, entry, NULL); + + LV_LOG_INFO("Found decoder %s in header cache", decoder->name); return decoder; } } + /*Search the decoders*/ + lv_image_decoder_t * decoder_prev = NULL; _LV_LL_READ(img_decoder_ll_p, decoder) { /*Info and Open callbacks are required*/ if(decoder->info_cb && decoder->open_cb) { lv_result_t res = decoder->info_cb(decoder, src, header); + + if(decoder_prev) LV_LOG_INFO("Can't open image with decoder %s. Trying next decoder.", decoder_prev->name); + if(res == LV_RESULT_OK) { if(header->stride == 0) { LV_LOG_INFO("Image decoder didn't set stride. Calculate it from width."); @@ -307,9 +317,14 @@ static lv_image_decoder_t * image_decoder_get_info(const void * src, lv_image_he } break; } + + decoder_prev = decoder; } } + if(decoder == NULL) LV_LOG_INFO("No decoder found"); + else LV_LOG_INFO("Found decoder %s", decoder->name); + if(is_header_cache_enabled && src_type == LV_IMAGE_SRC_FILE && decoder) { lv_cache_entry_t * entry; lv_image_header_cache_data_t search_key; diff --git a/src/draw/lv_image_decoder.h b/src/draw/lv_image_decoder.h index 22bcc511a1..3065b69eee 100644 --- a/src/draw/lv_image_decoder.h +++ b/src/draw/lv_image_decoder.h @@ -109,6 +109,8 @@ struct _lv_image_decoder_t { lv_image_decoder_get_area_cb_t get_area_cb; lv_image_decoder_close_f_t close_cb; + const char * name; + void * user_data; }; diff --git a/src/draw/vg_lite/lv_vg_lite_decoder.c b/src/draw/vg_lite/lv_vg_lite_decoder.c index 9ac86ecaa2..6015ef32f7 100644 --- a/src/draw/vg_lite/lv_vg_lite_decoder.c +++ b/src/draw/vg_lite/lv_vg_lite_decoder.c @@ -19,6 +19,8 @@ * DEFINES *********************/ +#define DECODER_NAME "VG_LITE" + /* VG_LITE_INDEX1, 2, and 4 require endian flipping + bit flipping, * so for simplicity, they are uniformly converted to I8 for display. */ @@ -65,6 +67,8 @@ void lv_vg_lite_decoder_init(void) lv_image_decoder_set_info_cb(decoder, decoder_info); lv_image_decoder_set_open_cb(decoder, decoder_open); lv_image_decoder_set_close_cb(decoder, decoder_close); + + decoder->name = DECODER_NAME; } void lv_vg_lite_decoder_deinit(void) diff --git a/src/libs/bin_decoder/lv_bin_decoder.c b/src/libs/bin_decoder/lv_bin_decoder.c index f8dc568beb..3df8c48469 100644 --- a/src/libs/bin_decoder/lv_bin_decoder.c +++ b/src/libs/bin_decoder/lv_bin_decoder.c @@ -25,6 +25,8 @@ * DEFINES *********************/ +#define DECODER_NAME "BIN" + /********************** * TYPEDEFS **********************/ @@ -101,6 +103,8 @@ void lv_bin_decoder_init(void) lv_image_decoder_set_open_cb(decoder, lv_bin_decoder_open); lv_image_decoder_set_get_area_cb(decoder, lv_bin_decoder_get_area); lv_image_decoder_set_close_cb(decoder, lv_bin_decoder_close); + + decoder->name = DECODER_NAME; } lv_result_t lv_bin_decoder_info(lv_image_decoder_t * decoder, const void * src, lv_image_header_t * header) diff --git a/src/libs/bmp/lv_bmp.c b/src/libs/bmp/lv_bmp.c index c36f2cc12c..3fbb02cb8b 100644 --- a/src/libs/bmp/lv_bmp.c +++ b/src/libs/bmp/lv_bmp.c @@ -15,6 +15,8 @@ * DEFINES *********************/ +#define DECODER_NAME "BMP" + /********************** * TYPEDEFS **********************/ @@ -57,6 +59,8 @@ void lv_bmp_init(void) lv_image_decoder_set_open_cb(dec, decoder_open); lv_image_decoder_set_get_area_cb(dec, decoder_get_area); lv_image_decoder_set_close_cb(dec, decoder_close); + + dec->name = DECODER_NAME; } void lv_bmp_deinit(void) diff --git a/src/libs/ffmpeg/lv_ffmpeg.c b/src/libs/ffmpeg/lv_ffmpeg.c index 29d6749386..bf09dbc3af 100644 --- a/src/libs/ffmpeg/lv_ffmpeg.c +++ b/src/libs/ffmpeg/lv_ffmpeg.c @@ -19,6 +19,9 @@ /********************* * DEFINES *********************/ + +#define DECODER_NAME "FFMPEG" + #if LV_COLOR_DEPTH == 8 #define AV_PIX_FMT_TRUE_COLOR AV_PIX_FMT_RGB8 #elif LV_COLOR_DEPTH == 16 @@ -113,6 +116,8 @@ void lv_ffmpeg_init(void) lv_image_decoder_set_open_cb(dec, decoder_open); lv_image_decoder_set_close_cb(dec, decoder_close); + dec->name = DECODER_NAME; + #if LV_FFMPEG_AV_DUMP_FORMAT == 0 av_log_set_level(AV_LOG_QUIET); #endif diff --git a/src/libs/libjpeg_turbo/lv_libjpeg_turbo.c b/src/libs/libjpeg_turbo/lv_libjpeg_turbo.c index 04e9b8ae5e..baa5f0cdf7 100644 --- a/src/libs/libjpeg_turbo/lv_libjpeg_turbo.c +++ b/src/libs/libjpeg_turbo/lv_libjpeg_turbo.c @@ -18,6 +18,9 @@ /********************* * DEFINES *********************/ + +#define DECODER_NAME "JPEG_TURBO" + #define JPEG_PIXEL_SIZE 3 /* RGB888 */ #define JPEG_SIGNATURE 0xFFD8FF #define IS_JPEG_SIGNATURE(x) (((x) & 0x00FFFFFF) == JPEG_SIGNATURE) @@ -72,6 +75,8 @@ void lv_libjpeg_turbo_init(void) lv_image_decoder_set_info_cb(dec, decoder_info); lv_image_decoder_set_open_cb(dec, decoder_open); lv_image_decoder_set_close_cb(dec, decoder_close); + + dec->name = DECODER_NAME; } void lv_libjpeg_turbo_deinit(void) diff --git a/src/libs/libpng/lv_libpng.c b/src/libs/libpng/lv_libpng.c index 27790a4e5e..0a98c35a9c 100644 --- a/src/libs/libpng/lv_libpng.c +++ b/src/libs/libpng/lv_libpng.c @@ -17,6 +17,8 @@ * DEFINES *********************/ +#define DECODER_NAME "PNG" + /********************** * TYPEDEFS **********************/ @@ -50,6 +52,8 @@ void lv_libpng_init(void) lv_image_decoder_set_info_cb(dec, decoder_info); lv_image_decoder_set_open_cb(dec, decoder_open); lv_image_decoder_set_close_cb(dec, decoder_close); + + dec->name = DECODER_NAME; } void lv_libpng_deinit(void) diff --git a/src/libs/lodepng/lv_lodepng.c b/src/libs/lodepng/lv_lodepng.c index f2237594a8..b68d45ad21 100644 --- a/src/libs/lodepng/lv_lodepng.c +++ b/src/libs/lodepng/lv_lodepng.c @@ -17,6 +17,8 @@ * DEFINES *********************/ +#define DECODER_NAME "LODEPNG" + /********************** * TYPEDEFS **********************/ diff --git a/src/libs/tjpgd/lv_tjpgd.c b/src/libs/tjpgd/lv_tjpgd.c index b13cd12ae7..ac12ce21b5 100644 --- a/src/libs/tjpgd/lv_tjpgd.c +++ b/src/libs/tjpgd/lv_tjpgd.c @@ -18,6 +18,9 @@ /********************* * DEFINES *********************/ + +#define DECODER_NAME "TJPGD" + #define TJPGD_WORKBUFF_SIZE 4096 //Recommended by TJPGD library /********************** @@ -55,6 +58,8 @@ void lv_tjpgd_init(void) lv_image_decoder_set_open_cb(dec, decoder_open); lv_image_decoder_set_get_area_cb(dec, decoder_get_area); lv_image_decoder_set_close_cb(dec, decoder_close); + + dec->name = DECODER_NAME; } void lv_tjpgd_deinit(void)