感谢国际友人Ozelot为我们提供了全网唯一一份代码(至少我只找到这份)
原贴: https://whycan.com/t_8114.html
我也是小白,为了让更多人理解这份代码,我把我的理解写出来,仅供大家参考:
1、scr_enable()函数,是f1c100s的LCD驱动部份,如果你已经有了LCD驱动,可以使用自己的。毕竟你的LCD和作者的,可能不一样
2、int parse_jpeg(struct jpeg_t *jpeg, const uint8_t *data, const int len),是获取JPG图片的参数:
jpeg 解码参数结构体
*data JPG图片的地址
len JPG图片的长度
3、void decode_jpeg(struct jpeg_t *jpeg, u16 *frame),解码图片函数
jpeg 解码参数结构体
frame 解码后的图片存放地址,这里应该是RGB565的格式
4、void fr_enable (struct FRAME *fr),图参重新使能,作者使用了缓存显示,就是先把解码放到一片内存,然后重新指定layer的地址,这样就可以显示图片的时候把下一张解码。
5、我觉得为了体现硬解的速度,可以不用缓存机制,在decode_jpeg的frame,直接指定为LCD的显存。这样可以更加直观的看到硬解的过程。使用了缓存,那么软解JPG也可以在显示第1张图片的时候,解码第2张,然后切换缓存,一样的是“立即刷新”
6、作者把两个JPG用数组存放在两个H文件中。解码函数是一次处理一整张图片,我猜想应该也可以像stm32H7那样,一点一点读,一点一点解。但由于f1c100s的内存足够,所以没必要这么做。
7、理解上述代码以后,就可以从SD卡或flash中读取图片,使用硬解了。这个芯片的速度快,软件一般在300ms左右,而硬解在10个ms以内。
8、由于硬解的资料太少,连手册上都隐藏了这部份寄存器,所以研究的空间不大。大家互相学习,有交流可以联系我,QQ:31972145
离线
今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。
离线
今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。
解码时间与屏幕无关吧,1280*800的LCD是保资那个吗?点亮了没有?
离线
kmmyk 说:今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。
解码时间与屏幕无关吧,1280*800的LCD是保资那个吗?点亮了没有?
与分辨率有关嘛,1280*800的图片与320*240的图片,体量不一样嘛。
是保资的,已经点亮,但还有些BUG,正在找问题
离线