demo3 补官方启动强制 FFC(帧 75),FFC 频率与官方完全对齐

- 官方 0x180009ee0 状态机:mode 0/3/5/6 在帧 75 无条件 FFC(0);
  mode 1/2/4 在帧 117 强制(最多 5 次)。demo3 此前只实现周期 1800 +
  快门漂移 250 两个条件
- trace 实测:官方启动升温阶段 FFC(0) 间隔 59~394 帧(4~26s 咔哒声密集),
  热稳定后 1800 帧(120s);demo3 已一致
- 验证:idx=75 强制 FFC 触发(demo3_ffc.txt forced75)
This commit is contained in:
ZXCLI
2026-08-14 16:23:37 +08:00
parent 03ed936a5f
commit 004f28910f
3 changed files with 19 additions and 5 deletions
+4 -1
View File
@@ -19,7 +19,10 @@
- [x] 零像素根因定位与修复(load_ddt 表错位) - [x] 零像素根因定位与修复(load_ddt 表错位)
- [x] **颗粒感修复**:demo3 显示层改为官方同款 320×240(2x 平滑灰度 + - [x] **颗粒感修复**:demo3 显示层改为官方同款 320×240(2x 平滑灰度 +
调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796 调色板 + HALFTONE 放大),同场景 RGB 直方图相关性 0.9796
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926 - [x] **FFC 频率对齐**:补官方"启动强制 FFC"逻辑(mode 0 帧 75 无条件
FFC(0)trace 实测启动阶段 FFC(0) 间隔 59~394 帧 ≈ 4~26s
稳定后 1800 帧 ≈ 120sdemo3 已一致)
- [x] 仓库整理 + csdk/README.md 完整文档 + 本地 commit 0bfb926 / 03ed936
- [ ] push(等服务器上线,用户手动) - [ ] push(等服务器上线,用户手动)
## 颗粒感问题(已解决,2026-08-14) ## 颗粒感问题(已解决,2026-08-14)
Binary file not shown.
+13 -2
View File
@@ -132,6 +132,7 @@ static int g_ref_cnt;
static int g_f20[NPIX]; static int g_f20[NPIX];
static int g_fcount; static int g_fcount;
static int g_manual_ffc; static int g_manual_ffc;
static int g_startup_ffc_done;
/* ---- render state ---- */ /* ---- render state ---- */
static unsigned short g_nuc[NPIX]; static unsigned short g_nuc[NPIX];
@@ -927,12 +928,21 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmd, int show) {
if (idx <= OFF_N0 + OFF_N2 + OFF_N1) { if (idx <= OFF_N0 + OFF_N2 + OFF_N1) {
continue; continue;
} }
/* normal frame: FFC condition */ /* normal frame: FFC condition (FUN_180009ee0) */
{ {
int drift = g_shutter - g_shutter_at_ffc; int drift = g_shutter - g_shutter_at_ffc;
if (drift < 0) drift = -drift; if (drift < 0) drift = -drift;
int cool = OFF_N0 + OFF_N2 + OFF_N1; int cool = OFF_N0 + OFF_N2 + OFF_N1;
int do_ffc = 0; int do_ffc = 0;
/* startup forced FFCs (official): mode 0/3/5/6 forces FFC(0)
* at frame 75 once; mode 1/2/4 forces at frame 117 up to 5
* times. We do not know the live 0x2d47 mode on Windows, so
* follow the mode-0 rule (matches the observed trace cadence:
* an extra FFC shortly after startup). */
if (!g_startup_ffc_done && idx == 75) {
g_startup_ffc_done = 1;
do_ffc = 1;
}
if (idx >= OFF_N0 + OFF_FFC_PERIOD) if (idx >= OFF_N0 + OFF_FFC_PERIOD)
do_ffc = 1; do_ffc = 1;
else if (idx >= cool + 30 && drift > OFF_FFC_DRIFT) else if (idx >= cool + 30 && drift > OFF_FFC_DRIFT)
@@ -941,7 +951,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmd, int show) {
sendcmd(0x6bb6b672, 0, 8); sendcmd(0x6bb6b672, 0, 8);
g_ffc_idx = 0; g_ffc_idx = 0;
g_shutter_at_ffc = shutter; g_shutter_at_ffc = shutter;
if (ffcdbg) { fprintf(ffcdbg, "frame=%u AUTO FFC(0) idx=%d drift=%d\n", g_global_frames, idx, drift); fflush(ffcdbg); } if (ffcdbg) { fprintf(ffcdbg, "frame=%u AUTO FFC(0) idx=%d drift=%d%s\n", g_global_frames, idx, drift,
g_startup_ffc_done && idx == 75 ? " (forced75)" : ""); fflush(ffcdbg); }
continue; continue;
} }
} }