T33/T32Pro-如何快速判断问题出在 Sensor、ISP 还是编码端?

T33/T32Pro-如何快速判断问题出在 Sensor、ISP 还是编码端?

Q:摄像头画面出现偏色、噪点、条纹、模糊或马赛克时,怎样快速定位是哪一层的问题?

A:依次对比 RAW、ISP 输出 YUV、编码后码流。问题第一次出现在哪一级,就优先检查哪一级。

RAW_YUV_码流三级定位流程图.png 

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 → 码流逐级对比,通常可以最快缩小问题范围。



评论交流 (共 0 条)