From 5d813ed3dfee598a2fec01d9d1353b0abee6ae5e Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 19 Apr 2026 22:17:06 -0500 Subject: [PATCH] Fix clamping of signed range properties --- app/streaming/video/ffmpeg-renderers/drm.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/drm.h b/app/streaming/video/ffmpeg-renderers/drm.h index 1a09b23f..dcc3a752 100644 --- a/app/streaming/video/ffmpeg-renderers/drm.h +++ b/app/streaming/video/ffmpeg-renderers/drm.h @@ -87,8 +87,7 @@ class DrmRenderer : public IFFmpegRenderer { } std::optional> range() const { - if ((m_Prop->flags & (DRM_MODE_PROP_RANGE | DRM_MODE_PROP_SIGNED_RANGE)) && - m_Prop->count_values == 2) { + if ((m_Prop->flags & DRM_MODE_PROP_RANGE) && m_Prop->count_values == 2) { return std::make_pair(m_Prop->values[0], m_Prop->values[1]); } else { @@ -96,8 +95,20 @@ class DrmRenderer : public IFFmpegRenderer { } } + std::optional> srange() const { + if ((m_Prop->flags & DRM_MODE_PROP_SIGNED_RANGE) && m_Prop->count_values == 2) { + return std::make_pair((int64_t)m_Prop->values[0], (int64_t)m_Prop->values[1]); + } + else { + return std::nullopt; + } + } + uint64_t clamp(uint64_t value) const { - if (auto range = this->range()) { + if (auto srange = this->srange()) { + return (uint64_t)std::clamp((int64_t)value, srange->first, srange->second); + } + else if (auto range = this->range()) { return std::clamp(value, range->first, range->second); } else {