diff --git a/docs/android_app/rendering_diff_phone_20261006.md b/docs/android_app/rendering_diff_phone_20261006.md index c7b5abe..282c7ce 100644 --- a/docs/android_app/rendering_diff_phone_20261006.md +++ b/docs/android_app/rendering_diff_phone_20261006.md @@ -102,3 +102,50 @@ CFunctions::CalContrastOffsetedAutoEnlargeRange(): ① LUT 的**平滑/CDF/pivot 细节**(Android 版 `HistDeRedundance` 的后续段尚未逐行核对), 或 ② 官方 App 通过 `setEX`/`ExtPara` 设置的**亮度偏移**(`intBrightOffset`)等参数。 这两处是下一轮的直接目标(继续用同一套"三 SDK 交叉 + 真机截图定量"的方法)。 + +## 7. 渲染差异的真正落点:**调色板(铁虹表)不同** + +### 7.1 先排除的两项(都有反编译证据) + +- **窗口**:Android `GrayEnlarge` + `CalContrastOffsetedAutoEnlargeRange` 与我们 + `statsWindow` 在对比度 c=0 时**逐字节一致**;官方 App 只调用 + `setAutoEnlarge(BasePara2.enlargeRange=8)`,没有对比度/亮度参数。 +- **灰度 LUT/CDF**:Android `HistDeRedundance` 的直方图与双向 CDF 段与我们 `lutRebuild` + **逐行一致**(`0xFFC00000/span`、`>>20 & 0xffc`、`total>>12`、`iVar3=0x10000/step`、 + 前后向各一张表、`+0x100/+0x200` 步进)——这段不是差异来源。 + +### 7.2 官方默认调色板 = 索引 2(和我们一样),但**表不同** + +- 官方 App:`ImageViewer.java:383` / `DeviceController.java:91` → + `setColorPalette(SharedPreferencesManager.getInt("paletteIndex", 2))` → 默认 **2(铁虹)**。 +- 判定方法:**"亮度 → 颜色"曲线在同一调色板下唯一**(与灰度分布/亮度水平无关), + 用它做检验(把像素代入调色板表,取同亮度最近项的色差): + - 对照(我们自己的像素 → 我们的表):中位色差 **0.3**,83.6% 在 ±10 内; + - 官方像素 → 我们的表:中位色差 **20.3**,只有 36% 在 ±10 内;最接近的调色板也不是 2 号; + - 分亮度段看:亮度 32–96 时官方是**橙色**(R−B≈+90,R≈97–102/G≈44–77/B≈6), + 我们同一亮度是**紫/蓝**(R−B≈−33…+20)。 +- 原因(已定位到二进制):**我们索引 2 用的是 PC SDK 的表** + (`OfficialTables.PALETTE256_ARGB`,来自 CoreSDKLib dev+0xb18),而官方**手机** App 用的是 + **Android SDK 运行时生成**的表 —— `CFunctions::SetColorPalette` case 2(libcxsdk @0x26c70)。 + 上一轮把 case 0/1/3…10 的生成式移植成了 `VendorPalettes`,**case 2(铁虹)当时是拿 PC 表 + 做"锚点校验"、没有移植生成式** → 两表在中间段不同,颜色/亮度观感因此不同。 +- "对比度更高"和"条纹更少"都由此解释:不同色带的亮度斜率不同(观感对比度不同), + 且官方色调更亮(暗端被抬起)→ 噪声与 FPN 在暗端不再显眼。 + +### 7.3 条纹本身的实测(数据层无差异) + +| 指标 | 官方 | 我们 | +|---|---|---| +| NUC 帧 column-profile HF(PC 抓帧对照) | 7.81(0.63% of spread) | 7.20(0.63%) | +| 渲染图平坦块列抖动(同刻截图,16×16 块) | 0.81–1.44 | 0.34–0.94 | +| 渲染图 HF 能量 mean\|dx\|/mean\|dy\| | 2.80 / 3.67 | 2.71 / 3.47 | + +→ 数据与降噪层面我们不差于官方;"条纹更明显"是**色调/亮度**的感知效应 +(官方实时画面 HF 更低 1.27 vs 2.92,也可能有 SDK 时域平滑参与)。 + +### 7.4 下一步 + +1. 移植 `SetColorPalette` **case 2** 的生成式(4 段线性,常量 0x75/0xbc/0x25/0xff/0x27/0x3b/0x1c3… 已在反编译中), + 替换 App 索引 2 的表;然后**同一分钟**内截两 App 实时图做"亮度→颜色"曲线回归(目标:中位色差降到控制组水平)。 +2. 顺带核对其余 11 个索引是否也应改用 Android 生成式(本轮 `VendorPalettes` 已覆盖 10 个)。 +3. 之后再按用户要求把验证过的改动同步进 `csdk`。