使用libjpeg(或libjpeg-turbo)进行JPEG编码,我想知道是否有任何改进可以同时为JPEG_write_scanlines函数提供多条扫描线。我对720x288张图像进行了一些测试,但一次处理整个图像时,我只得到0.5%的增长。
我想这一增长只是由于取消了调用堆栈开销,但我预计会有更多,至少在libjpeg-turbo中是这样。
性能测试是由Callgrind(在Valgrind)进行的,所以也许我错过了什么。或者我真的误解了JPEG编码器的工作原理。
JPEG有一个行的最小高度,称为MCU高度。在没有二次采样的图像中是8行(4:4:4模式),如果色度是二次采样(4:2:0模式)则是16行。
如果你给libjpeg提供这8或16行,它将能够一次性处理整行。否则,它将需要做额外的记账或缓冲。
一次写入多个MCU高度,或者整个图像,都不会有什么坏处。