找回密码
 立即注册
查看: 1283|回复: 13

只需3.5K RAM 的嵌入式:TJpgDec - 微型 JPEG 解压缩器!TFT伴侣

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:487
  • 最近打卡:2025-05-02 16:43:36
已绑定手机

6

主题

285

回帖

885

积分

荣誉版主

积分
885
发表于 2024-9-20 13:21:29 | 显示全部楼层 |阅读模式
TJpgDec - 微型 JPEG 解压缩器


TJpgDec 是一个通用的 JPEG 图像解压缩器模块,针对小型嵌入式系统进行了高度优化。
它以非常低的内存消耗工作,因此可以集成到微型微控制器中,
例如 A VR、8051、P IC、Z 80、Cort ex-M 0 等。


特征
· 平台独立。用普通 C (C99) 编写。
· 易于使用的主模式操作。
· 完全可重入架构。
· 8/16 位和 32 位 MCU 的可配置优化级别。
· 非常小的内存占用:
o 3.5K 字节的 RAM 用于独立于图像尺寸的工作区。
o 3.5-8.5K 字节的 ROM 用于文本和常量。
· 输出格式:
o 像素格式:RGB888、RGB565 或灰度可预配置。
o 缩放比例:减压时可选择 1/1、1/2、1/4 或 1/8。
应用界面
有两个 API 函数可以分析和解压缩 JPEG 图像。
· jd_prepare - 准备 JPEG 图像的解压缩
· jd_decomp - 执行 JPEG 图像的解压缩
输入输出功能
为了输入 JPEG 数据并输出解压缩的图像,TJpgDec 需要两个用户定义的 I/O 函数。这些是在解压过程中从 TJpgDec 模块回调的。
· Input Funciotn - 从输入流中读取 JPEG 数据
· Output Function——将解压后的图片输出到目标对象
资源
TJpgDec 模块是为教育、研究和开发而开放的免费软件。您可以不受任何限制地为个人项目或商业产品使用、修改和/或重新分发它,并由您负责。

截图202409201320158369.jpg
TJpgDec-Snipaste_2024-09-20_13-25-55.jpg

TJpgDec - 微型 JPEG 解压缩器.pdf

160.51 KB, 下载次数: 87

TJpgDec模块应用说明_TJpgDec Module Application Note(itkw_com).pdf

382 KB, 下载次数: 85

tjsample_8位单片机的例程.rar

463.14 KB, 下载次数: 92

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
(仅供参考,欢迎探讨)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:487
  • 最近打卡:2025-05-02 16:43:36
已绑定手机

6

主题

285

回帖

885

积分

荣誉版主

积分
885
发表于 2024-9-20 13:33:10 | 显示全部楼层

AI8051U-34K256

希望哪位大佬、群友可以移植到STC的单片机中(资源足够),那真是彩屏TFT的伴侣啊。
原来一张320x240的QVGA图片要150K, 必须使用外部FLASH或TF, 但现在只需15K就可以了。
压缩到10分之一,而且解码速度很快,配合DMA刷屏同时解码下一张,视频级展示不是梦!

@tzz1983 @浦江一水 @大明狐 @电子DIY小家 @芯征程 @zhangshiwei 等等高手

(仅供参考,欢迎探讨)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-9-20 16:53:39 来自手机 | 显示全部楼层
keil好像不支持c99吧,估计要发点时间去改吧
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

979

积分

高级会员

积分
979
发表于 2024-9-21 02:25:15 | 显示全部楼层
这个应该没什么难度吧?本身就是专为低资源单片机优化设计的,直接拖过来编译就行。

一点小问题顺手就改了。
“data”是C51/C251的关键词,不能作为变量名,把所有叫data的变量都改个名。

另外就是下面这俩函数,用函数指针调用的。
size_t (*infunc)(JDEC*, uint8_t*, size_t);
int (*outfunc)(JDEC*,void*,JRECT*);

