lvgl加载资源JPG image,播放动画

本文介绍了LVGL加载图片资源时的解码时间问题,并提出通过预缓存图片到内存来加速,使用`lv_img_cache_set_size`设置缓存大小,以及自定义`my_static_decoder_read_line`函数实现JPG图片的内存解码,从而实现实时播放达到100fps。
摘要由CSDN通过智能技术生成

load jpg image to memory

lvgl加载图片资源解码时间比较长,可以预先缓存到缓存中。

本方案时候lvgl-7,下面是参考

Images — LVGL documentation

实施:

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值