C 使用jpeg\u write\u扫描线同时使用多条扫描线是否更好?

C 使用jpeg\u write\u扫描线同时使用多条扫描线是否更好?,c,libjpeg,libjpeg-turbo,C,Libjpeg,Libjpeg Turbo,使用libjpeg(或libjpeg-turbo)进行JPEG编码,我想知道是否有任何改进,可以同时为JPEG\u write\u扫描线函数提供多条扫描线。 我在720x288图像上做了一些测试,但一次处理整个图像时,只增加了0.5% 我猜这一增长仅仅是由于去除了调用堆栈开销,但我期待着更多,至少对于libjpeg-turbo 性能测试是用Callgrind(在Valgrind中)运行的,所以我可能遗漏了一些东西。或者我真的误解了JPEG编码器的工作原理。JPEG有一行的最小高度,称为MCU高度

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

我猜这一增长仅仅是由于去除了调用堆栈开销,但我期待着更多,至少对于libjpeg-turbo


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

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

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


一次写入多个MCU高度,或者整个图像,都不会有什么坏处。

很好的线索。你对此有什么参考资料吗?这是你的经历吗?或者我应该自己在自己的设置中测试它吗?JPEG有一个MCU(最小编码单元)的概念,它是一个块(或子采样时为4x4 luma块),而libjpeg是围绕MCU的处理行构建的。