5

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

我想这种增加只是由于调用堆栈开销的消除,但我期待更多,至少使用 libjpeg-turbo。

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

4

1 回答 1

3

JPEG 有一个最小行高,称为 MCU 高度。在没有二次采样的图像中它是 8 行(4:4:4 模式),如果对色度进行二次采样(4:2:0 模式),它是 16 行。

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

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

于 2016-06-20T22:46:59.690 回答