3.8 KiB
3.8 KiB
MAG160C 逆向交接文档 v4(2026-08-12 深夜)
最新快照。 前版:handoff_20260812.md(白天)。 本轮完成:官方 NUC/参考帧机制完整逆向 + demo3 修复(颗粒感/FFC 变色)。
1. 本轮成果
- 完整逆向官方帧处理链(Windows CoreSDKLib.dll):
USB帧 → 帧计数分支(0x18000a0xx): 帧1-5: 0x18000c760(校正表生成, 无显示) 帧6-9: 0x18000c620(推帧0x41ee0平滑器→生成ref) + 0x18000c760 帧==9: 发送FFC(0x6bb6b672,1) 帧10+: 0x18000ca30(主处理) → 0x18000c950: 0x41f10平滑器(模式1: 首帧拷贝+EMA1/2) → f20缓冲(0x41f20) → 0x180017200(NUC查表: d=(f20-ref)>>1, 阈值表*(0x41858), 增益表*(0x41870), out=gain×d>>12+off, shift=0x11c=12) → dev+0x270 → 0x180017330(3x3加权, 表驱动) → dev+0x270 → 0x18001e920(0x41f40平滑) → 0x180010780(温度) → 0x1800109c0(窗口) → 放大 - 参考帧机制(决定性):
- ref(0x41ef0) = 平滑器0x41ee0(模式4)输出 = 启动时~22帧累加>>2(≈5.4×帧均值)
- 只在启动(帧6-9)与FFC时更新;正常流中不更新(帧10+不推帧0x41ee0)
- FFC后ref仅全局偏移变化(-145/-214),空间结构保持
- 官方ref含启动场景,不吸收后续场景 → 物体显示正常、无鬼影
- 表机制:
- 0x41848/0x41850 = 端点表1, 0x41858 = 插值输出(阈值表, 3项s16全局)
- 0x41860/0x41868 = 端点表2, 0x41870 = 插值输出(增益表 nsegs×19200×(gain,off))
- 0x180016dd0/0x180016f10 = 分段线性插值(按dev+0x54温度在断点0x41564间插值)
- 0x180016ae0 = 端点表初始化(帧0, 从配置0x417xx加载)
- nsegs=0x41554=3, 端点索引0x41840, 断点0x41564/0x41568
- demo3 修复(用户反馈: 颗粒感+FFC变色):
- 斜率 3 → 0.41(官方量级: 物体100 counts → nuc 41; 之前3倍放大27倍噪声)
- FFC后不重采集ref(REF_REINIT_AFTER_FFC=0, 只rebase全局偏移) — 重采集会吸收场景使物体消失/FFC后画面错
- 3x3双向滤波(live与ref同滤波, mura匹配)
- 像素偏移+0修正, 启动延迟采集, 采集期间冻结显示
- 实测: temporal gray std 54→22, FFC前后gray均值恒定(74.5), 无颜色跳变
2. 关键实测数据(pairs_nuc2)
| 量 | 值 |
|---|---|
| nuc(0x270) | mean |
| f20(0x41f20) | ~10855±3639(≈USB帧, 含mura) |
| ref(0x41ef0) | ~14654±3656(=f20+3875, mura同源corr0.998) |
| d2=(f20-ref)>>1 | std~114, 与nuc相关仅0.04(坐标/语义错位, 未完全解密) |
| 增益表seg1 | gain均值3352(≈0.82×4096), off≈9660(≈nuc) |
| 平滑器模式 | 0x41fd8=4(0x41ee0), 0x41fdc=1(0x41f10), 0x41fe0=1, 0x41fe4=5 |
| 帧流参数 | 2d78=4 2d88=5 2d8c=4 2d90=1800 2d94=250 |
3. demo3 当前状态
- 编译: build-artifacts/mag160c_demo3.exe
- 管线: counts →(3x3+坏点)→ nuc=(live-ref)×0.41+9804 → 窗口[mean±312] → LUT1024 → palette256 → 2x显示
- ref: 启动nread>=130后45帧中值采集; FFC后只rebase全局偏移(不重采集)
- 诊断: demo3_diag.txt(每帧 ref/live/nuc/窗口统计), demo3_auto_*.bmp(自动截图)
4. 未完成/待验证
- 官方nuc与(f20-ref)的精确映射(相关0.04, 表机制复杂未完全解码)
- demo3斜率0.41的实机画面确认(对比度/颜色方向)
- 0x180016ae0端点表初始化(0x417xx配置/DDT加载)
- FFC状态机(0x73bf4, 帧号75/130)
- ThermalSDK.dll完整逆向
- 启动黑屏~9秒可优化(更早采集或显示预热画面)
- 热源场景验证(确认颜色方向: 热=白/红)
5. 环境
- 设备: Get-PnpDevice | ? InstanceId -match 833C
- harness: build-artifacts/tsdk_pair2.exe [边界参数]
- 官方SDK: IR_Camera_SDK-1.0.1/windows/windows/app/
- 反汇编: analysis/disasm/coresdk_windows_disasm.txt(193k行, UTF-16)
- Python: numpy/scipy/PIL