VDEC Debug SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 初始release | 2/22/2024 |
| 1.1 | 增加kmsg | 4/24/2024 |
| 1.2 | 增加常用命令 | 12/3/2024 |
| 1.3 | 更新proc fs | 6/9/2025 |
| 1.4 | 更新流程图 | 5/12/2026 |
前言¶
本文旨在介绍开发过程中客户遇到VDEC相关问题时,如何自行进行初步排查,确定是Sgs SDK问题后再提供相关信息给技术支持人员分析。
使用以下命令可以获取MI VDEC proc信息:
cat /proc/mi_modules/mi_vdec/mi_vdec0
对于此命令,仅会打印设备ID为0的proc信息。如果您正在使用支持多设备的芯片(有关芯片支持的设备数量的信息,请参考MI_VDEC模块的API文档),请使用与设备ID相对应的proc路径。例如,对于设备ID为1,您需要使用的proc路径如下:/proc/mi_modules/mi_vdec/mi_vdec1。为方便起见,以下文档将仅使用设备0作为示例。您需要根据所使用的具体设备ID使用正确的proc路径。


使用以下命令可以dump输入/输出数据:
// 将指定通道输入的bitstream数据存储到指定路径
echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0
// 将指定通道解码后的输出数据帧存储指定路径
echo dumpfb [chn] [port] [path] [frmcnt] [bDumpAll] [bDetile] > /proc/mi_modules/mi_vdec/mi_vdec0
使用以下命令可以获取VDEC使用的clk rate,其中 “←” 指示当前使用的值:
cat /proc/mi_modules/mi_vdec/debug_hal/vdec_clock
cat /proc/mi_modules/mi_vdec/debug_hal/vdec_clock_2nd
cat /proc/mi_modules/mi_vdec/debug_hal/vdec_clock_axi
1. 解码没输出¶
解码没输出现象确认示例:

通过 cat /proc/mi_modules/mi_vdec/mi_vdec0 多次查看以上信息,DecFrmCnt统计成功解码输出的帧数,若该值无变化,则表示解码没有输出。
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | cat /proc/mi_modules/mi_vdec/mi_vdec0 | 出口条件1: SendCnt和SendStrmSize为空 => 用户app的问题,没有推流 出口条件2: SendCnt和SendStrmSize不为空 | 出口条件1: => 流程结束,请用户确认app推流 出口条件2: =>B | / |
| B | cat /proc/mi_modules/mi_vdec/mi_vdec0 | 出口条件1:DecState的值小于等于2 => 说明没有找到有效的码流header信息,需要进一步分析确认无法seq init成功的原因 出口条件2:DecState的值大于2 | 出口条件1: => C 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => dump es |
| C | echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0 | / | D | / |
| D | 使用第三方ES分析工具查看es | 出口条件1:图像异常 => 码流问题 出口条件2:图像正常 | 出口条件1: => 流程结束,请用户确认码流 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg,proc和dump es |
2. 刷error/warn 打印¶
刷error/warn打印举例:
[vdec-e][dev0 ch0] decode error 0x20000 warnning 0x0 eStatus 0x20004
[vdec-w][dev0 ch0] decode warnning 0x40000 eStatus 0x8
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0 | / | B | / |
| B | 提供error/warning logs和dump es给技术支持人员 | / | C | / |
| C | 技术支持人员反馈码流异常 | 出口条件1:码流异常 => 码流问题 出口条件2:码流正常 | 出口条件1: => 流程结束,请用户确认码流 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => dump es |
3. 解码超时reset¶
从log中看出现大reset示例:
[MI WRN ]: _MI_SYS_Pass_TryDequeueOutputTaskNoLock[4857]: [thread:vdec0_P0_MAIN] mod[8] dev[0] pass[0] chn[13] output not finished more than 20360ms
从log中看出现小reset示例:
[MI WRN ]: MI_VDEC_CORE_CheckDecodeStatus[2072]: Dev 0 Chn 0 do reset, bWaitReset:1.
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | 从log中判断是否出现大reset | 出口条件1: 没有出现大reset 出口条件2: 出现大reset | 出口条件1: => B 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg,proc和dump es |
| B | echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0 | / | C | / |
| C | 使用第三方ES分析工具查看es | 出口条件1:图像异常 => 码流问题 出口条件2:图像正常 | 出口条件1: => 流程结束,请用户确认码流 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg,proc和dump es |
4. 性能不足¶
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | 1. echo setperf on > /proc/mi_modules/mi_vdec/mi_vdec0 2. cat /proc/mi_modules/mi_vdec/mi_vdec0 多cat几次查看ifps值是否稳定 | 出口条件1: 不稳定 => 送流问题 出口条件2: 稳定 | 出口条件1: => 流程结束,请确认app送流速度 出口条件2: => B | / |
| B | cat /proc/mi_modules/mi_vdec/mi_vdec0 多cat几次查看Drop值是否非0且Drop值递增 | 出口条件1: 是 => 存在drop丢帧 出口条件2: 否 | 出口条件1: => 转至章节"6.丢帧"确认 出口条件2: => C | / |
| C | 1. cat /proc/mi_modules/mi_vdec/debug_hal/dev_info 查看当前clk档位选择 2. 联系技术支持人员确认当前clk档位是否符合性能预期 | 出口条件1: clk档位选择与性能预期不相符 => 调整clk档位重新测试 出口条件2: clk档位选择与性能预期相符 | 出口条件1: => 流程结束,请确认clk档位 出口条件2: => D | / |
| D | 1. 打开丢帧开关: echo dropoutbuf on > /proc/mi_modules/mi_vdec/mi_vdec0 2. 确认打开丢帧开关后是否符合性能预期 | 出口条件1:符合 => 后级模块处理问题 出口条件2:不符合 | 出口条件1: => 流程结束,向技术支持人员报告该现象 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg和proc |
5. 解码花屏¶
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0 | / | B | / |
| B | 使用第三方ES分析工具查看es | 出口条件1:图像花屏 => 码流问题 出口条件2:图像不花屏 | 出口条件1: => 流程结束,请用户确认码流 出口条件2: => C | / |
| C | 1. dump解码后的输出YUV: echo dumpfb [chn] [port] [path] [frmcnt] [bDumpAll] [bDetile] > /proc/mi_modules/mi_vdec/mi_vdec0 2. 输出YUV通过工具软件查看图像是否正常 | 出口条件1:正常 出口条件2:异常 | 出口条件1: => 流程结束,向技术支持人员报告该现象 出口条件2: => D | / |
| D | 1. 若当前eDpbBufMode设置非NORMAL模式,将eDpbBufMode调整为E_MI_VDEC_DPB_MODE_NORMAL 2. 检查画面是否正常 | 出口条件1:正常 出口条件2:异常 | 出口条件1: => 流程结束,与技术支持人员确认inplace mode使用限制 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg,proc和dump es/YUV |
6. 丢帧¶
丢帧现象确认示例:

