[v3,2/6] media: v4l2_ctrl: Add region of interest auto control
Commit Message
Follows the UVC v1.5 class specification.
Signed-off-by: Yunke Cao <yunkec@google.com>
---
Changelog since v2:
- Better documentation.
- Rename V4L2_CID_REGION_OF_INTEREST_AUTO_EXPOSURE to
V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE, etc. The bit masks shouldn't
have "CID" in it.
.../media/v4l/ext-ctrls-camera.rst | 39 +++++++++++++++++++
drivers/media/v4l2-core/v4l2-ctrls-defs.c | 3 ++
include/uapi/linux/v4l2-controls.h | 9 +++++
3 files changed, 51 insertions(+)
Comments
On 5/18/22 08:24, Yunke Cao wrote:
> Follows the UVC v1.5 class specification.
>
> Signed-off-by: Yunke Cao <yunkec@google.com>
> ---
> Changelog since v2:
> - Better documentation.
> - Rename V4L2_CID_REGION_OF_INTEREST_AUTO_EXPOSURE to
> V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE, etc. The bit masks shouldn't
> have "CID" in it.
>
> .../media/v4l/ext-ctrls-camera.rst | 39 +++++++++++++++++++
> drivers/media/v4l2-core/v4l2-ctrls-defs.c | 3 ++
> include/uapi/linux/v4l2-controls.h | 9 +++++
> 3 files changed, 51 insertions(+)
>
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
> index c988a72b97b2..c26c28cfcf6a 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-camera.rst
> @@ -671,3 +671,42 @@ enum v4l2_scene_mode -
> Setting a region of interest allows the camera to optimize the capture for
> the region. The value of ``V4L2_CID_REGION_OF_INTEREST_AUTO`` control
> determines the detailed behavior.
> +
> +``V4L2_CID_REGION_OF_INTEREST_AUTO (bitmask)``
> + This determines which, if any, on board features should track to the
> + Region of Interest specified by the current value of
> + ``V4L2_CID_REGION_OF_INTEREST_RECT``.
> +
> + Max value is a mask indicating all supported Auto
> + Controls.
> +
> +.. flat-table::
> + :header-rows: 0
> + :stub-columns: 0
> +
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE``
> + - Setting this to true enables automatic exposure time for the specified
> + region.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_IRIS``
> + - Setting this to true enables automatic iris aperture for the specified
> + region.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_WHITE_BALANCE``
> + - Setting this to true enables automatic white balance adjustment for the
> + specified region.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_FOCUS``
> + - Setting this to true enables automatic focus adjustment for the
> + specified region.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_FACE_DETECT``
> + - Setting this to true enables automatic face detection for the
> + specified region.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK``
> + - Setting this to true enables automatic detection and tracking. The
"AUTO_DETECT": detect what? Faces?
> + current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
> + the firmware.
I'd say 'driver' instead of 'firmware'.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION``
> + - Setting this to true enables automatic image stabilization. The
> + current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
> + the firmware.
Ditto.
> + * - ``V4L2_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY``
> + - Setting this to true enables automatically capture the specified region
> + with higher quality if possible.
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> index 95f39a2d2ad2..220afc4d5244 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -1043,6 +1043,8 @@ const char *v4l2_ctrl_get_name(u32 id)
> case V4L2_CID_CAMERA_ORIENTATION: return "Camera Orientation";
> case V4L2_CID_CAMERA_SENSOR_ROTATION: return "Camera Sensor Rotation";
> case V4L2_CID_REGION_OF_INTEREST_RECT: return "Region Of Interest Rectangle";
> + case V4L2_CID_REGION_OF_INTEREST_AUTO: return "Region Of Interest Auto Controls";
> +
>
> /* FM Radio Modulator controls */
> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1415,6 +1417,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
> case V4L2_CID_JPEG_ACTIVE_MARKER:
> case V4L2_CID_3A_LOCK:
> case V4L2_CID_AUTO_FOCUS_STATUS:
> + case V4L2_CID_REGION_OF_INTEREST_AUTO:
> case V4L2_CID_DV_TX_HOTPLUG:
> case V4L2_CID_DV_TX_RXSENSE:
> case V4L2_CID_DV_TX_EDID_PRESENT:
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 499fcddb6254..13db0638533c 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -1009,6 +1009,15 @@ enum v4l2_auto_focus_range {
> #define V4L2_CID_CAMERA_SENSOR_ROTATION (V4L2_CID_CAMERA_CLASS_BASE+35)
>
> #define V4L2_CID_REGION_OF_INTEREST_RECT (V4L2_CID_CAMERA_CLASS_BASE+36)
> +#define V4L2_CID_REGION_OF_INTEREST_AUTO (V4L2_CID_CAMERA_CLASS_BASE+37)
> +#define V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE (1 << 0)
> +#define V4L2_REGION_OF_INTEREST_AUTO_IRIS (1 << 1)
> +#define V4L2_REGION_OF_INTEREST_AUTO_WHITE_BALANCE (1 << 2)
> +#define V4L2_REGION_OF_INTEREST_AUTO_FOCUS (1 << 3)
> +#define V4L2_REGION_OF_INTEREST_AUTO_FACE_DETECT (1 << 4)
> +#define V4L2_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK (1 << 5)
> +#define V4L2_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION (1 << 6)
> +#define V4L2_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY (1 << 7)
>
> /* FM Modulator class control IDs */
>
Regards,
Hans
@@ -671,3 +671,42 @@ enum v4l2_scene_mode -
Setting a region of interest allows the camera to optimize the capture for
the region. The value of ``V4L2_CID_REGION_OF_INTEREST_AUTO`` control
determines the detailed behavior.
+
+``V4L2_CID_REGION_OF_INTEREST_AUTO (bitmask)``
+ This determines which, if any, on board features should track to the
+ Region of Interest specified by the current value of
+ ``V4L2_CID_REGION_OF_INTEREST_RECT``.
+
+ Max value is a mask indicating all supported Auto
+ Controls.
+
+.. flat-table::
+ :header-rows: 0
+ :stub-columns: 0
+
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE``
+ - Setting this to true enables automatic exposure time for the specified
+ region.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_IRIS``
+ - Setting this to true enables automatic iris aperture for the specified
+ region.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_WHITE_BALANCE``
+ - Setting this to true enables automatic white balance adjustment for the
+ specified region.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_FOCUS``
+ - Setting this to true enables automatic focus adjustment for the
+ specified region.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_FACE_DETECT``
+ - Setting this to true enables automatic face detection for the
+ specified region.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK``
+ - Setting this to true enables automatic detection and tracking. The
+ current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
+ the firmware.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION``
+ - Setting this to true enables automatic image stabilization. The
+ current value of ``V4L2_CID_REGION_OF_INTEREST_RECT`` may be updated by
+ the firmware.
+ * - ``V4L2_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY``
+ - Setting this to true enables automatically capture the specified region
+ with higher quality if possible.
@@ -1043,6 +1043,8 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_CAMERA_ORIENTATION: return "Camera Orientation";
case V4L2_CID_CAMERA_SENSOR_ROTATION: return "Camera Sensor Rotation";
case V4L2_CID_REGION_OF_INTEREST_RECT: return "Region Of Interest Rectangle";
+ case V4L2_CID_REGION_OF_INTEREST_AUTO: return "Region Of Interest Auto Controls";
+
/* FM Radio Modulator controls */
/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1415,6 +1417,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
case V4L2_CID_JPEG_ACTIVE_MARKER:
case V4L2_CID_3A_LOCK:
case V4L2_CID_AUTO_FOCUS_STATUS:
+ case V4L2_CID_REGION_OF_INTEREST_AUTO:
case V4L2_CID_DV_TX_HOTPLUG:
case V4L2_CID_DV_TX_RXSENSE:
case V4L2_CID_DV_TX_EDID_PRESENT:
@@ -1009,6 +1009,15 @@ enum v4l2_auto_focus_range {
#define V4L2_CID_CAMERA_SENSOR_ROTATION (V4L2_CID_CAMERA_CLASS_BASE+35)
#define V4L2_CID_REGION_OF_INTEREST_RECT (V4L2_CID_CAMERA_CLASS_BASE+36)
+#define V4L2_CID_REGION_OF_INTEREST_AUTO (V4L2_CID_CAMERA_CLASS_BASE+37)
+#define V4L2_REGION_OF_INTEREST_AUTO_EXPOSURE (1 << 0)
+#define V4L2_REGION_OF_INTEREST_AUTO_IRIS (1 << 1)
+#define V4L2_REGION_OF_INTEREST_AUTO_WHITE_BALANCE (1 << 2)
+#define V4L2_REGION_OF_INTEREST_AUTO_FOCUS (1 << 3)
+#define V4L2_REGION_OF_INTEREST_AUTO_FACE_DETECT (1 << 4)
+#define V4L2_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK (1 << 5)
+#define V4L2_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION (1 << 6)
+#define V4L2_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY (1 << 7)
/* FM Modulator class control IDs */