|
本帖最后由 jefferyzhang 于 2023-8-29 15:45 编辑
前言:
很多人问如何知道是在硬件解码还是软件解码?如何知道解码时间?那这里我们提供一个内部调试接口给大家,方便大家查看。
调试方法:
1. 打开驱动调试打印(调试节点开关根据芯片和kernel版本不同会有所变化,但大体路径相似):
- echo 0x0100 > /sys/module/rk_vcodec/parameters/debug
2. 开始运行你的解码程序
3. 查看打印信息
因为打印信息是printk出来的,无法直接在程序运行界面看到。
可以通过串口查看,或者通过cat /proc/kmesg查看,或者使用命令dmesg查看。
如果看到如下格式的信息,说明正在使用硬件解码,并且解码时间是2ms (H.264 - 1080P 解码时间)
[173711.220703] rk_vcodec: rkvdec task: 2 ms
[173711.223787] rk_vcodec: rkvdec task: 2 ms
[173711.226786] rk_vcodec: rkvdec task: 2 ms
[173711.229797] rk_vcodec: rkvdec task: 2 ms
[173711.251252] rk_vcodec: rkvdec task: 2 ms
[173711.254284] rk_vcodec: rkvdec task: 2 ms
FAQ:
Q:OpenCV 为什么用了硬件解码速度还是很慢?
A:我们从log可以看到,实际上硬件解码时间仅需要1-2ms,但是因为兼容性对接FFMPEG,并且opencv和ffmpeg间又有很多次memcpy的行为,效率降低是意料之内的, 所以我们建议正式项目还是直接采用mpp库调用我们VPU解码。
Q:MPP开始运行时报错:
mpp_rt: NOT found ion allocator
mpp_rt: found drm allocator
mpp: deprecated block control, use timeout control instead
A:这些都不是错误,因为MPP是rk通用接口,兼容目前RK所有芯片,所以他会对芯片的类型和控制方式以及新旧版本做兼容,
这些打印只是在寻找兼容该平台的接口而已,并不是错误。
第一行和第二行是在寻找物理buffer分配方式,rk3399pro和1808使用drm框架,所以不兼容ion分配。
第三行是对接的接口旧了,使用新的接口替代而已。
|
|