记录一次rk3568硬解码时cpu占用率高的问题
今天在rk3568开发板上测试硬编硬解的时候发现cpu使用率异常的高,之前测试过只跑一个硬解码demo的话cpu使用率在5-10左右,今天测试居然占用到90
经过排查发现是QByteArray拷贝大内存的原因(项目是在Qt上开发):
在mpp解码后得到yuv格式的图像数据,我用QByteArray将图像数据保存并作为函数的返回值。硬解码本身靠 VPU完成,所以 CPU 占用很低;但一旦把解码后的大帧数据(我解码的是1080p的图像,一帧yuv图像占1920 x 1080 x 1.5 ≈ 3MB大小)塞进 QByteArray,就变成了 纯 CPU memcpy,而且每一帧都要拷贝,所以导致cpu使用率飙升。
最后解决方法是不要用QByteArray保存图像数据,而是直接返回指向图像数据的指针和大小。cpu占用高的原因主要还是因为要拷贝的内存太大了。注释掉QByteArray部分后硬解码cpu占用率正常