跳转至

视频编解码与采集调试

VENC PROC

代码与接口参考: AT 命令分发位于 /src/middleware/utils/at/at_venc_cmd/at/at_venc.c,DFX 接口声明位于 /src/middleware/utils/common_headers/venc/internal/drv_venc_dfx.h

VENC PROC 简介

查询VENC(Video Encoder)模块基本信息。

VENC PROC 信息

下发命令:AT+VENC=venc_proc,cat,venc

VENC模块proc信息如图1所示。

图 1 VENC proc信息

VENC-proc信息

VENC PROC 详解

当前源码中的 AT 入口会将 vencvenc_resvenc_rcvenc_jpegvenc_h264venc_h265 之一传给 VENC PROC。以下字段按全局能力、通道配置、通道运行状态、工作统计和帧率分组;统计类字段均为累计值,应通过两次采样的增量判断运行是否推进。

输出组/字段 含义与判读方法
versionmax_chn_num VENC 版本和支持的最大编码通道数,用于确认运行环境与并发上限。
idstandardprofilemax_width/max_heightwidth/heightbuf_sizemax_usdpower_mode 通道号、编码协议/档次、能力上限、实际输入尺寸、码流缓存、最大用户数据和功耗模式。实际宽高不得超出最大宽高,buf_size 需覆盖目标码率和最大帧大小。
startsnap_ensnappingrecv_leftenc_left 通道启动与抓拍状态、剩余接收/待编码帧数。业务持续送帧而剩余帧长期不下降时,需检查编码器启动、码流回收和下游取流。
buf_fulltime_outwbus_errrbus_err 码流缓冲区满、硬件超时、写总线错误和读总线错误累计次数;稳定运行时不应持续增加。
get_frame/free_framewait_encwait_bytes/wait_picscur_packs 收帧/还帧计数、待编码帧数量、待取走码流量/帧数和当前帧包数。get_framefree_frame 长期差距过大说明帧未归还。
query/query_okstart/start_okconfiginterruptch_reso_lostrc_discardstatus 任务查询/启动成功情况、硬件配置与中断次数、分辨率变化、码控丢帧和编码任务状态。query_okstart_ok 明显落后于对应总数时,结合错误日志定位失败原因。
src_fpsdst_fpsreal_fpsfirst_ptscur_pts 源帧率、目标帧率、实际编码帧率和首/当前帧时间戳。real_fps 长期低于 dst_fps 时,结合源帧率、丢帧和码流回收状态排查。

表 1 VENC proc信息说明

类别

参数

说明

global info

version

版本号。

max_chn_num

最大编码通道数。

chn attr

id

编码通道号。

standard

编码通道协议。

profile

编码协议档次。

max_width

通道最大宽度,以像素为单位。

max_height

通道最大高度,以像素为单位。

width

图像宽度,以像素为单位。

height

图像高度,以像素为单位。

buf_size

码流缓存大小。

max_usd

最大用户数据长度。

power_mode

编码功耗模式。

chn info

id

编码通道号。

start

编码通道是否启动。

snap_en

抓拍是否使能。

snapping

是否正在抓拍。

recv_left

剩余接收帧数。

enc_left

剩余编码帧数。

buf_full

码流buf满次数。

time_out

硬件超时次数。

wbus_err

写总线错误次数。

rbus_err

读总线错误次数。

chn status

id

编码通道号。

get_frame

收帧次数。

free_frame

还帧次数。

slice_int

slice中断次数。

wait_enc

等待编码帧数。

left_recv

剩余接收帧数。

left_enc

剩余编码帧数。

wait_bytes

等待收走码流大小。

wait_pics

等待收走码流帧数

cur_packs

当前帧码流包数。

work status

id

编码通道号。

query

查询任务次数。

query_ok

查询成功次数。

start

启动编码次数。

start_ok

启动成功次数。

config

配置硬件次数。

interrupt

硬件中断次数。

ch_reso_lost

分辨率变化次数。

rc_discard

码控丢帧次数。

status

编码任务状态。

frame rate

id

编码通道号。

src_fps

源帧率。

dst_fps

目标帧率。

real_fps

实际帧率。

first_pts

第1帧帧时间戳。

cur_pts

当前帧时间戳。

time_cost

编码耗时(单位:μs)。

frame status

id

编码通道号。

user

用户送帧数。

user_err

用户送帧错误数。

auto

前级送帧数。

auto_err

前级送帧错误数。

send

正确发送图像帧数。

stop

停止通道丢帧数。

full

码流buf满丢帧数。

direct

直接送编码队列帧数。

size_err

分辨率错误帧数。

frame info

id

编码通道号。

free

原图空闲队列帧数。

busy

原图有效队列帧数。

thumb_free

缩略图空闲队列帧数。

thumb_busy

缩略图有效队列帧数。

time_ref

最新输入图像时间戳。

format

最新输入图像格式。

stream status

id

编码通道号。

free_cnt

码流buffer中空闲节点数。

busy_cnt

码流buffer中有效节点数。

user_cnt

码流buffer中用户节点数。

user_get

