修复 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=官方
This commit is contained in:
ZXCLI
2026-08-14 16:16:10 +08:00
parent 0bfb926892
commit 03ed936a5f
4 changed files with 50 additions and 38 deletions
+18 -15
View File
@@ -5,7 +5,7 @@
## 当前阶段
**阶段 5/5:全部完成(2026-08-13 晚**
**阶段 6/6:全部完成(2026-08-14**
## 已完成的里程碑
@@ -16,22 +16,25 @@
- [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(跨会话)
- [ ] 提交(用户未要求,等待指示)
- [x] 零像素根因定位与修复load_ddt 表错位)
- [x] **颗粒感修复**:demo3 显示层改为官方同款 320×240(2x 平滑灰度 +
调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926
- [ ] push(等服务器上线,用户手动)
## 零像素问题(已解决,记录在案
## 颗粒感问题(已解决,2026-08-14
- 现象: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 按端点块顺序读完后再统一读 blindcsdk/tools/mag160c_demo3.c
load_ddt
- 验证:修复后全帧 0 个零像素;(65,25) nuc=9814、盲元目标 9740/9732
gain0=4000 正常值;窗口/统计正常([8493,10554] m9409 s258
- 现象:官方画面比 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 色)。
## 常用命令