public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Cc: hverkuil@xs4all.nl, laurent.pinchart@ideasonboard.com,
	Prabhakar <prabhakar.csengg@gmail.com>,
	"Kate Hsuan" <hpa@redhat.com>,
	"Alexander Shiyan" <eagle.alexander923@gmail.com>,
	"Mikhail Rudenko" <mike.rudenko@gmail.com>,
	"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
	"Tommaso Merciai" <tomm.merciai@gmail.com>,
	"Umang Jain" <umang.jain@ideasonboard.com>,
	"Benjamin Mugnier" <benjamin.mugnier@foss.st.com>,
	"Sylvain Petinot" <sylvain.petinot@foss.st.com>,
	"Christophe JAILLET" <christophe.jaillet@wanadoo.fr>,
	"Julien Massot" <julien.massot@collabora.com>,
	"Naushir Patuck" <naush@raspberrypi.com>,
	"Yan, Dongcheng" <dongcheng.yan@intel.com>,
	"Cao, Bingbu" <bingbu.cao@intel.com>,
	"Qiu, Tian Shu" <tian.shu.qiu@intel.com>,
	"Wang, Hongju" <hongju.wang@intel.com>,
	"Stefan Klug" <stefan.klug@ideasonboard.com>,
	"Mirela Rabulea" <mirela.rabulea@nxp.com>,
	"André Apitzsch" <git@apitzsch.eu>,
	"Heimir Thor Sverrisson" <heimir.sverrisson@gmail.com>,
	"Kieran Bingham" <kieran.bingham@ideasonboard.com>,
	"Stanislaw Gruszka" <stanislaw.gruszka@linux.intel.com>,
	"Mehdi Djait" <mehdi.djait@linux.intel.com>,
	"Ricardo Ribalda Delgado" <ribalda@kernel.org>,
	"Hans de Goede" <hdegoede@redhat.com>
Subject: [RFC v5 14/15] media: uapi: Add controls for sub-sampling configuration
Date: Mon,  3 Feb 2025 10:58:52 +0200	[thread overview]
Message-ID: <20250203085853.1361401-15-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20250203085853.1361401-1-sakari.ailus@linux.intel.com>

Sub-sampling is a way to decrease the data rates after the pixel array by
systematically discarding some samples, either vertically or horizontally
or both. Add two controls for the purpose and document them. The
sub-sampling configuration is taken into account in the compose rectangle.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
 .../userspace-api/media/drivers/camera-sensor.rst  | 14 ++++++++++++--
 .../userspace-api/media/v4l/ext-ctrls-camera.rst   | 11 +++++++++++
 drivers/media/v4l2-core/v4l2-ctrls-defs.c          |  2 ++
 include/uapi/linux/v4l2-controls.h                 |  2 ++
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/Documentation/userspace-api/media/drivers/camera-sensor.rst b/Documentation/userspace-api/media/drivers/camera-sensor.rst
index 59431ab0b923..9e74eb02e02a 100644
--- a/Documentation/userspace-api/media/drivers/camera-sensor.rst
+++ b/Documentation/userspace-api/media/drivers/camera-sensor.rst
@@ -120,8 +120,8 @@ values programmed by the register sequences. The default values of these
 controls shall be 0 (disabled). Especially these controls shall not be inverted,
 independently of the sensor's mounting rotation.
 
