From patchwork Fri Jul 29 14:50:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 16868 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 C89CEBE173 for ; Fri, 29 Jul 2022 14:51:27 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 05B7E603EC; Fri, 29 Jul 2022 16:51:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1659106287; bh=BPZEkkHv84ifSq76XhHxJTdiOXsmi22+aUgR1F+vj/k=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=n17N1pTWtdgHCQQBezjdnn2W8FuwkCs/qfBjwNZDgfIyuq7Bl2QaHpH2EcgHWOhL4 gW5t8mybSfsaoqdfpZPryBEG0uHeRDQTCgRe/7wQDlaSoabeAfU2Hfgy7YkjfuuA27 VNbRzuZyTw4lqtsoRBsQz8sBlY5LcUPA8xYBUwPodIZDLM8uCo6Q1Clp4db0aAgLxd iUVCqKpnRWSAakTDz0HrjZ/+EqccVYFL5EkGFin3Iiz88lcViHHE2WLflU9ohLVTAu P4Og86D4KNgVzu5TkpCVZGpSSVZa7yMYiH3Kt3DIeZhS2QcFDonhgryQmfCSOn05ke ok99QIkT/C+8w== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EEC24603EC for ; Fri, 29 Jul 2022 16:51:24 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="hJ6y8qlB"; dkim-atps=neutral Received: from perceval.ideasonboard.com (unknown [IPv6:2401:4900:1f3e:f7a:bc8f:12ed:b45f:c35d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E213A6D4; Fri, 29 Jul 2022 16:51:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1659106284; bh=BPZEkkHv84ifSq76XhHxJTdiOXsmi22+aUgR1F+vj/k=; h=From:To:Cc:Subject:Date:From; b=hJ6y8qlBGFBTuhpoCJNfm60/yVWg6SbGYjy690/WCRSIHCojKTsnHB7TDG5/3oaoN 72WWJeAO5/dTMEbtxjYNA9K11cN1yc+bRiR94NUMtzWWhhtc1svr2QK7fIqfITwIMM Dl8BbceIOvGIwfdnhc+iFQQtFewlcbfzYUPVOTWI= To: libcamera-devel@lists.libcamera.org Date: Fri, 29 Jul 2022 20:20:42 +0530 Message-Id: <20220729145042.531757-1-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] libcamera: v4l2: Pass set colorspace flags 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: , X-Patchwork-Original-From: Umang Jain via libcamera-devel From: Umang Jain Reply-To: Umang Jain Cc: rishikeshdonadkar@gmail.com Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The colorspace fields as read-only from an application point of view, both on video devices and on subdevs, unless the V4L2_PIX_FMT_FLAG_SET_CSC or V4L2_MBUS_FRAMEFMT_SET_CSC flags (respectively) are set when calling the S_FMT ioctl. Signed-off-by: Umang Jain --- src/libcamera/v4l2_subdevice.cpp | 3 ++- src/libcamera/v4l2_videodevice.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp index 98a3911a..815c676e 100644 --- a/src/libcamera/v4l2_subdevice.cpp +++ b/src/libcamera/v4l2_subdevice.cpp @@ -459,7 +459,8 @@ int V4L2Subdevice::setFormat(unsigned int pad, V4L2SubdeviceFormat *format, subdevFmt.format.height = format->size.height; subdevFmt.format.code = format->mbus_code; subdevFmt.format.field = V4L2_FIELD_NONE; - fromColorSpace(format->colorSpace, subdevFmt.format); + if (fromColorSpace(format->colorSpace, subdevFmt.format) == 0) + subdevFmt.format.flags |= V4L2_MBUS_FRAMEFMT_SET_CSC; int ret = ioctl(VIDIOC_SUBDEV_S_FMT, &subdevFmt); if (ret) { diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp index 63911339..a969f7fa 100644 --- a/src/libcamera/v4l2_videodevice.cpp +++ b/src/libcamera/v4l2_videodevice.cpp @@ -940,7 +940,8 @@ int V4L2VideoDevice::trySetFormatMultiplane(V4L2DeviceFormat *format, bool set) pix->pixelformat = format->fourcc; pix->num_planes = format->planesCount; pix->field = V4L2_FIELD_NONE; - fromColorSpace(format->colorSpace, *pix); + if (fromColorSpace(format->colorSpace, *pix) == 0) + pix->flags |= V4L2_PIX_FMT_FLAG_SET_CSC; ASSERT(pix->num_planes <= std::size(pix->plane_fmt)); @@ -1010,7 +1011,8 @@ int V4L2VideoDevice::trySetFormatSingleplane(V4L2DeviceFormat *format, bool set) pix->pixelformat = format->fourcc; pix->bytesperline = format->planes[0].bpl; pix->field = V4L2_FIELD_NONE; - fromColorSpace(format->colorSpace, *pix); + if (fromColorSpace(format->colorSpace, *pix) == 0) + pix->flags |= V4L2_PIX_FMT_FLAG_SET_CSC; ret = ioctl(set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT, &v4l2Format); if (ret) {