Files
MAG160C/analysis/handoff_20260812_night.md
T

3.8 KiB
Raw Blame History

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) mean9706 std41 时域噪声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 [边界参数]
  • 官方SDK: IR_Camera_SDK-1.0.1/windows/windows/app/
  • 反汇编: analysis/disasm/coresdk_windows_disasm.txt(193k行, UTF-16)
  • Python: numpy/scipy/PIL