跳转至

MI JPD DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.00
  • Initial release
  • 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