由于C51/C251对函数传递参数的方式不同于通用C,通用C是用堆栈传递参数,而C51是采用固定地址传递参数。优先用寄存器传递,寄存器放不下才用固定地址传递。
由于是指针函数动态调用,所有不适用固定地址传递,只能采用寄存器传递有限数量的参数。
上面那俩函数的参数超出寄存器容量了,放不下,所以编译报错了。
解决办法有几种:
1. 直接调用函数,不用函数指针调用。
2. 使用全局变量代替参数传递。
3. 参数里面的指针加上存储器类型指示,通用指针一个占4字节,带存储类型的指针占2字节,这样所有参数就能全放入寄存器了。
4. 俩函数加上 reentrant 声明,强制使用堆栈传递参数。
根据个人喜好,任选一种方案均可。

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-21 07:01:23 | 显示全部楼层
autop*** 发表于 2024-9-20 13:33
AI8051U-34K256

希望哪位大佬、群友可以移植到STC的单片机中(资源足够),那真是彩屏TFT的伴侣啊。

stc太慢不能显示视频。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

979

积分

高级会员

积分
979
发表于 2024-9-21 15:24:13 | 显示全部楼层
主要问题还是内存太小了,解码出来的数据没地方放,只能一边解码一边送显示设备。拉帘式显示效果。
或者采用非常小的图,内存才能放的下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

979

积分

高级会员

积分
979
发表于 2024-9-23 09:02:16 | 显示全部楼层
简单测试了一下,TJpgDec源码尽量不动,为使编译通过,仅修改:data变量名称,输入输出接口函数加reentrant。
手里没有带液晶的板子,显示数据通过CPU直接输出到GPIO接VGA显示器。
VGA显示只取了RGB数据的8位,所以颜色失真严重。
[刷屏是通过CPU连续写GPIO实现,大部分时间CPU都被占用,只有在行回扫和场回扫期间CPU能短暂处理解码任务,
CPU用于解码大约只剩一层功力。测试例子中解压120*120的JPG图像大约耗时1秒。
下面是实际运行效果,由于上述原因,本测试不代表8051实际能力。如果采用TFT液晶显示的话,RGB565图像质量会更好,
且CPU有更多时间用于处理解码任务,速度也会更快。


原始图片
kunqiu.gif

点评

楼主威武。我也在调试这个中,由于不熟悉修改,可否发个修改后的工程或源码上来?谢谢。 另:这个动图gif,我之前也想拿来在ai8051u实验箱作“视频级”动图播放使用,哈哈。(另一个是彩色版的坏苹果)  详情 回复 发表于 2024-9-23 19:12
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-9-23 09:57:38 来自手机 | 显示全部楼层
health 发表于 2024-9-23 09:02
简单测试了一下,TJpgDec源码尽量不动,为使编译通过,仅修改:data变量名称,输入输出接口函数加reentrant ...

这个GIF图片表现出来有怪怪的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

979

积分

高级会员

积分
979
发表于 2024-9-23 13:06:15 来自手机 | 显示全部楼层
soma 发表于 2024-9-23 09:57
这个GIF图片表现出来有怪怪的

是指哪个方面怪怪的?
这个是GIF图片在电脑上转换成JPG格式,
在8051上解压后的RGB565数据,简单截断了8位来显示,
所以颜色质量会劣化很多。
帧率1fps也是有点慢。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:487
  • 最近打卡:2025-05-02 16:43:36
已绑定手机

6

主题

285

回帖

885

积分

荣誉版主

积分
885
发表于 2024-9-23 19:12:47 | 显示全部楼层
hea*** 发表于 2024-9-23 09:02
简单测试了一下,TJpgDec源码尽量不动,为使编译通过,仅修改:data变量名称,输入输出接口函数加reentrant ...

楼主威武。我也在调试这个中,由于不熟悉修改,可否发个修改后的工程或源码上来?谢谢。

另:这个动图gif,我之前也想拿来在ai8051u实验箱作“视频级”动图播放使用,哈哈。(另一个是彩色版的坏苹果)

151
(仅供参考,欢迎探讨)
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 08:12 , Processed in 0.139979 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表