2009年3月19日星期四

JPEG软编解码器介绍

首先介绍几个名词:
IJG:Independent JPEG Group
IJL: Intel JPEG Library
IPP: Intel Integrated Performance Primitives

IJG提供的JPEG软编解码器是使用最广泛的,可以从官方网站www.ijg.org下载最新版本6b。
优点:免费、开源;纯C编写,支持众多硬件平台和操作系统;
缺点:速度一般

IJL是Intel提供的JPEG软编解码器,2001以前IJL是免费的。
你可以编程实现从buffer读取jpeg图像数据然后解码到输出buffer,实现如下:

//read JPEG image from buffer and decompress it and write to output buffer.

JPEG_CORE_PROPERTIES jcprops;

// Initialize the IntelR JPEG Library.
IJLERR jerr = ijlInit(&jcprops);
..
..
// Use the IJL to read data from a buffer or a file.
jerr = ijlRead(&jcprops, iotype);
..
..
// Now get the actual JPEG image data into the pixel buffer.
jerr = ijlRead(&jcprops, IJL_JBUFF_READWHOLEIMAGE);

// Use the IJL to write data into a buffer or a file.
IJLERR ijlWrite (JPEG_CORE_PROPERTIES *jcprops, IJLIOTYPE iotype);

// Clean up the IJL.

但是,2001年以后,IJL就被集成到IPP里面了。注意:IPP是收费的,不提供源码。现在,你要使用IPP来进行JPEG编解码。
首先,你需要安装IPP,然后下载IPP
Sample解压,里面的image-codecs提供了jpeg的编解码例程,其中提供ijp、jpeg-ijl,此处的ijp源码文件中,intel已经加入了IPP的函数,你可以通过修改头文件jconfig.h来决定是否使用调用IPP库进行编译,据intel称:使用IPP后,ijg的性能提高了1.5~2倍。
优点:针对intel CPU优化过,速度很快;
缺点:收费,只针对Intel CPU

AMD开源了它的处理库FrameWave,也有jpeg实现,有空儿也可以研究研究。

没有评论: