Files
MAG160C/analysis/history/handoff_20260812_night.md
T

73 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MAG160C 逆向交接文档 v4(2026-08-12 深夜)
> **最新快照。** 前版:handoff_20260812.md(白天)。
> 本轮完成:官方 NUC/参考帧机制完整逆向 + demo3 修复(颗粒感/FFC 变色)。
## 1. 本轮成果
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(窗口) → 放大
```
2. **参考帧机制(决定性)**:
- ref(0x41ef0) = 平滑器0x41ee0(模式4)输出 = 启动时~22帧累加>>2(≈5.4×帧均值)
- 只在启动(帧6-9)与FFC时更新;**正常流中不更新**(帧10+不推帧0x41ee0)
- FFC后ref仅全局偏移变化(-145/-214),空间结构保持
- **官方ref含启动场景,不吸收后续场景 → 物体显示正常、无鬼影**
3. **表机制**:
- 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
4. **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~9706 std~41 时域噪声13.7 |
| 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 <dir> <npairs> <delay> [边界参数]
- 官方SDK: IR_Camera_SDK-1.0.1/windows/windows/app/
- 反汇编: analysis/disasm/coresdk_windows_disasm.txt(193k行, UTF-16)
- Python: numpy/scipy/PIL