Files
MAG160C/analysis/session_state.md
T
ZXCLI 03ed936a5f 修复 demo3 颗粒感:显示层改用官方同款 320x240 2x 平滑输出
- 根因:demo3 之前渲染 160x120 原始灰度并最近邻放大,官方输出是
  2x 升采样后的 320x240(2-tap 平滑本身抑噪)
- 已排除:0x230(FUN_1800175a0 帧差调整)、0x41fe8 隔行平滑(=0)、
  temporal filter 0x41fe0(=1) 均未启用,f20 mode=1 直通
- 修复:render_bmp 改用 g_gray320 上色,BMP/窗口改 320x240,
  StretchBlt 加 HALFTONE,BMP 头支持 >255 尺寸
- 验证:同场景与官方 pair_000.rgb 直方图相关性 0.9796,颜色数 227=官方
2026-08-14 16:16:10 +08:00

68 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 会话状态与恢复点(2026-08-13
> 本文件是"心跳"锚点:每个里程碑更新一次。若会话中断,新会话先读本文件 +
> `analysis/reverse_20260813_full.md`,然后运行 `tools/resume_rev.ps1` 继续。
## 当前阶段
**阶段 6/6:全部完成(2026-08-14**
## 已完成的里程碑
- [x] 工具链:Ghidra 12.1.2headless+ 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 表错位)
- [x] **颗粒感修复**:demo3 显示层改为官方同款 320×240(2x 平滑灰度 +
调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926
- [ ] push(等服务器上线,用户手动)
## 颗粒感问题(已解决,2026-08-14)
- 现象:官方画面比 demo3 清晰,demo3 颗粒感重。
- 根因:demo3 v5 的显示层渲染的是 160×120 原始灰度(最近邻放大到 640×480),
而官方输出是 2x 升采样后的 320×240(2-tap 平滑本身抑噪),官方 app 显示
的也是这个 2x 缓冲。
- 排查过程(已排除的嫌疑):FUN_1800175a0(0x230)是帧差偏移调整非平滑;
0x41fe8 后处理(FUN_1800184f0/660 隔行平滑)官方会话 =0 未启用;
temporal filter 0x41fe0=1 未启用;f20 mode=1 直通。
- 修复:render_bmp 改用 g_gray320(官方 2x 缓冲)上色,BMP/窗口改 320×240
StretchBlt 加 HALFTONE。
- 验证:320×240 BMP 与官方同场景 pair_000.rgb 直方图相关性 0.9796
颜色数 227 = 官方 227(之前 160×120 版只有 ~161 色)。
## 常用命令
```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. 按"零像素问题现场"继续