这两周在闲暇时基于通用的libjpeg库重新做了一个opencl解码实现。重新熟悉下算法。
<a href="https://github.com/jxt1234/platform_external_jpeg">https://github.com/jxt1234/platform_external_jpeg</a>
opencl文件夹目录下面的就是所有的修改。
用xcode开发的,没兴趣去整makefile了,代码独立,移植集成也很方便。
1.算法代码完全独立,不修改原来库中的代码。
2.支持各种yuv格式(411、422、444等等)。
3.霍夫曼解码仍然由cpu完成,采用opencl做idct和颜色转换,向量化实现,效率很高。(ps:当年移植那个坑爹的libjpeg-opencl时被坑死了)
4.只支持输出为rgb的格式,需要扩展的看下代码自己改,也不麻烦,这部分用simd实现比较好,因此没怎么写。
macbook上数据,仅供参考
opencl优化后数据:
time cost for 3200 * 2000, 177757 / 1000000s
mcu is 130001 / 1000000s
原cpu方式数据
time cost for 3200 * 2000, 363453 / 1000000s
idct和颜色转换的时间压缩到可以忽略不计了。几乎只剩下解霍夫曼编码的时间,总体性能是提升了100%。