load jpg image to memory
lvgl加载图片资源解码时间比较长,可以预先缓存到缓存中。
本方案时候lvgl-7,下面是参考
实施:
lv_img_cache_set_size(cachecount); //设置缓存的图片张数
lv_img_cache_invalidate_src(NULL); //清除缓存,不会自动释放,需要手动释放。
//参数为NULL表示清除所有,
//参数可以设置为指定图片路径
JPG解码函数:
下面函数是手动把JPG图片解码,并存入到lvgl缓存中。
my_static_decoder_read_line函数是对函数static lv_res_t decoder_read_line( lv_img_decoder_t * decoder, lv_img_decoder_dsc_t * dsc, lv_coord_t x, lv_coord_t y, lv_coord_t len, uint8_t * buf )的封装。
decoder_read_line()在display/lv_drivers/decoder/sjpg,是lvgl的解码库。在lv_sjpg.c文件中。可以封装成自己的函数,在外面调用。
sprintf(str_mp4, "S:/01_00%03d.jpg", i);
//lv_img_set_src(aps_data->img_mp4, str_mp4);
//lv_obj_set_hidden(aps_data->img_mp4, 0);
uint8_t * buf = _lv_mem_buf_get(360 *
LV_IMG_PX_SIZE_ALPHA_BYTE); /*+1 because of the possible alpha byte*/
lv_img_cache_entry_t * cdsc = _lv_img_cache_open(str_mp4, LV_COLOR_BLACK);
my_static_decoder_read_line(cdsc->dec_dsc.decoder, &cdsc->dec_dsc, 0, 0, 360, buf);
_lv_mem_buf_release(buf);
经过上面处理,把JPG缓存到内存中,不用解码,会播放很快。测试可以达到100fps。