获取码流的码流包数。

user_rel

释放码流的码流包数。

get_times

用户获取码流的次数。

stream info

id

编码通道号。

base

码流buf基地址。

read_tail

码流buf读尾指针。

read_head

码流buf读头指针。

write_tail

码流buf写尾指针。

write_head

码流buf写头指针。

buf_len

码流buf长度。

data_len

码流数据长度。

buf_free

码流buf空闲长度。

roi

id

编码通道号。

rect_id

ROI区域编号。

x

ROI区域坐标x。

y

ROI区域坐标y。

width

ROI区域宽度。

height

ROI区域高度。

roi param

id

编码通道号。

fg_level

ROI区域等级。

bg_level

非ROI区域等级。

is_abs_qp[i/pb/vi]

i/pb/vi帧是否绝对qp。

qp[i/pb/vi]

i/pb/vi帧qp值。

VDEC PROC

代码与接口参考: AT 命令分发位于 /src/middleware/utils/at/at_vdec_cmd/at/at_vdec.c,DFX 接口声明位于 /src/middleware/utils/common_headers/vdec/internal/drv_vdec_dfx.huapi_vdec_dfx_proc_read()uapi_vfmw_dfx_proc_read() 的实现分别位于 /src/middleware/services/vdec/drv/vdec/vdec_v7.0/drv_vdec_dev.c/src/middleware/services/vdec/drv/vfmw/vfmw_v7.0/osal/liteos/liteos_proc.c

VDEC PROC 简介

查询VDEC(Video Decoder)模块基本信息。

VDEC PROC 信息

下发命令:AT+VDEC=vdec_proc,cat,vdec

VDEC模块proc信息如图1所示。

图 1 VDEC proc信息

VDEC-proc信息

VDEC PROC 详解

VDEC PROC 由驱动状态、当前通道配置和收发帧统计组成。代码把 status 映射为 nullcreatestartstop,把 dec_mode 映射为 normalipi,把 out_order 映射为 displaydecode,把 frame_layout 映射为 autolinear

输出组/字段 代码中的含义与判读方法
open_countsetupversionchan_num 设备打开计数、驱动是否已注册、版本和当前通道数。setup 未完成或 chan_num=0 时,没有可用的解码通道状态可供分析。
cur_proc_chanchan_idvfmw_id PROC 当前查询的 VDEC 通道、VDEC 通道号和关联 VFMW 通道号;排障时应确保与业务创建的通道一致。
statusstandarddec_modeout_orderframe_layoutframe_buf_mode 当前状态、解码协议、解码模式、输出顺序、图像布局和帧缓存来源。状态应为 start 才会持续解码;输出顺序和缓存模式必须与取帧侧约定一致。
max_stream_size/max_stream_numerror_thresholdextra_frame_numout_formatlowdelaymax_dec_width/max_dec_height 码流队列容量、错误阈值、额外帧缓存、输出 YUV 格式、低延时开关和最大解码尺寸。输入码流尺寸和分辨率不能超过配置上限。
try_que_stm/que_stm_oktry_deq_stm/deq_stm_ok 码流入队与取回尝试/成功次数;两者差值持续扩大说明存在入队或回收失败、阻塞或通道未启动。
try_acq_frm/acq_frm_oktry_rls_frm/rls_frm_ok 帧申请与释放尝试/成功次数。申请成功后必须释放;两组成功数长期不平衡通常表示帧缓存被下游占用。
bypass_chan_idcycle_mode_chancycle_modeevent_mapreg_event 旁路调试、循环测试、已注册事件和事件注册耗时。它们是测试/调测状态,不应作为正常业务输出是否成功的唯一依据。

表 1 VDEC proc参数说明

参数

描述

open_count

VDEC设备打开次数。

setup

0:VDEC设备未注册;1:VDEC设备注册成功。

cur_proc_chan

proc查看的实例VDEC ID。

bypass_chan_id

VDEC bypass调试功能,即解码内部循环收还帧,不对外输出图像。

cycle_mode_chan

循环输出固定帧模式。

version

VDEC版本号。

chan_num

当前运行的实例个数。

chan_id

VDEC实例ID。

vfmw_id

vfmw实例ID。

status

模块状态。

standard

解码协议。

dec_mode

解码模式。

out_order

输出模式。

frame_layout

图像布局方式。

cycle_mode

循环测试模式。

max_stream_size

最大码流缓冲大小。

max_stream_num

最大码流个数。

error_threshold

错误阈值。

extra_frame_num

额外解码帧存个数,不包含解码所需的最少帧存数。

out_format

输出YUV格式。

event_map

注册事件。

lowdelay

低延时使能。

try_que_stm

尝试入队次数。

que_stm_ok

入队成功次数。

try_deq_stm

尝试获取码流buffer次数。

deq_stm_ok

获取码流buffer成功次数。

try_acq_frm

尝试获取帧存次数。

acq_frm_ok

获取帧存成功次数。

try_rls_frm

尝试释放帧存次数。

rls_frm_ok

释放帧存成功次数。

is_eos

eos使能。

reg_event

