From patchwork Thu Jan 11 16:07:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Gaignard X-Patchwork-Id: 13517569 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 12451C47077 for ; Thu, 11 Jan 2024 16:07:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=92Hsbs4STzr7MgpHaIK97eRP/4DVOor3csyaVXtSOJk=; b=SBCaN8bNwALMdt LYTTgKaMEj5CD0bhLw+Vgz23FkCwYUmOKdOsROXl4AO89s1uwd2PIrzatrTrM+vrmwA17gqbQ+eTw 3czT7ZhhJH9CElSAyQIIDQXNHXstMo30Wlwv4kJ1EPc4vx9gre69FkvTLNGFwzDsiQMoN6B3AMbyI NGitldlnloH6r5d3blZLNgqeBzap2xsLSLHOV7Fi6G1+oQCefO0vDx9NbuzDI/MOvEyIR+LG4cDbz uejXrWNn4b8W0p/iuBhZU8bybNiX/RPCf/U+6lAZP89NVtR3LTqyrHkBQBmdB8chHZ01pVsHb4lWW UnSSo5kHLsWGQXcR9TfA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rNxag-000XNG-2P; Thu, 11 Jan 2024 16:07:34 +0000 Received: from madrid.collaboradmins.com ([46.235.227.194]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rNxad-000XKr-16 for linux-rockchip@lists.infradead.org; Thu, 11 Jan 2024 16:07:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1704989248; bh=4Ntkv53/ay1b9IY+9lgJ2+STZE4g9vhrLr7e58YkCSw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Pfzq54u1c66toyzrg6Ae0/4xekI4QbiTFLBxcwK1U1zUVQyLlF0N4LA2MfFZ9qevQ c5YbXpgf1HHmoWDMXAe/5TYTmga088smayHf5geKOHJgliMJK9bcVaAdFViPQegpqE VtqNygrjEhu8QHVvOruLKp1XcF4LCBb6lpFlaGREt8GabhIiNIzKFjXmBy1UvgUCrU 3tazA6pEhOl/2BSs92cX7oxBkOR+OEu50J4ve6OGcLrqylhNFSD0E5ZqoOJIxJ+FZo b2w89CdMxwkX/vjRJjDqpha7k89+GQGTW2wu3hs+uxaxtFQAlbp99xaR5SfwxcL6IW n7aTJbucp/SKg== Received: from benjamin-XPS-13-9310.. (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 944693782011; Thu, 11 Jan 2024 16:07:27 +0000 (UTC) From: Benjamin Gaignard To: mchehab@kernel.org, p.zabel@pengutronix.de, hverkuil-cisco@xs4all.nl, nicolas.dufresne@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, kernel@collabora.com, Benjamin Gaignard Subject: [RCF 1/2] media: videodev2: Add V4L2_FMT_FLAG_ALL_FORMATS flag Date: Thu, 11 Jan 2024 17:07:20 +0100 Message-Id: <20240111160721.50020-2-benjamin.gaignard@collabora.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240111160721.50020-1-benjamin.gaignard@collabora.com> References: <20240111160721.50020-1-benjamin.gaignard@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240111_080731_505546_3A22D41D X-CRM114-Status: GOOD ( 17.86 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org Add new flag to allow enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl. When this flag is set drivers must ignore the configuration and return the hardware supported pixel formats for the specified queue. This will permit to discover which pixels formats are supported without setting codec-specific information so userland can more easily knows if the driver suit well to what it needs. The main target are stateless decoders so update the documentation about how use this flag. Signed-off-by: Benjamin Gaignard --- .../userspace-api/media/v4l/dev-stateless-decoder.rst | 3 +++ Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst | 4 ++++ Documentation/userspace-api/media/videodev2.h.rst.exceptions | 1 + drivers/media/v4l2-core/v4l2-ioctl.c | 2 +- include/uapi/linux/videodev2.h | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst index 35ed05f2695e..b7b650f1a18f 100644 --- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst +++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst @@ -58,6 +58,9 @@ Querying capabilities default values for these controls being used, and a returned set of formats that may not be usable for the media the client is trying to decode. + * If ``V4L2_FMT_FLAG_ALL_FORMATS`` flag is set the driver must enumerate + all the supported formats without taking care of codec-dependent controls. + 3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported resolutions for a given format, passing desired pixel format in :c:type:`v4l2_frmsizeenum`'s ``pixel_format``. diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst index 000c154b0f98..db8bc8e29a91 100644 --- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst +++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst @@ -227,6 +227,10 @@ the ``mbus_code`` field is handled differently: The application can ask to configure the quantization of the capture device when calling the :ref:`VIDIOC_S_FMT ` ioctl with :ref:`V4L2_PIX_FMT_FLAG_SET_CSC ` set. + * - ``V4L2_FMT_FLAG_ALL_FORMATS`` + - 0x0200 + - Set by userland application to enumerate all possible pixels formats + without taking care of the current configuration. Return Value ============ diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions index 3e58aac4ef0b..42d9075b7fc2 100644 --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions @@ -215,6 +215,7 @@ replace define V4L2_FMT_FLAG_CSC_XFER_FUNC fmtdesc-flags replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags +replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags # V4L2 timecode types replace define V4L2_TC_TYPE_24FPS timecode-type diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 33076af4dfdb..22a93d074a5b 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1544,7 +1544,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops, p->mbus_code = 0; mbus_code = p->mbus_code; - memset_after(p, 0, type); + memset_after(p, 0, flags); p->mbus_code = mbus_code; switch (p->type) { diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 68e7ac178cc2..82d8c8a7fb7f 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -869,6 +869,7 @@ struct v4l2_fmtdesc { #define V4L2_FMT_FLAG_CSC_YCBCR_ENC 0x0080 #define V4L2_FMT_FLAG_CSC_HSV_ENC V4L2_FMT_FLAG_CSC_YCBCR_ENC #define V4L2_FMT_FLAG_CSC_QUANTIZATION 0x0100 +#define V4L2_FMT_FLAG_ALL_FORMATS 0x0200 /* Frame Size and frame rate enumeration */ /* From patchwork Thu Jan 11 16:07:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Gaignard X-Patchwork-Id: 13517570 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 48066C47258 for ; Thu, 11 Jan 2024 16:07:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=TUpdWx3RMZ3+ZMQHzci20XlNL+bZ5DfQcZfTOmBAtPs=; b=jg5zskRauVA9lG b6OSoMm4Sxkuf/30de/CdrL6vMXOX3DT1iBqqx3syro7PbZGq9LfYZWBzkP42gOVfpYQNx+iYWAhE lUm8NhgPVRlinwq166M5sPnrJnb2e8+9BtGYjhqzxTaAzOEehcoQtD3FRix+7PNogqUtQAYVoSNA4 LOLpzeLJH+D9Qhi4sh5khbjN5DzChZd/fac7rK2MyfR0qyNRcyN0N5lIe6WsEXtxQ58huCjNw8Y1B XiEHt4ZB1KL8U5NRFtjMrsYE+7kbXl2MLjaoijkre7LLNkl9jx1XyerhUbMpL2UEZSG8Z5kWflcyV BmRnfHyC36OTu8K1ypPg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rNxag-000XN8-1D; Thu, 11 Jan 2024 16:07:34 +0000 Received: from madrid.collaboradmins.com ([46.235.227.194]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rNxad-000XKv-16 for linux-rockchip@lists.infradead.org; Thu, 11 Jan 2024 16:07:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1704989248; bh=m+4+w8Nro/6qVnOqVGso2S9Ki0IT4qV76zZG6m3in1I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=3nva6pVd2F+MRO4cjPmb4mDixRdcTcUZkK6TH0Q34FxODVb7dMZX7PnRJ+gtwDpwP LgiKF1wk8KRCgshFnHM7c/AQ71/c5t52Wl+D6U0xcCoxZ0faFm2PdHEYFW9N/zbzSn bwFICd6pV0CAj6upCZm+IeNX6pdvZOhGBCMFt6zlaTqVh3b3fjtyIdSWBEVAa425Y4 csmBaVDNBwmdj3E2+7x03zbXwk4F616Se+C8i+MqjXW4Zn7lBGla7lCiXjyiRQeXH+ uVSuaIykM108lTLM+1IWVLSvdcizxjqZzra1VkH6LvvlbheUgiK5Ep5C4rDKDv8cEm sqAWQiw1Nq55w== Received: from benjamin-XPS-13-9310.. (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 457683782013; Thu, 11 Jan 2024 16:07:28 +0000 (UTC) From: Benjamin Gaignard To: mchehab@kernel.org, p.zabel@pengutronix.de, hverkuil-cisco@xs4all.nl, nicolas.dufresne@collabora.com Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, kernel@collabora.com, Benjamin Gaignard Subject: [RCF 2/2] media: verisilicon: Use V4L2_FMT_FLAG_ALL_FORMATS flag Date: Thu, 11 Jan 2024 17:07:21 +0100 Message-Id: <20240111160721.50020-3-benjamin.gaignard@collabora.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20240111160721.50020-1-benjamin.gaignard@collabora.com> References: <20240111160721.50020-1-benjamin.gaignard@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240111_080731_504346_FCDEB4DF X-CRM114-Status: GOOD ( 11.42 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org If V4L2_FMT_FLAG_ALL_FORMATS flag has been set when calling VIDIOC_ENUM_FMT ignore depth match and returns all the hardware supported pixels formats. Signed-off-by: Benjamin Gaignard --- drivers/media/platform/verisilicon/hantro_v4l2.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/verisilicon/hantro_v4l2.c b/drivers/media/platform/verisilicon/hantro_v4l2.c index 941fa23c211a..6d840911c764 100644 --- a/drivers/media/platform/verisilicon/hantro_v4l2.c +++ b/drivers/media/platform/verisilicon/hantro_v4l2.c @@ -201,7 +201,13 @@ static int vidioc_enum_fmt(struct file *file, void *priv, struct hantro_ctx *ctx = fh_to_ctx(priv); const struct hantro_fmt *fmt, *formats; unsigned int num_fmts, i, j = 0; - bool skip_mode_none; + bool skip_mode_none, ignore_depth_match; + + /* + * If V4L2_FMT_FLAG_ALL_FORMATS flag is set, we want to enumerate all + * hardware supported pixels formats + */ + ignore_depth_match = !!(f->flags & V4L2_FMT_FLAG_ALL_FORMATS); /* * When dealing with an encoder: @@ -222,7 +228,7 @@ static int vidioc_enum_fmt(struct file *file, void *priv, if (skip_mode_none == mode_none) continue; - if (!hantro_check_depth_match(fmt, ctx->bit_depth)) + if (!hantro_check_depth_match(fmt, ctx->bit_depth) && !ignore_depth_match) continue; if (j == f->index) { f->pixelformat = fmt->fourcc; @@ -242,7 +248,7 @@ static int vidioc_enum_fmt(struct file *file, void *priv, for (i = 0; i < num_fmts; i++) { fmt = &formats[i]; - if (!hantro_check_depth_match(fmt, ctx->bit_depth)) + if (!hantro_check_depth_match(fmt, ctx->bit_depth) && !ignore_depth_match) continue; if (j == f->index) { f->pixelformat = fmt->fourcc;