g-bios support JPEG decode
Description:
实现g-bios对JPEG格式图片的处理
Team member:
Change Shi、Tbag Tang
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Description:
实现g-bios对JPEG格式图片的处理
Team member:
Change Shi、Tbag Tang
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
本帖最后由 tbag-tang 于 2011-01-14 12:41 编辑
Come together。
经过前一次的大幅度裁减之后,裁减工作也陷入僵局,昨天裁减了部分冗余代码,但是未能起到很好的作用,接下去想从解码过程入手,对整个算法了解后,再精简。
查看了一些资料,大致了解了jpeg编码的原理,而解码就是一个反过程,在这做一下简单的总结。
编码过程:
1. Color Model Conversion (色彩模型)
2. DCT (Discrete Cosine Transform 离散余弦变换)
3. 重排列 DCT 结果
4. 量化
5. RLE 编码
6. 范式 Huffman 编码
7. DC 的编码
首先,由于人的视觉对于色彩的敏感度小于对亮度的敏感度,所以将色彩模型通过DCT转换得到一个DCT 变换系数,通过这个系数进行量化,去除一些空间上(指色彩)的部分冗余数据,从而达到压缩的效果。DCT转换的过程是无损的,而量化的过程是有损的。
其次数据本身可以通过编码实现数据的精简,比如说一个字节数据为0x00,在通常情况下存储的时候就是一个字节(8bit),而通过Huffman编码得到0(1bit),这样通过数学方法实现了压缩。通过Huffman编码来压缩过程是无损的。
这个是我的一些理解,有偏差的地方希望大家能更正。谢谢!
经过昨天的裁减,略有进展,去除了部分冗余代码,已裁减17K。
采取的方案:
跟踪函数的调用,逐步去除未调用的函数。
此方法虽然有所繁杂,但的确起到了一定的成效,而且在裁减的过程中,对源码进行了分析,也对解码算法有了一定的理解,还应继续努力,以达到理想的效果。
写错标号了,右手的错
针对移植后Jpeglib的大小问题,我打算从下面几点入手
1)通过查找资料,了解JPEG文件格式。
2)了解离散余弦变换和哈夫曼编码。
2)读懂Jpeglig库的解码算法。
3)精确移植Jpeglib,去掉无用的代码
目前对于jpeg的裁减进展不是很大,对于程序还没完全理解,所以裁减还需继续努力。
主要的难点:
1、函数调用较复杂。
2、解码算法较复杂。
4楼的方案不错,可以借鉴下。谢谢!
一个裁剪的思路,g-bios目前只需要libjpeg的decode部分,可以尝试把encode部分的函数以及数据结构从libjpeg剔除出去,应该可以缩减不少的体积。
小组三天进展
软件方面:
1)成功移植libjpeg到g-bios。
2)实现g-bios对JPEG格式图片的处理。
硬件方面:
.基本实现对JPEG的解码,并在LED显示图片,但图片颜色有偏差,仍需调试。
BUG:
1)jpeglib太大,移植jpeglib后,g-bios下半部由原来的82k增加到150k.
2)硬件解码目前没有解决。
解决办法:
1)jpeglib
a.通过对jpeglib的裁剪,减少g-bios下半部的大小。
b.编程实现精简版jpeglib。
2)硬件解码
.继续调试
2010.9.20进展汇报:
软件解码部分:
基本完成libjpeg库的移植,实现将烧在nand上的jpeg文件数据解码成RGB数据流,并在LCD上显示。
硬件解码部分:
S3C6410硬件解码jpeg基本成功,但是解码输出的数据是YUV4:2:2标准,为了适用广泛,LCD已设置成RGB565标准,所以颜色转换方面还有些问题,仍需调试。
遇到的难点:
libjpeg库适用于对文件的编解码,而g-bios上没有fopen、fread等库函数,必须要将libjpeg库进行修改,将其适用于对内存块数据的编解码。