使用libjpeg(或libjpeg-turbo)进行JPEG编码,我想知道是否有任何改进一次向jpeg_write_scanlines函数提供多个扫描线。 我对720x288图像进行了一些测试,但是一次处理整个图像时我只增加了0.5%。
我猜这种增加只是因为删除了调用堆栈的开销,但我期待更多,至少在libjpeg-turbo上。
性能测试是用Callgrind(在Valgrind)运行的,所以也许我错过了一些东西。或者我真的误解了JPEG编码器的工作原理。
答案 0 :(得分:3)
JPEG具有行的最小高度,称为MCU高度。如果没有二次采样(4:4:4模式),则为8行,如果色度为二次采样,则为16行(4:2:0模式)。
如果您向libjpeg提供这8或16行,它将能够一次处理整行。否则它需要额外的簿记或缓冲。
一次写入多个MCU高度或整个图像不会受到伤害。