将jpeg_write_scanlines与多个扫描线同时使用会更好吗?

时间:2013-09-05 07:54:19

标签: c libjpeg libjpeg-turbo

使用libjpeg(或libjpeg-turbo)进行JPEG编码,我想知道是否有任何改进一次向jpeg_write_scanlines函数提供多个扫描线。 我对720x288图像进行了一些测试,但是一次处理整个图像时我只增加了0.5%。

我猜这种增加只是因为删除了调用堆栈的开销,但我期待更多,至少在libjpeg-turbo上。

性能测试是用Callgrind(在Valgrind)运行的,所以也许我错过了一些东西。或者我真的误解了JPEG编码器的工作原理。

1 个答案:

答案 0 :(得分:3)

JPEG具有行的最小高度,称为MCU高度。如果没有二次采样(4:4:4模式),则为8行,如果色度为二次采样,则为16行(4:2:0模式)。

如果您向libjpeg提供这8或16行,它将能够一次处理整行。否则它需要额外的簿记或缓冲。

一次写入多个MCU高度或整个图像不会受到伤害。