视频编解码与采集调试
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所示。

VENC PROC 详解
当前源码中的 AT 入口会将 venc、venc_res、venc_rc、venc_jpeg、venc_h264、venc_h265 之一传给 VENC PROC。以下字段按全局能力、通道配置、通道运行状态、工作统计和帧率分组;统计类字段均为累计值,应通过两次采样的增量判断运行是否推进。
| 输出组/字段 | 含义与判读方法 |
|---|---|
version、max_chn_num |
VENC 版本和支持的最大编码通道数,用于确认运行环境与并发上限。 |
id、standard、profile、max_width/max_height、width/height、buf_size、max_usd、power_mode |
通道号、编码协议/档次、能力上限、实际输入尺寸、码流缓存、最大用户数据和功耗模式。实际宽高不得超出最大宽高,buf_size 需覆盖目标码率和最大帧大小。 |
start、snap_en、snapping、recv_left、enc_left |
通道启动与抓拍状态、剩余接收/待编码帧数。业务持续送帧而剩余帧长期不下降时,需检查编码器启动、码流回收和下游取流。 |
buf_full、time_out、wbus_err、rbus_err |
码流缓冲区满、硬件超时、写总线错误和读总线错误累计次数;稳定运行时不应持续增加。 |
get_frame/free_frame、wait_enc、wait_bytes/wait_pics、cur_packs |
收帧/还帧计数、待编码帧数量、待取走码流量/帧数和当前帧包数。get_frame 与 free_frame 长期差距过大说明帧未归还。 |
query/query_ok、start/start_ok、config、interrupt、ch_reso_lost、rc_discard、status |
任务查询/启动成功情况、硬件配置与中断次数、分辨率变化、码控丢帧和编码任务状态。query_ok 或 start_ok 明显落后于对应总数时,结合错误日志定位失败原因。 |
src_fps、dst_fps、real_fps、first_pts、cur_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.h,uapi_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所示。

VDEC PROC 详解
VDEC PROC 由驱动状态、当前通道配置和收发帧统计组成。代码把 status 映射为 null、create、start、stop,把 dec_mode 映射为 normal、ip、i,把 out_order 映射为 display、decode,把 frame_layout 映射为 auto、linear。
| 输出组/字段 | 代码中的含义与判读方法 |
|---|---|
open_count、setup、version、chan_num |
设备打开计数、驱动是否已注册、版本和当前通道数。setup 未完成或 chan_num=0 时,没有可用的解码通道状态可供分析。 |
cur_proc_chan、chan_id、vfmw_id |
PROC 当前查询的 VDEC 通道、VDEC 通道号和关联 VFMW 通道号;排障时应确保与业务创建的通道一致。 |
status、standard、dec_mode、out_order、frame_layout、frame_buf_mode |
当前状态、解码协议、解码模式、输出顺序、图像布局和帧缓存来源。状态应为 start 才会持续解码;输出顺序和缓存模式必须与取帧侧约定一致。 |
max_stream_size/max_stream_num、error_threshold、extra_frame_num、out_format、lowdelay、max_dec_width/max_dec_height |
码流队列容量、错误阈值、额外帧缓存、输出 YUV 格式、低延时开关和最大解码尺寸。输入码流尺寸和分辨率不能超过配置上限。 |
try_que_stm/que_stm_ok、try_deq_stm/deq_stm_ok |
码流入队与取回尝试/成功次数;两者差值持续扩大说明存在入队或回收失败、阻塞或通道未启动。 |
try_acq_frm/acq_frm_ok、try_rls_frm/rls_frm_ok |
帧申请与释放尝试/成功次数。申请成功后必须释放;两组成功数长期不平衡通常表示帧缓存被下游占用。 |
bypass_chan_id、cycle_mode_chan、cycle_mode、event_map、reg_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所示。

VICAP PROC 详解
VICAP PROC 用于确认采集设备和 Pipe 是否已按预期启动。dev 表示采集设备实例,pipe 表示与该设备关联的数据处理通道;排查无预览或无帧时,应先确认 dev_en=1、start=1,再连续读取并观察 intCnt 和 frameRate。
| 字段 | 含义与判读方法 |
|---|---|
dev id、dev_en |
采集设备编号和使能状态。dev_en=0 表示设备未使能,Pipe 无法正常产出帧。 |
intf_mode |
输入接口模式。文档所列 6 为自建时序、3 为对接 Sensor;必须与板级输入链路配置相同。 |
pipe id、start |
Pipe 编号和启动状态。start=0 时,即使设备已使能也不会输出有效采集帧。 |
frameRate、intCnt |
Pipe 当前帧率和中断累计次数。正常采集时 intCnt 应随连续采样增长,frameRate 应接近 Sensor/自建时序配置的目标帧率。 |
width、height |
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 入口。
- 明确待验证的链路和判定条件:图层/合成问题记录 VAU、DPU PROC 与截屏;JPEG 问题记录输入文件、输出格式和 stride;编码/解码问题记录码流、帧、EOS 与错误事件;摄像头问题记录输入接口、时序和预览 Surface。
- 在应用的创建、启动、提交、回调和销毁路径记录实例 ID、物理地址、宽高、像素格式、stride、返回码和时间戳;日志字段应与本章 PROC 表中的字段保持可对照。
- 新增 AT 命令时,沿用现有 AT 的参数检查和返回码处理方式,并将命令限制在只读查询或受控测试操作;不要用新命令替代已有的 VAU、DPU、JPEG、VENC、VDEC 或 VICAP PROC。
- 每次问题复现至少归档复现步骤、执行命令、关键日志和一份帧数据或截屏证据,以便对照模块状态、输入数据和实际显示结果。
注意事项
- 先使用
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 不能替代端到端码流验证。 |