我需要一些关于如何提高解码速度的技巧.在具有类似性能的其他平台上,我在两秒内具有相同的图像加载.
使用更大的读缓冲区(64 kB而不是默认的4 kB),最好从14秒减少到10秒.但没有其他任何帮助.
我们不需要以全分辨率显示图像,因此我们使用scale_num和scale_denom以较小的尺寸显示它.但我希望有更多的表现.是否可以使用某种多线程等?不同的解码设置?什么,我的想法.
首先 – 描述代码.如果你无法明确地找出瓶颈,那么你只剩下猜测.接下来,搜索libjpeg加速机会的文档.你提到了scale_num和scale_denom.解压缩器的dct_meodod怎么样?我发现DCT_FASTEST选项很好.还有其他选项需要检查:do_fancy_upsampling,do_block_smoothing,dither_mode,two_pass_quantize等.根据您的系统,libjpeg版本等,其中一些可能对您有用.
如果分析工具不可用,仍有一些事情要尝试.首先,我怀疑你的瓶颈与非CPU有关.要确认,请将未压缩的图像加载到RAM缓冲区中,然后像往常一样从那里解压缩.这是否显着改善了减压时间?如果是这样,罪魁祸首似乎是图像存储介质的读取操作.根据您的系统,从USB(或SD等)读取可能会很慢. (请注意,我假设从外部媒体读取 – 虽然硬件细节很少.)确保优化相关的总线参数(SPI时钟,配置等).
如果您正在阅读内部闪存(即NAND)等内容,还需要检查其他一些内容.你的NAND控制器是如何配置的?您是否确保控制器配置为最快的操作?检查等待状态,时间等.请注意,总线和/或内存争用也是一个问题 – 因此也要检查它们各自的配置.
最后,如果您认为您的系统实际上是CPU绑定的,那么这个stackoverflow问题可能会引起关注:
Can a high-performance jpeglib-turbo implmentation decompress/compress in <100ms?