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

3.8 KiB
Raw Blame History

MAG160C 会话状态与恢复点(2026-08-13)

本文件是"心跳"锚点:每个里程碑更新一次。若会话中断,新会话先读本文件 + analysis/reverse_20260813_full.md,然后运行 tools/resume_rev.ps1 继续。

当前阶段

阶段 6/6:全部完成(2026-08-14

已完成的里程碑

  • 工具链:Ghidra 12.1.2headless+ IDA Free 8.4 部署,5 个二进制全量导出
  • 官方管线完整反编译(DDT 加载 / 端点选择 / Q12 插值 / ref=4×type1 帧均值 / NUC / 盲元 / 窗口 / LUT1024 / 2x 升采样 / FFC 状态机)
  • DDT 文件解析(%TEMP%\Core160043865 → build-artifacts/mag160c_official.ddt
  • 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
  • 鬼影根因文档:analysis/reverse_20260813_full.md §7
  • demo3 v5 官方复刻实现并实机运行
  • 零像素根因定位与修复(load_ddt 表错位)
  • 颗粒感修复:demo3 显示层改为官方同款 320×240(2x 平滑灰度 + 调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796
  • 仓库整理 + 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 色)。

常用命令

# 编译 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. 按"零像素问题现场"继续