您尚未登录。

楼主 # 2025-03-07 06:54:55

kmmyk
会员
注册时间: 2025-01-22
已发帖子: 45
积分: 116

对Ozelot的JPEG硬件解码程序的一点理解,希望对大家有用。

感谢国际友人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

离线

楼主 #1 2025-03-07 20:40:47

kmmyk
会员
注册时间: 2025-01-22
已发帖子: 45
积分: 116

Re: 对Ozelot的JPEG硬件解码程序的一点理解,希望对大家有用。

今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。

离线

#2 2025-03-07 21:05:57

dykxjh
会员
注册时间: 2020-03-25
已发帖子: 177
积分: 162

Re: 对Ozelot的JPEG硬件解码程序的一点理解,希望对大家有用。

kmmyk 说:

今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。

解码时间与屏幕无关吧,1280*800的LCD是保资那个吗?点亮了没有?

离线

楼主 #3 2025-03-08 06:26:54

kmmyk
会员
注册时间: 2025-01-22
已发帖子: 45
积分: 116

Re: 对Ozelot的JPEG硬件解码程序的一点理解,希望对大家有用。

dykxjh 说:
kmmyk 说:

今天找了一块1280*800的LCD,解码这样的JPG文件,平均在23个ms,速度还是喜人。

解码时间与屏幕无关吧,1280*800的LCD是保资那个吗?点亮了没有?

与分辨率有关嘛,1280*800的图片与320*240的图片,体量不一样嘛。
是保资的,已经点亮,但还有些BUG,正在找问题

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn