跳转至

VENC Debug SOP


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 02/22/2024

    前言

    本文阅读对象为FAE及软件开发相关人员,旨在介绍开发过程中遇到VENC(H264/H265/Jpeg编码)相关问题时,如何对一些常见问题进行初步分析与排查,以及怀疑是SDK问题时需要提供的相关信息与执行命令。


    1. Debug常用的基本操作和命令

    1.1 proc echo 命令

    功能
    Dump input buffer
    命令 echo dump_in [ChnId] [num] [dump_path] > /proc/mi_modules/mi_venc/mi_venc[DevID]
    参数说明 [ChnId]:通道号
    [num]:需要dump_in的总张数
    [dump_path]:保存文件的路径
    [DevID]:设备号,0 表示H264/H265编码,8表示Jpe
    举例 echo dump_in 0 10 /mnt > /proc/mi_modules/mi_venc/mi_venc0
    功能
    Dump output stream
    命令 echo dump_out [ChnId] [num] [dump_path] > /proc/mi_modules/mi_venc/mi_venc[DevID]
    参数说明 [ChnId]:通道号
    [num]:需要dump_out的总张数
    [dump_path]:保存文件的路径
    [DevID]:设备号,0 表示H264/H265编码,8表示Jpe
    举例 echo dump_out 0 100 /mnt > /proc/mi_modules/mi_venc/mi_venc0
    功能
    Drop/Release the corresponding channel output task
    命令 echo drop_out [ChnId] [Status] > /proc/mi_modules/mi_venc/mi_venc[DevID]
    参数说明 [ChnId]:通道号,为a时代表所有通道
    [Status]:
    r : release the corresponding channel output task
    d : drop the corresponding channel output task
    [DevID]:设备号,0 表示H264/H265编码,8表示Jpe
    举例 echo drop_out 0 d > /proc/mi_modules/mi_venc/mi_venc0
    说明:drop channel 0 output task
    echo drop_out 0 r > /proc/mi_modules/mi_venc/mi_venc0
    说明:release channel 0 output task
    echo drop_out a d > /proc/mi_modules/mi_venc/mi_venc0
    说明:drop the whole channel output task
    echo drop_out a r > /proc/mi_modules/mi_venc/mi_venc0
    说明: release the whole channel output task
    功能
    Drop/Release the corresponding channel input task
    命令 echo drop_in [ChnId] [Status] > /proc/mi_modules/mi_venc/mi_venc[DevID]
    参数说明 [ChnId]:通道号,为a时代表所有通道
    [Status]:
    r : release the corresponding channel input task
    d : drop the corresponding channel input task
    [DevID]:设备号,0 表示H264/H265编码,8表示Jpe
    举例 echo drop_in 0 d > /proc/mi_modules/mi_venc/mi_venc0
    说明:drop channel 0 input task
    echo drop_in 0 r > /proc/mi_modules/mi_venc/mi_venc0
    说明:release channel 0 input task
    echo drop_in a d > /proc/mi_modules/mi_venc/mi_venc0
    说明:drop the whole channel input task
    echo drop_in a r > /proc/mi_modules/mi_venc/mi_venc0
    说明: release the whole channel input task
    功能
    动态修改Venc Sdk打印等级
    命令 echo [log_level] > proc/mi_modules/mi_venc/debug_level
    参数说明 [log_level]:log等级,取值范围[2,7],默认是2,值越大打印越多
    举例 echo 7 > proc/mi_modules/mi_venc/debug_level

    1.2 proc cat 命令

    功能
    命令
    获取编码Proc h264/5 Pipline信息 cat /proc/mi_modules/mi_venc/mi_venc0
    获取编码Proc Jpe Pipline信息 cat /proc/mi_modules/mi_venc/mi_venc8
    获取编码Proc 额外的Hal Device信息 cat /proc/mi_modules/mi_venc/debug_hal/dev_info
    获取编码Proc 额外的Hal Channel信息 cat /proc/mi_modules/mi_venc/debug_hal/ctx_info
    获取编码H264/H265 Clk信息 cat /proc/mi_modules/mi_venc/debug_hal/ven_clock*
    获取编码Jpe Clk信息 cat /proc/mi_modules/mi_venc/debug_hal/jpe_clock

    1.3 其它说明

    1. proc中截图说明可能会因为版本迭代有小差异,请只关注红色框部分
    2. H264/5码流是否花屏可使用VLC播放或者码流分析工具 Intel Video Pro Analyzer,JPE则使用正常图片工具即可。
    3. 找Venc Owner分析请尽可能提供:a.所有的proc cat 命令,并且连续执行3次 b.串口log和Kmsg c.前级SCL的proc d.Pipline

    2. 常见问题基本分析

    2.1 码流花屏

    debug 流程参考图如下:

    此处的码流花屏不包括马赛克效应,因为编码本身是有损的,如果码率低画质差原理上就可能出现马赛克。

    2.2 播放无流

    debug 流程参考图如下:

    2.3 帧率异常

    debug 流程参考图如下:

    2.4 码率不足或超标

    debug 流程参考图如下:

    流程参考图中检查实时码率需要注意: 1. 只有CBR存在不足的状况,其它码率控制方式只有超标。 2. Kbps1s/Kbps10 H264/5存在因为I帧间隔(Gop)设定差异出现包含I帧时偏大,不包含则偏小的状况。尽量以Gop为准,为了准确KbpsGop统计时如果Gop设定超过6s,会强制按2s统计 3. JPE没有P帧的概念,直接看Kbps1s即可。

    2.5 马赛克效应

    debug 流程参考图如下:

    2.6 I帧Size太大

    debug 流程参考图如下:

    2.7 呼吸效应

    debug 流程参考图如下:

    2.8 颜色有色差

    请调用API MI_VENC_SetH264Trans/MI_VENC_SetH265Trans将参数s32ChromaQpIndexOffset设置为负数(Ex:-12/-6)确认是否有改善。

    理论上值越小越有效果,但值太小整体Qp会被抬高大概1,需要平衡整体画质和色差问题. 若无效果请抓YUV和原始码流提供给VENC Owner确认