-Binning
--------
+Binning and sub-sampling
+------------------------
 
 Binning has traditionally been configured using :ref:`the compose selection
 rectangle <v4l2-selection-targets-table>`. The :ref:`V4L2_CID_BINNING
@@ -130,6 +130,16 @@ users should use it when it's available. Drivers supporting the control shall
 also support the compose rectangle, albeit the rectangle may be read-only when
 the control is present.
 
+Sub-sampling is often supported as part of a camera sensor's binning
+functionality and performed after the binning operation. Sub-sampling typically
+produces quality-wise worse results than binning. Sub-sampling factors are
+independent horizontally and vertically and they are controlled using two
+controls, :ref:`V4L2_CID_SUBSAMPLING_HORIZONTAL and
+V4L2_CID_SUBSAMPLING_VERTICAL <v4l2-cid-camera-sensor-subsampling>`. In
+sub-sampling, the image size before sub-sampling is horizontally and vertically
+divided by the respective sub-sampling factors. Drivers supporting the control shall
+also reflect the sub-sampling configuration in the compose rectangle.
+
 .. _media_using_camera_sensor_drivers_embedded_data:
 
 Embedded data
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
index 18b484ff5d75..577b73045bee 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
@@ -701,3 +701,14 @@ enum v4l2_scene_mode -
 
 For instance, a value of ``0x0001000300020003`` indicates binning by 3
 (horizontally) * 3/2 (vertically).
+
+.. _v4l2-cid-camera-sensor-subsampling:
+
+``V4L2_CID_SUBSAMPLING_HORIZONTAL`` and ``V4L2_CID_SUBSAMPLING_VERTICAL``
+(integer)
+
+    Horizontal and vertical subsampling factors.
+
+    Sub-sampling is used to downscale an image, horizontally and vertically, by
+    discarding a part of the image data. Typically sub-sampling produces lower
+    quality images than binning.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 6be3d4a37127..5f4a8cc9f53b 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1088,6 +1088,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_CAMERA_SENSOR_ROTATION:	return "Camera Sensor Rotation";
 	case V4L2_CID_HDR_SENSOR_MODE:		return "HDR Sensor Mode";
 	case V4L2_CID_BINNING_FACTORS:		return "Binning Factors";
+	case V4L2_CID_SUBSAMPLING_HORIZONTAL:	return "Sub-Sampling Factor, Horizontal";
+	case V4L2_CID_SUBSAMPLING_VERTICAL:	return "Sub-Sampling Factor, Vertical";
 
 	/* FM Radio Modulator controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index ac0e38e98a38..4eade177d40f 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1089,6 +1089,8 @@ enum v4l2_auto_focus_range {
 
 #define V4L2_CID_HDR_SENSOR_MODE		(V4L2_CID_CAMERA_CLASS_BASE+36)
 #define V4L2_CID_BINNING_FACTORS		(V4L2_CID_CAMERA_CLASS_BASE+37)
+#define V4L2_CID_SUBSAMPLING_HORIZONTAL		(V4L2_CID_CAMERA_CLASS_BASE+38)
+#define V4L2_CID_SUBSAMPLING_VERTICAL		(V4L2_CID_CAMERA_CLASS_BASE+39)
 
 /* FM Modulator class control IDs */
 
-- 
2.39.5


  parent reply	other threads:[~2025-02-03  9:00 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-03  8:58 [RFC v5 00/15] Sub-device configuration models Sakari Ailus
2025-02-03  8:58 ` [RFC v5 01/15] media: Documentation: Rework embedded data documentation Sakari Ailus
2025-02-03 14:52   ` Lad, Prabhakar
2025-02-09 15:06   ` RFC " Mirela Rabulea
2025-02-03  8:58 ` [RFC v5 02/15] media: Documentation: Add a hyphen to list-based Sakari Ailus
2025-02-03 14:53   ` Lad, Prabhakar
2025-02-03  8:58 ` [RFC v5 03/15] media: Documentation: Reword split of sensor driver to two classes Sakari Ailus
2025-02-03 14:57   ` Lad, Prabhakar
2025-02-03  8:58 ` [RFC v5 04/15] media: Documentation: Add subdev configuration models, raw sensor model Sakari Ailus
2025-02-03 15:14   ` Lad, Prabhakar
2025-02-09 15:42   ` Mirela Rabulea
2025-02-26  9:17     ` Mirela Rabulea
2025-02-26 10:36       ` Sakari Ailus
2025-02-03  8:58 ` [RFC v5 05/15] media: Documentation: Add scaling and post-scaler crop for common raw Sakari Ailus
2025-02-03 15:45   ` Lad, Prabhakar
2025-02-03  8:58 ` [RFC v5 06/15] media: uapi: Add V4L2_CID_CONFIG_MODEL control Sakari Ailus
2025-02-03 15:46   ` Lad, Prabhakar
2025-02-10  9:09   ` Hans Verkuil
2025-02-10 13:25     ` Sakari Ailus
2025-02-10 14:07       ` Hans Verkuil
2025-02-20 10:50         ` Sakari Ailus
2025-02-03  8:58 ` [RFC v5 07/15] media: uapi: Add V4L2_CID_COLOUR_PATTERN for describing colour patterns Sakari Ailus
2025-02-09 17:14   ` Mirela Rabulea
2025-02-10 13:39     ` Sakari Ailus
2025-02-10  8:57   ` Hans Verkuil
2025-02-10 14:37     ` Sakari Ailus
2025-02-03  8:58 ` [RFC v5 08/15] media: uapi: Correct generic CSI-2 metadata format 4cc Sakari Ailus
2025-02-03  8:58 ` [RFC v5 09/15] media: uapi: Documentation: Improve column width hints for examples Sakari Ailus
2025-02-03  8:58 ` [RFC v5 10/15] media: v4l: uapi: Add a control for colour pattern flipping effect Sakari Ailus
2025-02-09 17:23   ` Mirela Rabulea
2025-02-10 13:53     ` Sakari Ailus
2025-02-11 16:00       ` Dave Stevenson
2025-02-03  8:58 ` [RFC v5 11/15] media: Documentation: Document luma-only mbus codes and CFA for cameras Sakari Ailus
2025-02-09 17:48   ` [EXT] " Mirela Rabulea
2025-02-10 14:35     ` Sakari Ailus
2025-02-03  8:58 ` [RFC v5 12/15] media: uapi: Documentation: Use luma formats with CFA pattern control Sakari Ailus
2025-02-09 17:50   ` Mirela Rabulea
2025-02-03  8:58 ` [RFC v5 13/15] media: uapi: Add V4L2_CID_BINNING control for binning configuration Sakari Ailus
2025-02-10 14:07   ` Hans Verkuil
2025-02-10 14:32     ` Sakari Ailus
2025-02-03  8:58 ` Sakari Ailus [this message]
2025-02-03  8:58 ` [RFC v5 15/15] media: Documentation: Add binning and sub-sampling controls Sakari Ailus
2025-02-10 13:46 ` [RFC v5 00/15] Sub-device configuration models Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250203085853.1361401-15-sakari.ailus@linux.intel.com \
    --to=sakari.ailus@linux.intel.com \
    --cc=benjamin.mugnier@foss.st.com \
    --cc=bingbu.cao@intel.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=dongcheng.yan@intel.com \
    --cc=eagle.alexander923@gmail.com \
    --cc=git@apitzsch.eu \
    --cc=hdegoede@redhat.com \
    --cc=heimir.sverrisson@gmail.com \
    --cc=hongju.wang@intel.com \
    --cc=hpa@redhat.com \
    --cc=hverkuil@xs4all.nl \
    --cc=julien.massot@collabora.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mehdi.djait@linux.intel.com \
    --cc=mike.rudenko@gmail.com \
    --cc=mirela.rabulea@nxp.com \
    --cc=naush@raspberrypi.com \
    --cc=prabhakar.csengg@gmail.com \
    --cc=ribalda@kernel.org \
    --cc=stanislaw.gruszka@linux.intel.com \
    --cc=stefan.klug@ideasonboard.com \
    --cc=sylvain.petinot@foss.st.com \
    --cc=tian.shu.qiu@intel.com \
    --cc=tomm.merciai@gmail.com \
    --cc=umang.jain@ideasonboard.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox