From 5d2d005306ad1b64c7ad857c48a2edf8e56629f5 Mon Sep 17 00:00:00 2001 From: Umang Jain Date: Mon, 3 Nov 2025 22:13:14 +0000 Subject: [PATCH] pipeline: virtual: Provide and validate colorspace Virtual pipeline handler should provide colorSpace in generateConfiguration() and validate the colorspace in validate(). It is mandatory for a pipeline handler to set the colorspace if it is unset in the stream configuration, during validate(). For choosing the colorspace for the generated NV12 frames, following points have been taken into account: - The transfer function should be Rec.709 for NV12 - The YCbCr encoding has been chosen Rec.709 as it is the most common than Rec.601/Rec.2020 - Range should be 'Limited' as with the NV12 pixel format. Hence, the closest colorspace match is ColorSpace::Rec709 which is set for the virtual pipeline handler. Signed-off-by: Umang Jain Reviewed-by: Kieran Bingham Tested-by: Robert Mader Signed-off-by: Kieran Bingham --- src/libcamera/pipeline/virtual/virtual.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp index 09e0afc9..7855e8b9 100644 --- a/src/libcamera/pipeline/virtual/virtual.cpp +++ b/src/libcamera/pipeline/virtual/virtual.cpp @@ -214,6 +214,17 @@ CameraConfiguration::Status VirtualCameraConfiguration::validate() adjusted = true; } + if (cfg.colorSpace != ColorSpace::Rec709) { + cfg.colorSpace = ColorSpace::Rec709; + status = Adjusted; + adjusted = true; + } + + if (validateColorSpaces() == Adjusted) { + status = Adjusted; + adjusted = true; + } + if (adjusted) LOG(Virtual, Info) << "Stream configuration adjusted to " << cfg.toString(); @@ -278,6 +289,7 @@ PipelineHandlerVirtual::generateConfiguration(Camera *camera, cfg.pixelFormat = pixelFormat; cfg.size = data->config_.maxResolutionSize; cfg.bufferCount = VirtualCameraConfiguration::kBufferCount; + cfg.colorSpace = ColorSpace::Rec709; config->addConfiguration(cfg); }