使用 Eyesee MPP 的官方 sample_virvi2venc 调试 VI→VENC 编码时遇到问题,想请教排查方向。
运行的样例
sample_virvi:VI 可以正常启动并持续取帧。sample_virvi2venc:VI 到 VENC 的 Bind 成功,VENC 可以创建、初始化、启动。sample_venc:使用离线 NV21 输入,不经过 VI/Bind,同样没有码流输出。
为便于持续观察,sample_virvi2venc 的 test_duration 设为 0。同时将样例中 AW_MPI_VENC_GetStream() 超时后的处理改为记录 warning 后继续重试,不因一次超时退出。
关键日志
sample_virvi2venc:
<prepare> bind vi[0-0] to venc[0] success
<CedarvVideoEncInit> Venc Init success
<CedarvVideoEncInit> Venc Start success
<VideoEncEmptyThisBuffer> VencChn[0]: first video frame ...
在用户态 encoder 的首帧路径增加临时日志后:
venc-trace[0] before VE lock, channel=0, inputId=2
venc-trace[0] VE lock acquired
之后没有看到 device encode returned 或 VE lock released。
AW_MPI_VENC_GetStream() 连续超时:
venc[0] get stream timeout/fail[0xa008800e], retry
其中 0xa008800e 是 ERR_VENC_BUF_EMPTY。
同时 cedar_dev 的 IRQ 计数保持为 0,说明首帧没有产生 VE 硬件中断。
mpp/ve 调试信息
按驱动提示,在样例启动前执行:
echo 1 > /sys/kernel/debug/mpp/ve
停止样例后执行:
cat /sys/kernel/debug/mpp/ve
内核输出:
VE: there is no any codec working currently.
VE: Please run app first.
想请教
sample_virvi2venc已完成 Bind、Venc Init success、Venc Start success,首帧进入encode()后却没有 VE IRQ,通常优先检查什么?sample_venc(离线 NV21)也没有输出,是否有已知的 VENC/VE 初始化或库版本配套要求?mpp/ve没有导出 proc 信息时,官方建议再抓取哪些日志、寄存器或 debugfs 节点?
完整运行日志作为附件提供
eyesee_virvi2venc_full.log
