fix(hdr): re-anchor SDR white before HDR encoding - #1008
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (6)
📒 Files selected for processing (5)
Included review availability: Your plan provides up to 8 included reviews per hour; 7 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (1)
🧰 Additional context used📓 Path-based instructions (2)平台抽象层代码(Windows/Linux/macOS)。确保各平台实现一致, 注意 Windows API 调用的错误处理和资源释放。⚙️ CodeRabbit configuration file Files:
Sunshine 核心 C++ 源码,自托管游戏串流服务器。审查要点:内存安全、 线程安全、RAII 资源管理、安全漏洞。注意预处理宏控制的平台相关代码。⚙️ CodeRabbit configuration file Files:
🔇 Additional comments (2)
Summary by CodeRabbit
Walkthrough本次变更新增 Windows SDR 白电平查询和缓存。捕获白点优先使用生产者元数据。HDR 预编码流程现在同时支持 PQ 和 HLG。客户端 SDR 白点更新适用于所有加密 HDR 动态范围。 ChangesHDR 白电平处理
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: ⚪ Minimal · up to The PR re-anchors HDR encoding to the client SDR white point while keeping updates authenticated and isolated to the active session. No actionable merge-blocking risk remains after normal checks and review. Sequence Diagram(s)sequenceDiagram
participant 加密HDR会话
participant stream.cpp
participant display_vram_t
participant display_base_t
participant QueryDisplayConfig
加密HDR会话->>stream.cpp: 更新 CLIENT_SDR_WHITE_NITS
stream.cpp->>display_vram_t: 设置客户端 SDR 白点
display_vram_t->>display_vram_t: 读取生产者 SDR 白点
display_vram_t->>display_base_t: 查询显示器 SDR 白点
display_base_t->>QueryDisplayConfig: 查询活动显示路径
QueryDisplayConfig-->>display_base_t: 返回 SDR 白电平
display_base_t-->>display_vram_t: 返回缓存值
display_vram_t->>display_vram_t: 更新 HDR 预编码参数
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
改了啥呀
为啥要改
PQ 是绝对亮度编码,主机 scRGB 桌面的 SDR band 却锚定在主机自己的 Windows SDR 白点。客户端白点没参与换算时,普通桌面内容会被送进错误的绝对亮度,怎么调 PQ 参数都只是在错误基准上继续调,结果就是那种白茫茫的杂鱼画面啦。
这次在进入 PQ/HLG OETF 前完成重锚,同时让动态元数据分析看到同一份变换后的像素。旧客户端没有上报白点时保持原行为;SDR 会话和其他客户端路径不受影响。
配套 Moonlight 客户端修复:qiin2333/moonlight-qt#203
验证
cmake --preset dev-win -DBUILD_TESTS=ON -DBUILD_WEB_UI=OFF -DFETCH_GUI=OFF -DSUNSHINE_ENABLE_TRAY=OFF -DCMAKE_BUILD_TYPE=Releaseninja -C build -j 6 sunshine tests/test_sunshine.exegit diff --check origin/master...HEAD