我目前正在C中使用JPEG编码器,而我刚刚完成了第一次实现。编码器在ppm / pgm图像上工作正常。现在我关注编码器的性能。
与libjpeg-turbo的JPEG cjpeg encoder相比,我的编码器实际上很慢。虽然cjpeg在200ms内处理3000万像素的图像,但我需要大约7s来进行编码。鉴于我正在使用快速DCT实施,我不明白这是如何可能的。
谁能告诉我这个巨大的差异来自哪里? cjpeg怎么这么快?
答案 0 :(得分:1)
你需要做一些分析来弄清楚发生了什么。也就是说,我会打赌性能差异的原因在于缓冲。从逻辑上讲,JPEG将数据视为在压缩的不同阶段具有不同的格式。
输入通常是24位颜色值的数组。 这些转换为YCbCR,给出另一个颜色值数组。 这些通常是子采样,因此给出一个小于Y数组的逻辑Cb和Cr数组。
对于DCT,先前的阵列采用不同的形式;一个8x8阵列的数组。
对于DCT输出,您的每像素阵列为16位。
这些各种阵列的管理可能是性能差异的根源。通过消除物理变换,您可以获得最大的性能提升。