From 3f26217df7ea00b78a012950e0e768c5df6ed69f Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 5 Aug 2026 23:48:51 -0500 Subject: [PATCH] Select color range based on plane COLOR_RANGE property values --- app/streaming/video/ffmpeg-renderers/drm.cpp | 16 ++++++++++++++++ app/streaming/video/ffmpeg-renderers/drm.h | 1 + 2 files changed, 17 insertions(+) diff --git a/app/streaming/video/ffmpeg-renderers/drm.cpp b/app/streaming/video/ffmpeg-renderers/drm.cpp index 4a7bb0e5..788fb30a 100644 --- a/app/streaming/video/ffmpeg-renderers/drm.cpp +++ b/app/streaming/video/ffmpeg-renderers/drm.cpp @@ -2019,6 +2019,22 @@ int DrmRenderer::getDecoderColorspace() return COLORSPACE_REC_601; } +int DrmRenderer::getDecoderColorRange() +{ + if (auto prop = m_VideoPlane.property("COLOR_RANGE")) { + // Prefer full range if the video plane supports it + if (prop->containsValue("YCbCr full range")) { + return COLOR_RANGE_FULL; + } + else if (prop->containsValue("YCbCr limited range")) { + return COLOR_RANGE_LIMITED; + } + } + + // Default to limited if we couldn't find a valid COLOR_RANGE property + return COLOR_RANGE_LIMITED; +} + const char* DrmRenderer::getDrmColorEncodingValue(AVFrame* frame) { switch (getFrameColorspace(frame)) { diff --git a/app/streaming/video/ffmpeg-renderers/drm.h b/app/streaming/video/ffmpeg-renderers/drm.h index f1a1ba35..0c82ccdc 100644 --- a/app/streaming/video/ffmpeg-renderers/drm.h +++ b/app/streaming/video/ffmpeg-renderers/drm.h @@ -770,6 +770,7 @@ public: virtual bool testRenderFrame(AVFrame* frame) override; virtual bool isDirectRenderingSupported() override; virtual int getDecoderColorspace() override; + virtual int getDecoderColorRange() override; virtual void setHdrMode(bool enabled) override; virtual void notifyOverlayUpdated(Overlay::OverlayType type) override; #ifdef HAVE_EGL