跳转至

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. 解码没输出

解码没输出现象确认示例:

img

通过 cat /proc/mi_modules/mi_vdec/mi_vdec0 多次查看以上信息,DecFrmCnt统计成功解码输出的帧数,若该值无变化,则表示解码没有输出。

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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.

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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. 性能不足

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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. 解码花屏

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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. 丢帧

丢帧现象确认示例:

img

通过 cat /proc/mi_modules/mi_vdec/mi_vdec0 多次查看以上信息,Drop统计丢帧次数,若Drop值非0且递增,则表示出现丢帧。

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
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]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

img

流程 方法 出口条件 下一步 需提供给技术支持人员的信息
A 从log上看是否有出现"fw ver:xxxxxxxx mismatch driver:xxxxxxxx"打印 出口条件1: 有出现
=> 请确认是否有错误地替换过ko或chagall.bin
出口条件2: 没出现
出口条件1:
=> 流程结束
出口条件2:
=> 流程结束,向技术支持人员报告问题
出口条件2:
=> 提供问题复现时的uart log,kmsg和proc