通过 cat /proc/mi_modules/mi_vdec/mi_vdec0 多次查看以上信息,Drop统计丢帧次数,若Drop值非0且递增,则表示出现丢帧。
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | echo dumpbs [chn] [path] > /proc/mi_modules/mi_vdec/mi_vdec0 | / | B | / |
| B | 使用第三方ES分析工具查看es是否正常 | 出口条件1:码流正常 出口条件2:码流异常 | 出口条件1: => 流程结束,向技术支持人员报告问题 出口条件2: => C | / |
| C | 1. cat /proc/mi_modules/mi_vdec/mi_vdec0 查看bCusPolicy和ErrMBDropThrd,确认客制化控制错误帧输出策略是否生效以及当前丢帧阈值 2. 调整丢帧阈值确认效果是否改善 | 出口条件1:有改善 出口条件2:无改善 | 出口条件1: => 流程结束,请用户确认错误帧输出策略 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg,proc和dump es |
7. 加载fw失败¶
出现加载fw失败时,打印举例:
[ven-e]fw ver:24020217 mismatch driver:23121922, pls check fwVPU_if.h and chagall.bin/chagall.h in folder mhal/chip_commom/vcodec/hal/xxx/
[ven-e]Failed to vpu init with bitcode, ret: 0x0000001e.
[ven-e]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[ven-e]>>>>>>>>>>>>>>>>>>>>>vdec load firmware fail<<<<<<<<<<<<<<<<<<
[ven-e]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
| 流程 | 方法 | 出口条件 | 下一步 | 需提供给技术支持人员的信息 |
|---|---|---|---|---|
| A | 从log上看是否有出现"fw ver:xxxxxxxx mismatch driver:xxxxxxxx"打印 | 出口条件1: 有出现 => 请确认是否有错误地替换过ko或chagall.bin 出口条件2: 没出现 | 出口条件1: => 流程结束 出口条件2: => 流程结束,向技术支持人员报告问题 | 出口条件2: => 提供问题复现时的uart log,kmsg和proc |