注册事件耗时(单位:μs)。

VICAP PROC

代码与接口参考: AT+ISP 命令由可选的 at_isp_cmd 组件接入;当前源码树中的构建入口位于 AT 组件 CMake 文件。VICAP 的设备、Pipe 和帧率等字段可在 viu_vicap.h 查看,采集驱动处理逻辑位于 viu_drv_vicap.c

VICAP PROC 简介

查询VICAP(Video Input Capture)模块基本信息。

VICAP PROC 信息

下发命令:AT+ISP=test_isp_dfx_show

VICAP模块proc信息如图1所示。

图 1 VICAP proc信息

VICAP-proc信息

VICAP PROC 详解

VICAP PROC 用于确认采集设备和 Pipe 是否已按预期启动。dev 表示采集设备实例,pipe 表示与该设备关联的数据处理通道;排查无预览或无帧时,应先确认 dev_en=1start=1,再连续读取并观察 intCntframeRate

字段 含义与判读方法
dev iddev_en 采集设备编号和使能状态。dev_en=0 表示设备未使能,Pipe 无法正常产出帧。
intf_mode 输入接口模式。文档所列 6 为自建时序、3 为对接 Sensor;必须与板级输入链路配置相同。
pipe idstart Pipe 编号和启动状态。start=0 时,即使设备已使能也不会输出有效采集帧。
frameRateintCnt Pipe 当前帧率和中断累计次数。正常采集时 intCnt 应随连续采样增长,frameRate 应接近 Sensor/自建时序配置的目标帧率。
widthheight Pipe 输出图像宽高,应与后续 VENC、DPU 或应用申请的 Surface 尺寸匹配。

表 1 VICAP proc参数说明

类别

参数

说明

dev信息

dev id

dev编号。

dev_en

dev使能。

intf_mode

6:自建时序;3:对接sensor模式。

pipe信息

pipe id

pipe编号。

start

是否启动。

frameRate

pipe帧率。

intCnt

pipe中断数量,正常启动时候应该不断增加。

width

pipe宽度。

height

pipe高度。

基于图形视频调试 Demo 扩展自己的调试

本章前述 AT 命令和 PROC 已是 SDK 的现有调试能力,应先用它们建立问题证据。只有现有命令不能覆盖业务特有状态时,才在自己的应用中增加调试信息或 AT 入口。

  1. 明确待验证的链路和判定条件:图层/合成问题记录 VAU、DPU PROC 与截屏;JPEG 问题记录输入文件、输出格式和 stride;编码/解码问题记录码流、帧、EOS 与错误事件;摄像头问题记录输入接口、时序和预览 Surface。
  2. 在应用的创建、启动、提交、回调和销毁路径记录实例 ID、物理地址、宽高、像素格式、stride、返回码和时间戳;日志字段应与本章 PROC 表中的字段保持可对照。
  3. 新增 AT 命令时,沿用现有 AT 的参数检查和返回码处理方式,并将命令限制在只读查询或受控测试操作;不要用新命令替代已有的 VAU、DPU、JPEG、VENC、VDEC 或 VICAP PROC。
  4. 每次问题复现至少归档复现步骤、执行命令、关键日志和一份帧数据或截屏证据,以便对照模块状态、输入数据和实际显示结果。

注意事项

  • 先使用 smoke、DPU 颜色条或截屏建立基础输出证据,再分析业务 PROC;业务未创建对应模块时,PROC 为空属于正常现象。
  • AT+GPU=screen_cap,layer_id 保存的是当前 DPU 图层帧缓冲区,不会自动转换压缩格式或像素格式。分析文件时必须同时记录命令输出的 width、height、stride、color_fmt 和 compress_mode。
  • dpu_save_fb、截屏和 PROC 日志会占用存储与串口带宽。定位结束后关闭保存开关、清理文件,并避免在实时业务中持续打印。
  • 颜色条、mute、图层显示开关和寄存器读写会改变显示状态,仅用于受控调试环境;执行前记录原状态,结束后恢复业务配置。
  • VENC、VDEC 和 VICAP 的 PROC 只能反映已创建实例的状态。必须结合输入码流、帧缓冲区、EOS/错误事件和实际输出文件或画面判定问题。

常见问题

现象 排查方法
AT+GPU 命令不可用 检查 gpu_at 组件 CMake 文件 和 3322 目标组件清单中的 gpu_at
smoke 或颜色条无显示 依次检查屏幕供电/背光、LCD 初始化、MIPI/QSPI 时序和 DPU 基础输出;不要先从 VAU 或 JPEG 推断故障。
PROC 为空 确认待测业务已经创建相应模块并实际提交任务或帧,再重试对应 PROC 命令。
截屏文件不存在或内容异常 使用 AT+GPU=screen_cap,layer_id,检查 /user 目录可写性与剩余空间,并依据命令输出的格式、stride 和压缩模式解析文件。
VENC/VDEC PROC 有信息但无有效业务输出 继续检查码流/帧的申请与归还、编码协议、分辨率、EOS 和错误事件;PROC 不能替代端到端码流验证。