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