MI JPD DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 02/28/2024 |
前言¶
本文档旨在介绍遇到MI JPD相关问题时,如何进行初步排查,快速定位问题,以及确定是Sgs SDK问题后,需提供哪些信息给JPD owner分析。
使用以下命令可获取 MI JPD proc 信息:
cat /proc/mi_modules/mi_jpd/mi_jpd0
-
Device common info

-
Chn common info

-
Output port common info

-
Private info

使用以下命令可 dump 寄存器设定
cat /proc/mi_modules/mi_jpd/debug_hal/debug_reg -
Bank Info

-
Debug Info

使用以下命令可 dump 输入/输出数据
// dump 输入 es 数据 echo dumpsb [chn] [bEnable] [path] > /proc/mi_modules/mi_jpd/mi_jpd0 // dump 输出 yuv 数据 echo dumpfb [chn] [bEnable] [path] > /proc/mi_modules/mi_jpd/mi_jpd0使用以下命令可获取 JPD 使用的 clk rate
cat /proc/mi_modules/mi_jpd/debug_hal/clk
1. JPD 常见问题¶
1.1 帧率不足¶
Debug 流程参考图:
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 获取 Private info,确认 CHN INPUT Info 的 SendCnt 送流次数 & ifps 送流帧率是否正常; MinIntvl/MaxIntvl/AvgIntvl 可确认最小/最大/平均送流间隔 | 出口条件1:送流异常 -> 调整送流速度 出口条件2:送流正常 | 出口条件1:流程结束 出口条件2:B | ||
| B | 获取 Private info,确认 CHN Info 的 Width/Height 解码宽高是否符合 JPD 规格要求 | 出口条件1:不符合要求 -> 调整分辨率或提升 clk 出口条件2:符合要求 | 出口条件1:流程结束 出口条件2:C | 确认解码规格参考JPD API 文档 | |
| C | cat /proc/mi_modules/mi_jpd/debug_hal/clk 获取 clk 信息,确认 clk 使用是否符合预期 | 出口条件1:不符合预期 -> 调整 clk 设定 出口条件2:符合预期 | 出口条件1:流程结束 出口条件2:D | ||
| D | 获取 Private info,确认 CHN INPUT Info / CHN OUTPUT Info 的 DropCnt 是否有异常增加 | 出口条件1:有 出口条件2:无 | 出口条件1:E 出口条件2:F | ||
| E | 使用 dumpsb dump 输入 es 数据,使用码流分析工具确认 es 是否正常 | 出口条件1:异常 -> 调整码流数据 出口条件2:正常 | 流程结束 | 出口条件2:提供已有 log 信息 / proc 信息 | 分析码流可采用jpegsnoop等开源工具 |
| F | 使用 top 等方法确认 cpu loading 是否过高 | 出口条件1:过高 -> 调整线程优先级 出口条件2:正常 | 流程结束 | 出口条件2:提供已有 log 信息 / proc 信息 |
1.2 无输出¶
Debug 流程参考图:
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 获取 Private info,确认 CHN INPUT Info 的 Start 是否为 1 | 出口条件1:为0 -> 修改 App 调用 MI_JPD_StartChn 后重新确认 出口条件2:1 | 出口条件1:流程结束 出口条件2:B | ||
| B | 获取 Private info,确认 CHN INPUT Info 的 SendCnt 送流次数 & ifps 送流帧率是否有值 | 出口条件1:未送流 -> 修改 App 进行送流 出口条件2:送流正常 | 出口条件1:流程结束 出口条件2:C | ||
| C | 获取 Output port common info,确认 usrDepth 是否大于 0 | 出口条件1:无消费者,App 无法获取 output buf -> 设置 Output Depth 出口条件2:有消费者 | 流程结束 | 出口条件2:提供已有 log 信息 / proc 信息 / 输入 es 数据 |
1.3 输出花屏¶
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 使用 dumpsb dump 输入 es 数据,使用码流分析工具确认 es 是否正常 | 出口条件1:异常 -> 调整码流数据 出口条件2:正常 | 流程结束 | 出口条件2:提供已有 log 信息 / proc 信息 / 输入 es 数据 / 输出 yuv 数据 | 分析码流可采用jpegsnoop等开源工具 |
1.4 踩内存问题¶
JPD 踩内存示例:log 带有 Name=JPD0 表示 JPD device0 发生踩内存;其中,IsWrite=0 表示读踩内存,IsWrite=1 表示写踩内存。
[MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][369]: [MI_SYS_Mma_MmuCallback] Status=0x4, PhyAddr=0x403f40000, ClientId=0x19,Name=JPD0 IsWrite=0
[MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][369]: [MI_SYS_Mma_MmuCallback] Status=0x4, PhyAddr=0x401f60000, ClientId=0x19,Name=JPD0 IsWrite=1
Debug 流程:
按以下步骤1.抓取 debug 信息并提供给 JPD owner 确认。
- 步骤1. 按以下步骤配置并抓取信息:
vi /config/modparam.json # 在 E_MI_MODULE_ID_SYS 节点中增加或更新设定 "debugMmu": true reboot echo debug_mmu debug_log 1 1 1 32 > /proc/mi_modules/mi_sys/mi_sys0 # 输出 JPD 内部申请/释放内存信息 log & 踩内存时的内存使用情况 // echo debug_mmu debug_log 0 0 0 32 > /proc/mi_modules/mi_sys/mi_sys0 # 关闭 cat /proc/kmsg // 在其他控制台上运行 app 进行测试,提供带有踩内存 log 的 kmsg
1.5 timeout 问题¶
Debug 流程参考图:
Debug 流程:
| 流程 | 确认方法 | 出口条件 | 下一步 | 需提供信息 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 获取 Output port common info,确认 BindPeerInputPortList 中是否有绑定后级 SCL | 出口条件1:绑定 出口条件2:未绑定 | 出口条件1:B 出口条件2:流程结束 | ||
| B | 获取 Output port common info,确认 BindPeerInputPortList 中 bind_Type 是否为 Realtime mode 4 | 出口条件1:为4 出口条件2:非4 | 出口条件1:C 出口条件2:流程结束 | 出口条件2:提供已有 log 信息 / dumpreg 信息 / proc 信息 / 输入 es 数据 | |
| C | dump 寄存器设定,确认 Debug Info 中,0x7d[15:0] 是否大于 0x7f[15:0] | 出口条件1:大于 -> 后级 SCL 未读数据,请 SCL onwer 分析 出口条件2:等于 | 流程结束 |
1.6 其他问题¶
其他问题,在JPD使用过程中,按以下步骤多次抓取信息后,与JPD owner确认。
cat /proc/mi_modules/mi_jpd/mi_jpd0
cat /proc/mi_modules/mi_jpd/debug_hal/debug_reg