libjpeg-turbo:用 SIMD 加速的 JPEG 编解码库

发布时间:2026/6/23 1:27:55
libjpeg-turbo:用 SIMD 加速的 JPEG 编解码库 文章目录libjpeg-turbo用 SIMD 加速的 JPEG 编解码库libjpeg-turbo用 SIMD 加速的 JPEG 编解码库libjpeg-turbo 是一个 JPEG 图像编解码库通过 SIMD 指令集加速 JPEG 的压缩和解压缩操作。在常见的 CPU 架构上处理速度通常是 libjpeg 的 2 到 6 倍。该项目同时是 JPEG 标准的 ISO/IEC 和 ITU-T 参考实现。libjpeg-turbo 最早脱胎于 libjpeg/SIMD这是 Miyasaka Masaru 开发的一个基于 libjpeg v6b 的 MMX 加速分支。2009 年 TigerVNC 和 VirtualGL 项目对其做了大量改进2010 年初正式独立为单独的项目。目前项目获得了 4,330 个 Star。两套 APIlibjpeg-turbo 提供两套接口。TurboJPEG API 使用简单适合新手支持内存中的 JPEG 压缩解压缩还能生成 planar YUV 图像和执行多次无损变换。libjpeg API 是业界事实标准功能更强与 libjpeg v6b 保持 API/ABI 和数学层面的兼容。色彩空间扩展库内置了十种色彩空间常量JCS_EXT_RGB、JCS_EXT_BGR、JCS_EXT_RGBA 等可以直接从 BGR、RGBX、XBGR 等格式的像素缓冲区进行压缩和解压缩不用手动转换色彩顺序。兼容 libjpeg v7/v8通过 cmake 传入-DWITH_JPEG71或-DWITH_JPEG81可以构建出兼容 libjpeg v7/v8 ABI 的版本。已经编译为使用 libjpeg v7 的程序无需重新编译就能直接获得 SIMD 加速。IDCT 缩放、算术编码、内存源/目标管理器等功能均已支持。安装libjpeg-turbo 使用 cmake 构建各平台的编译说明参见项目中的 BUILDING.md。Linux 发行版也可以通过包管理器直接安装预编译的二进制包。项目采用三重 BSD 风格的开源许可证。性能注意事项有两类场景会导致性能下降。一是 JPEG 文件包含 restart markers 时Photoshop 导出的图片常见这种情况解压速度可能降低约 20%。二是 JPEG 质量设为 98 到 100 时快速整数 DCT 算法无法配合 SIMD 量化函数使用性能可能下降约 40%。建议高质量编码时切换到精确整数正向 DCT。降约 40%。建议高质量编码时切换到精确整数正向 DCT。