完成官方管线全量逆向与 demo3 v5 复刻,清理仓库
- 逆向:Ghidra/IDA 全量反编译 CoreSDKLib.dll/ThermalSDK.dll/libthermalSDK.so/ libcoresdk.so(ARM64)/libmagcore.so,导出 analysis/ida/export/ - 解码官方渲染管线:DDT 校准表加载->快门端点选择->Q12 插值->ref(4x type1 帧 均值)->NUC 查表->盲元补偿->窗口->LUT1024 重建->2x 升采样->调色板 - 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致 - demo3 v5:完整复刻官方管线(含 DDT 解析、FFC 状态机、快门温度驱动), 修复 load_ddt 表错位导致的零像素问题 - 鬼影根因分析写入 analysis/reverse_20260813_full.md - 心跳/恢复机制:analysis/session_state.md + tools/resume_rev.ps1 - 新增 tsdk_pair3 增强采集工具;历史工具归档 csdk/tools/legacy/; 根目录抓帧残留删除,历史文档归档 analysis/history/ - csdk/README.md 完整使用文档;.gitignore/.gitattributes 补 LFS 规则
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# MAG160C 会话状态与恢复点(2026-08-13)
|
||||
|
||||
> 本文件是"心跳"锚点:每个里程碑更新一次。若会话中断,新会话先读本文件 +
|
||||
> `analysis/reverse_20260813_full.md`,然后运行 `tools/resume_rev.ps1` 继续。
|
||||
|
||||
## 当前阶段
|
||||
|
||||
**阶段 5/5:全部完成(2026-08-13 晚)**
|
||||
|
||||
## 已完成的里程碑
|
||||
|
||||
- [x] 工具链:Ghidra 12.1.2(headless)+ IDA Free 8.4 部署,5 个二进制全量导出
|
||||
- [x] 官方管线完整反编译(DDT 加载 / 端点选择 / Q12 插值 / ref=4×type1 帧均值 /
|
||||
NUC / 盲元 / 窗口 / LUT1024 / 2x 升采样 / FFC 状态机)
|
||||
- [x] DDT 文件解析(%TEMP%\Core160043865 → build-artifacts/mag160c_official.ddt)
|
||||
- [x] 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
|
||||
- [x] 鬼影根因文档:analysis/reverse_20260813_full.md §7
|
||||
- [x] demo3 v5 官方复刻实现并实机运行
|
||||
- [x] **零像素根因定位与修复**:load_ddt 在端点块内多读 blind 记录导致
|
||||
EP1+ 表错位 1280 字节 → 修好后全帧 0 个零像素,gain=4000 正常值
|
||||
- [x] demo3 vs 官方同场景对比:gray 直方图相关性 0.9197(跨会话)
|
||||
- [ ] 提交(用户未要求,等待指示)
|
||||
|
||||
## 零像素问题(已解决,记录在案)
|
||||
|
||||
- 现象:demo3 的 nuc 在 (65,25)/(66,25) 为 0,官方同坐标 9987/9989。
|
||||
- 根因:**demo3 的 load_ddt 读取布局错误**——blind 记录区在文件所有端点块
|
||||
之后,但代码在每个端点块内读了 blind,导致 EP1+ 的 thr/gain 表整体
|
||||
错位 1280 字节。错位表在死像素列附近的 seg0 gain=35321(应为 ~4000),
|
||||
d2 踩中后 NUC 输出 clamp 到 0。
|
||||
- 修复:thr+gain 按端点块顺序读完后再统一读 blind(csdk/tools/mag160c_demo3.c
|
||||
load_ddt)。
|
||||
- 验证:修复后全帧 0 个零像素;(65,25) nuc=9814、盲元目标 9740/9732;
|
||||
gain0=4000 正常值;窗口/统计正常([8493,10554] m9409 s258)。
|
||||
|
||||
## 常用命令
|
||||
|
||||
```powershell
|
||||
# 编译 demo3 v5(工作表捕获版)
|
||||
gcc -O2 -w -DMAG160C_STATIC -I"C:\Project\MAG160C\csdk\third_party\libusb\win64" -I"C:\Project\MAG160C\csdk\include" -I"C:\Project\MAG160C\csdk\src" -o "C:\Project\MAG160C\build-artifacts\mag160c_demo3.exe" "C:\Project\MAG160C\csdk\tools\mag160c_demo3.c" "C:\Project\MAG160C\csdk\src\mag160c_display.c" "C:\Project\MAG160C\csdk\src\mag160c_error.c" "C:\Project\MAG160C\csdk\third_party\libusb\win64\libusb-1.0.x64.a" -lgdi32 -luser32
|
||||
|
||||
# 运行/停止
|
||||
Start-Process "C:\Project\MAG160C\build-artifacts\mag160c_demo3.exe" -WorkingDirectory "C:\Project\MAG160C\build-artifacts"
|
||||
Stop-Process -Name mag160c_demo3 -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# 官方采集(先停 demo3)
|
||||
& "C:\Project\MAG160C\build-artifacts\tsdk_pair3.exe" "C:\Project\MAG160C\analysis\pairs_final_20260813" 8 6000
|
||||
# 注意:tsdk_pair3 的 config.txt / pair_*.meta / pair_*.win 写在进程 CWD,
|
||||
# 跑完要把 C:\Project\MAG160C 下的 config.txt 和 pair_0*.meta/win 移回目录。
|
||||
|
||||
# 对比/复算脚本(Python)
|
||||
# C:\Users\ZXC\AppData\Local\Temp\opencode\compare_live.py demo3捕获 vs 官方同场景
|
||||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_nuc.py 官方抓帧重建验证
|
||||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_full.py 全链路验证
|
||||
# C:\Users\ZXC\AppData\Local\Temp\opencode\verify_c_pipeline.exe C实现离线复算
|
||||
```
|
||||
|
||||
## 心跳约定
|
||||
|
||||
- 每完成一个里程碑,更新本文件"已完成的里程碑"勾选。
|
||||
- 会话中断恢复流程:
|
||||
1. 读本文件 + `analysis/reverse_20260813_full.md`
|
||||
2. 运行 `tools/resume_rev.ps1`(自动检查设备/进程/编译/采集)
|
||||
3. 按"零像素问题现场"继续
|
||||
Reference in New Issue
Block a user