media: v4l2: Make colorspace validity checks more future-proof
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Thu, 17 Mar 2022 12:37:12 +0000 (12:37 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 15 Jul 2022 14:02:39 +0000 (15:02 +0100)
The helper functions that test validity of colorspace-related fields
use the last value of the corresponding enums. This isn't very
future-proof, as there's a high chance someone adding a new value may
forget to update the helpers. Add new "LAST" entries to the enumerations
to improve this, and keep them private to the kernel.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
include/media/v4l2-common.h
include/uapi/linux/videodev2.h

index 3eb202259e8ccd617d6b51875bc66917e0588436..b708d63995f458a8fe21e2910b18a76d08392235 100644 (file)
@@ -563,19 +563,19 @@ static inline void v4l2_buffer_set_timestamp(struct v4l2_buffer *buf,
 static inline bool v4l2_is_colorspace_valid(__u32 colorspace)
 {
        return colorspace > V4L2_COLORSPACE_DEFAULT &&
-              colorspace <= V4L2_COLORSPACE_DCI_P3;
+              colorspace < V4L2_COLORSPACE_LAST;
 }
 
 static inline bool v4l2_is_xfer_func_valid(__u32 xfer_func)
 {
        return xfer_func > V4L2_XFER_FUNC_DEFAULT &&
-              xfer_func <= V4L2_XFER_FUNC_SMPTE2084;
+              xfer_func < V4L2_XFER_FUNC_LAST;
 }
 
 static inline bool v4l2_is_ycbcr_enc_valid(__u8 ycbcr_enc)
 {
        return ycbcr_enc > V4L2_YCBCR_ENC_DEFAULT &&
-              ycbcr_enc <= V4L2_YCBCR_ENC_SMPTE240M;
+              ycbcr_enc < V4L2_YCBCR_ENC_LAST;
 }
 
 static inline bool v4l2_is_hsv_enc_valid(__u8 hsv_enc)
index 0028ab74ca7cf047353dfc2ee1ae4960226c3bbb..e32b9e25258d72679f3c14337cc66c8f58ba06c3 100644 (file)
@@ -245,6 +245,14 @@ enum v4l2_colorspace {
 
        /* DCI-P3 colorspace, used by cinema projectors */
        V4L2_COLORSPACE_DCI_P3        = 12,
+
+#ifdef __KERNEL__
+       /*
+        * Largest supported colorspace value, assigned by the compiler, used
+        * by the framework to check for invalid values.
+        */
+       V4L2_COLORSPACE_LAST,
+#endif
 };
 
 /*
@@ -283,6 +291,13 @@ enum v4l2_xfer_func {
        V4L2_XFER_FUNC_NONE        = 5,
        V4L2_XFER_FUNC_DCI_P3      = 6,
        V4L2_XFER_FUNC_SMPTE2084   = 7,
+#ifdef __KERNEL__
+       /*
+        * Largest supported transfer function value, assigned by the compiler,
+        * used by the framework to check for invalid values.
+        */
+       V4L2_XFER_FUNC_LAST,
+#endif
 };
 
 /*
@@ -343,6 +358,13 @@ enum v4l2_ycbcr_encoding {
 
        /* SMPTE 240M -- Obsolete HDTV */
        V4L2_YCBCR_ENC_SMPTE240M      = 8,
+#ifdef __KERNEL__
+       /*
+        * Largest supported encoding value, assigned by the compiler, used by
+        * the framework to check for invalid values.
+        */
+       V4L2_YCBCR_ENC_LAST,
+#endif
 };
 
 /*