T33/T32Pro-如何快速判断问题出在 Sensor、ISP 还是编码端?
Q:摄像头画面出现偏色、噪点、条纹、模糊或马赛克时,怎样快速定位是哪一层的问题?
A:依次对比 RAW、ISP 输出 YUV、编码后码流。问题第一次出现在哪一级,就优先检查哪一级。
RAW、YUV、码流三级定位流程
RAW、YUV 怎么抓取?
方法一:使用 Tiziano 动态调试工具
设备连接动态工具后,在 TOP 页面操作:
• 点击 GNV12:抓取 ISP 输出的 NV12 图,选择路径和文件名后保存;
• 点击 GRaw:抓取 Sensor RAW,选择路径和文件名后保存;
• 如果 RAW 无法正常抓取,可进入 RawCfg 检查抓图内存方式。
方法二:通过板端命令抓取 RAW、YUV
选择 RAW 抓取模式
支持 3 种内存模式:
模式 | 内存来源 | 适用模式 | 特点 |
mode 0 | malloc 动态分配 | 线性、WDR | 不需要预留内存,但可能因系统内存不足而失败 |
mode 1 | ispmem 预留内存 | 线性、WDR | 稳定可靠,但需要在 cmdline 中预留 ispmem |
mode 2 | MDNS 缓存 | 线性、WDR | 不需要额外分配内存;WDR 会分别抓出长帧和短帧 |
模式配置命令:
# 按需要将 0 改为 1 或 2
echo "mode 0" > /proc/jz/isp/isp-w02
模式可以不配置,系统默认采用 mode 2。
使用 mode 1 时,需要在 cmdline 中预留足够的 ispmem。可按下面的值估算最小空间:
ispmem ≥ 图像宽 × 图像高 × 2 字节 × 实际输出帧数
例如一帧 500 万像素 RAW 约为 9.54 MiB,通常至少预留约 9~10 MB。WDR 会输出长、短两帧,计算内存时还要考虑帧数翻倍。
执行 RAW 抓取
命令格式:
# snapraw <vinum> <抓取帧数>
echo "snapraw 0 1" > /proc/jz/isp/isp-w02
参数含义:
• 第一个数字是 vinum:0 表示主摄,1 表示次摄;
• 第二个数字是需要抓取的帧数;
• 在线性模式下,snapraw 0 1 抓取主摄 1 帧 RAW;
• 在 WDR 模式下,长帧和短帧会分别输出,因此实际文件数量是设置帧数的 2 倍。
proc 节点、输出文件名和保存位置可能随芯片平台、驱动版本变化。若节点不存在或命令返回错误,应以当前项目的软件说明为准。
通过板端命令抓取 NV12
板端抓取方式需要先区分 ISP 是否为直通模式。
非直通模式
通过在 /tmp/mountdir/ 下创建指定文件触发抓图:
# ISP 处理后的 NV12
touch /tmp/mountdir/ispsnap0.nv12 # 主码流
touch /tmp/mountdir/ispsnap1.nv12 # 次码流
# 编码通路的 NV12,通常用于检查编码器输入帧
touch /tmp/mountdir/encsnap0.nv12 # 主码流
touch /tmp/mountdir/encsnap1.nv12 # 次码流
# OSD 叠加后的 NV12
touch /tmp/mountdir/osdsnap0.nv12 # 主码流
touch /tmp/mountdir/osdsnap1.nv12 # 次码流
直通模式
主码流通过 isp-ivdc 节点触发:
echo snapyuv > /proc/jz/isp/isp-ivdc
直通模式下,次码流仍使用非直通模式的文件触发方式,根据需要创建:
touch /tmp/mountdir/ispsnap1.nv12
抓取点 | 主码流 | 次码流 | 用途 |
ISP 处理后 | ispsnap0.nv12 | ispsnap1.nv12 | 判断 ISP 输出是否已经异常 |
编码通路 | encsnap0.nv12 | encsnap1.nv12 | 检查送入编码链路的 NV12 是否正常 |
OSD 叠加后 | osdsnap0.nv12 | osdsnap1.nv12 | 判断异常是否由 OSD 叠加引入 |
encsnap*.nv12 仍是 NV12 原始帧,不是 H.264/H.265 压缩码流。判断编码器是否产生块效应、花屏等问题,还需要继续抓取并解码实际码流进行比较。
文件触发路径、输出位置和 proc 节点可能随产品软件版本变化。使用前应确认 /tmp/mountdir/ 可写、相关进程正在运行,并以当前项目说明为准。
第一步:先看 RAW
RAW 是进入 ISP 前的原始采集数据。
• RAW 已经异常:优先检查 Sensor 和采集前端;
• RAW 正常:继续检查 ISP 输出 YUV。
RAW 异常时,常见检查方向包括:
• 镜头、Sensor 本体;
• Sensor 供电、时钟和复位;
• MIPI 时序、Lane 配置和传输稳定性;
• 曝光、模拟增益、帧率及 Sensor 寄存器;
• RAW 位宽、Bayer 排列、尺寸和抓图方式。
这里的“Sensor 端”是采集前端的统称,不代表一定是 Sensor 芯片损坏。
第二步:再看 ISP 输出 YUV
如果 RAW 正常,但 NV12、NV21 等 YUV 图已经异常,问题优先位于 ISP。
常见检查方向包括:
• BLC、DPC、LSC;
• 去马赛克、AWB、CCM、Gamma;
• 降噪、锐化、色彩和宽动态处理;
• 模块开关、参数及数据格式配置。
Tiziano 动态调试工具可以在同一链路抓取 RAW 和 NV12/NV21,适合直接进行前后对比。
第三步:最后看编码后码流
如果编码前 YUV 正常,但 H.264/H.265 码流解码后的画面异常,优先检查编码或传输链路。
常见检查方向包括:
• 码率是否过低;
• GOP、QP、帧率配置;
• 编码分辨率、stride 和像素格式;
• I 帧、P 帧参考关系;
• 码流丢包、缺帧或数据损坏。
如果换一个解码器后恢复正常,或者解码出的帧正常、只有某个播放器显示异常,则应继续检查解码器、播放器或显示链路,而不是直接归因于编码器。
快速判断表
对比结果 | 优先检查层面 |
RAW 已异常 | Sensor / 镜头 / 供电 / 时钟 / MIPI / Sensor 配置 |
RAW 正常,YUV 异常 | ISP 模块和参数 |
YUV 正常,码流解码帧异常 | 编码器或码流传输 |
解码帧正常,只有播放器异常 | 解码、播放器或显示端 |
常见现象参考
现象 | 优先检查 |
RAW 就有固定坏点、行列条纹 | Sensor、供电、时钟、MIPI |
RAW 正常,YUV 出现偏色或过度锐化 | ISP |
静止画面正常,运动时出现拖影 | ISP 时域降噪或编码参考帧,需通过 YUV 对比区分 |
YUV 正常,码流出现块效应 | 码率、QP、编码器 |
码流偶发绿屏、花屏或半屏 | 丢包、码流损坏、解码或格式配置 |
避免误判
1. 使用同一场景、相同曝光条件抓取数据;
2. 尽量抓取同一帧,或根据时间戳对齐 RAW、YUV 和码流帧;
3. RAW 必须按正确的分辨率、位宽和 Bayer 排列解析;
4. YUV 必须确认 NV12/NV21、stride 和色彩范围配置正确;
5. 编码问题要看解码后的原始帧,不要只看一个播放器窗口。
结论
RAW 异常,先查 Sensor 和采集前端;RAW 正常但 YUV 异常,先查 ISP;YUV 正常但码流解码帧异常,先查编码和传输。不要只看最终预览画面定责。沿着 RAW → YUV → 码流逐级对比,通常可以最快缩小问题范围。
