mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
img_cache: store the filename instead of its pointer
This commit is contained in:
parent
a35a79ba4e
commit
c190374c79
@ -7,6 +7,8 @@
|
|||||||
* INCLUDES
|
* INCLUDES
|
||||||
*********************/
|
*********************/
|
||||||
#include "lv_img_cache.h"
|
#include "lv_img_cache.h"
|
||||||
|
#include "lv_img_decoder.h"
|
||||||
|
#include "lv_draw_img.h"
|
||||||
#include "../lv_hal/lv_hal_tick.h"
|
#include "../lv_hal/lv_hal_tick.h"
|
||||||
#include "../lv_misc/lv_gc.h"
|
#include "../lv_misc/lv_gc.h"
|
||||||
|
|
||||||
@ -79,7 +81,15 @@ lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * st
|
|||||||
/*Is the image cached?*/
|
/*Is the image cached?*/
|
||||||
lv_img_cache_entry_t * cached_src = NULL;
|
lv_img_cache_entry_t * cached_src = NULL;
|
||||||
for(i = 0; i < entry_cnt; i++) {
|
for(i = 0; i < entry_cnt; i++) {
|
||||||
if(cache[i].dec_dsc.src == src) {
|
bool match = false;
|
||||||
|
lv_img_src_t src_type = lv_img_src_get_type(cache[i].dec_dsc.src);
|
||||||
|
if(src_type == LV_IMG_SRC_VARIABLE) {
|
||||||
|
if(cache[i].dec_dsc.src == src) match = true;
|
||||||
|
} else if(src_type == LV_IMG_SRC_FILE) {
|
||||||
|
if(strcmp(cache[i].dec_dsc.src, src) == 0) match = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(match) {
|
||||||
/* If opened increment its life.
|
/* If opened increment its life.
|
||||||
* Image difficult to open should live longer to keep avoid frequent their recaching.
|
* Image difficult to open should live longer to keep avoid frequent their recaching.
|
||||||
* Therefore increase `life` with `time_to_open`*/
|
* Therefore increase `life` with `time_to_open`*/
|
||||||
|
@ -118,10 +118,17 @@ lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header)
|
|||||||
lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
|
lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
|
||||||
{
|
{
|
||||||
dsc->style = style;
|
dsc->style = style;
|
||||||
dsc->src = src;
|
|
||||||
dsc->src_type = lv_img_src_get_type(src);
|
dsc->src_type = lv_img_src_get_type(src);
|
||||||
dsc->user_data = NULL;
|
dsc->user_data = NULL;
|
||||||
|
|
||||||
|
if(dsc->src_type == LV_IMG_SRC_FILE) {
|
||||||
|
uint16_t fnlen = strlen(src);
|
||||||
|
dsc->src = lv_mem_alloc(fnlen + 1);
|
||||||
|
strcpy((char *)dsc->src, src);
|
||||||
|
} else {
|
||||||
|
dsc->src = src;
|
||||||
|
}
|
||||||
|
|
||||||
lv_res_t res = LV_RES_INV;
|
lv_res_t res = LV_RES_INV;
|
||||||
|
|
||||||
lv_img_decoder_t * d;
|
lv_img_decoder_t * d;
|
||||||
@ -175,6 +182,11 @@ void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc)
|
|||||||
{
|
{
|
||||||
if(dsc->decoder) {
|
if(dsc->decoder) {
|
||||||
if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
|
if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
|
||||||
|
|
||||||
|
if(dsc->src_type == LV_IMG_SRC_FILE) {
|
||||||
|
lv_mem_free(dsc->src);
|
||||||
|
dsc->src = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user