From patchwork Mon Nov 3 22:13:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 24960 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 7C5BEC3241 for ; Mon, 3 Nov 2025 22:12:48 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AC6C0606A0; Mon, 3 Nov 2025 23:12:46 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="if3HJsXO"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 190E4609D8 for ; Mon, 3 Nov 2025 23:12:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Ct9HLZzOySYQhpCkPdVzjY6l4gc7S3homy94gzVMy2U=; b=if3HJsXODcm8gz4/ANGcMOLvjd p62NsdPsBGVlWS+nomvWRK6aME+9Aba/docrUHA7fazCfNpoQCqLotnv4n9VdIqvYa7k2VKav3Zb3 6opasGRqFzHzyJv3ZjXjQ/qRyIuGk3S6whOMUJtBr245x7AvXmFiU9xXXEGAsaY8As5uB9GpSlwu2 9SzCddVnRaQ6LJHp3RBLFY+PDGhyUIc38SiXGJXXEy4ykNvu1p/oJY/VeATU2A+aGgTZfV00DYnwI bbhFLkRfOGhv/mSRgyoqcN5XSATKbVMSl+NhQy4QWaL9nfTJdfTOYqIPbWERPh2/bhogH1ZFsUbX2 cFeUJ7rw==; Received: from [81.140.124.245] (helo=uajain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1vG2n4-0014tl-W7; Mon, 03 Nov 2025 23:12:43 +0100 From: Umang Jain To: libcamera-devel@lists.libcamera.org Cc: Umang Jain , Kieran Bingham , Robert Mader Subject: [PATCH v5 1/2] pipeline: virtual: Provide and validate colorspace Date: Mon, 3 Nov 2025 22:13:14 +0000 Message-ID: <20251103221315.73350-2-uajain@igalia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103221315.73350-1-uajain@igalia.com> References: <20251103221315.73350-1-uajain@igalia.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 --- 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 23eae852..34def19b 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); }