v4l2: Sync headers with kernel 5.9
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 11 Aug 2020 21:18:42 +0000 (17:18 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 11 Aug 2020 21:24:03 +0000 (17:24 -0400)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/697>

sys/v4l2/ext/types-compat.h
sys/v4l2/ext/v4l2-common.h
sys/v4l2/ext/v4l2-controls.h
sys/v4l2/ext/videodev2.h

index ea21c95..f8d0dc2 100644 (file)
@@ -24,6 +24,8 @@
 #ifndef __TYPES_COMPAT_H__
 #define __TYPES_COMPAT_H__
 
+#define __user
+
 #ifdef   __linux__
 #include <linux/types.h>
 #include <asm/ioctl.h>
index a249404..08fd92f 100644 (file)
@@ -92,6 +92,7 @@ struct v4l2_edid {
        __u8  *edid;
 };
 
+#ifndef __KERNEL__
 /* Backward compatibility target definitions --- to be removed. */
 #define V4L2_SEL_TGT_CROP_ACTIVE       V4L2_SEL_TGT_CROP
 #define V4L2_SEL_TGT_COMPOSE_ACTIVE    V4L2_SEL_TGT_COMPOSE
@@ -104,5 +105,6 @@ struct v4l2_edid {
 #define V4L2_SUBDEV_SEL_FLAG_SIZE_GE   V4L2_SEL_FLAG_GE
 #define V4L2_SUBDEV_SEL_FLAG_SIZE_LE   V4L2_SEL_FLAG_LE
 #define V4L2_SUBDEV_SEL_FLAG_KEEP_CONFIG V4L2_SEL_FLAG_KEEP_CONFIG
+#endif
 
 #endif /* __V4L2_COMMON__ */
index 365182c..1464a34 100644 (file)
@@ -192,6 +192,12 @@ enum v4l2_colorfx {
  * We reserve 16 controls for this driver. */
 #define V4L2_CID_USER_IMX_BASE                 (V4L2_CID_USER_BASE + 0x10b0)
 
+/*
+ * The base for the atmel isc driver controls.
+ * We reserve 32 controls for this driver.
+ */
+#define V4L2_CID_USER_ATMEL_ISC_BASE           (V4L2_CID_USER_BASE + 0x10c0)
+
 /* MPEG-class control IDs */
 /* The MPEG controls are applicable to all codec controls
  * and the 'MPEG' part of the define is historical */
@@ -394,9 +400,11 @@ enum v4l2_mpeg_video_multi_slice_mode {
        V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE         = 0,
        V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB         = 1,
        V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES      = 2,
+#ifndef __KERNEL__
        /* Kept for backwards compatibility reasons. Stupid typo... */
        V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB          = 1,
        V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES       = 2,
+#endif
 };
 #define V4L2_CID_MPEG_VIDEO_VBV_SIZE                   (V4L2_CID_MPEG_BASE+222)
 #define V4L2_CID_MPEG_VIDEO_DEC_PTS                    (V4L2_CID_MPEG_BASE+223)
@@ -465,6 +473,10 @@ enum v4l2_mpeg_video_h264_level {
        V4L2_MPEG_VIDEO_H264_LEVEL_4_2  = 13,
        V4L2_MPEG_VIDEO_H264_LEVEL_5_0  = 14,
        V4L2_MPEG_VIDEO_H264_LEVEL_5_1  = 15,
+       V4L2_MPEG_VIDEO_H264_LEVEL_5_2  = 16,
+       V4L2_MPEG_VIDEO_H264_LEVEL_6_0  = 17,
+       V4L2_MPEG_VIDEO_H264_LEVEL_6_1  = 18,
+       V4L2_MPEG_VIDEO_H264_LEVEL_6_2  = 19,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA     (V4L2_CID_MPEG_BASE+360)
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA      (V4L2_CID_MPEG_BASE+361)
@@ -493,6 +505,7 @@ enum v4l2_mpeg_video_h264_profile {
        V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA        = 14,
        V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH                = 15,
        V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH             = 16,
+       V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH           = 17,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT    (V4L2_CID_MPEG_BASE+364)
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH     (V4L2_CID_MPEG_BASE+365)
@@ -910,6 +923,13 @@ enum v4l2_auto_focus_range {
 #define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
 #define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
 
+#define V4L2_CID_CAMERA_ORIENTATION            (V4L2_CID_CAMERA_CLASS_BASE+34)
+#define V4L2_CAMERA_ORIENTATION_FRONT          0
+#define V4L2_CAMERA_ORIENTATION_BACK           1
+#define V4L2_CAMERA_ORIENTATION_EXTERNAL       2
+
+#define V4L2_CID_CAMERA_SENSOR_ROTATION                (V4L2_CID_CAMERA_CLASS_BASE+35)
+
 /* FM Modulator class control IDs */
 
 #define V4L2_CID_FM_TX_CLASS_BASE              (V4L2_CTRL_CLASS_FM_TX | 0x900)
@@ -1032,6 +1052,7 @@ enum v4l2_jpeg_chroma_subsampling {
 #define V4L2_CID_TEST_PATTERN_GREENR           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
 #define V4L2_CID_TEST_PATTERN_BLUE             (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
 #define V4L2_CID_TEST_PATTERN_GREENB           (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+#define V4L2_CID_UNIT_CELL_SIZE                        (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
 
 
 /* Image processing controls */
index f5c18a0..8c356b3 100644 (file)
  *              Hans Verkuil <hverkuil@xs4all.nl>
  *             et al.
  */
-#ifndef __LINUX_VIDEODEV2_H
-#define __LINUX_VIDEODEV2_H
+#ifndef _UAPI__LINUX_VIDEODEV2_H
+#define _UAPI__LINUX_VIDEODEV2_H
 
+#ifndef __KERNEL__
 #include <sys/time.h>
 #include <sys/ioctl.h>
+#endif
 
 #include "ext/types-compat.h"
 #include "ext/v4l2-common.h"
@@ -169,6 +171,8 @@ enum v4l2_buf_type {
         || (type) == V4L2_BUF_TYPE_SDR_OUTPUT                  \
         || (type) == V4L2_BUF_TYPE_META_OUTPUT)
 
+#define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
+
 enum v4l2_tuner_type {
        V4L2_TUNER_RADIO             = 1,
        V4L2_TUNER_ANALOG_TV         = 2,
@@ -187,6 +191,8 @@ enum v4l2_memory {
        V4L2_MEMORY_DMABUF           = 4,
 };
 
+#define V4L2_FLAG_MEMORY_NON_CONSISTENT                (1 << 0)
+
 /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
 enum v4l2_colorspace {
        /*
@@ -324,12 +330,14 @@ enum v4l2_ycbcr_encoding {
        /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */
        V4L2_YCBCR_ENC_XV709          = 4,
 
+#ifndef __KERNEL__
        /*
         * sYCC (Y'CbCr encoding of sRGB), identical to ENC_601. It was added
         * originally due to a misunderstanding of the sYCC standard. It should
         * not be used, instead use V4L2_YCBCR_ENC_601.
         */
        V4L2_YCBCR_ENC_SYCC           = 5,
+#endif
 
        /* BT.2020 Non-constant Luminance Y'CbCr */
        V4L2_YCBCR_ENC_BT2020         = 6,
@@ -393,8 +401,10 @@ enum v4l2_quantization {
  * WARNING: Please don't use these deprecated defines in your code, as
  * there is a chance we have to remove them in the future.
  */
+#ifndef __KERNEL__
 #define V4L2_COLORSPACE_ADOBERGB V4L2_COLORSPACE_OPRGB
 #define V4L2_XFER_FUNC_ADOBERGB  V4L2_XFER_FUNC_OPRGB
+#endif
 
 enum v4l2_priority {
        V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
@@ -416,6 +426,11 @@ struct v4l2_fract {
        __u32   denominator;
 };
 
+struct v4l2_area {
+       __u32   width;
+       __u32   height;
+};
+
 /**
   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
   *
@@ -476,6 +491,8 @@ struct v4l2_capability {
 
 #define V4L2_CAP_TOUCH                  0x10000000  /* Is a touch device */
 
+#define V4L2_CAP_IO_MC                 0x20000000  /* Is input/output controlled by the media controller */
+
 #define V4L2_CAP_DEVICE_CAPS            0x80000000  /* sets device capabilities field */
 
 /*
@@ -554,6 +571,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
 #define V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
 #define V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
+#define V4L2_PIX_FMT_Y14     v4l2_fourcc('Y', '1', '4', ' ') /* 14  Greyscale     */
 #define V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
 #define V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
 
@@ -651,6 +669,10 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
 #define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
 #define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
+#define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14  BGBG.. GRGR.. */
+#define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14  GBGB.. RGRG.. */
+#define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4') /* 14  GRGR.. BGBG.. */
+#define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14  RGRG.. GBGB.. */
        /* 14bit raw bayer packed, 7 bytes for every 4 pixels */
 #define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
 #define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
@@ -749,6 +771,7 @@ struct v4l2_pix_format {
 #define V4L2_META_FMT_VSP1_HGT    v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
 #define V4L2_META_FMT_UVC         v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
 #define V4L2_META_FMT_D4XX        v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
+#define V4L2_META_FMT_VIVID      v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
 
 /* priv field value to indicates that subsequent fields are valid. */
 #define V4L2_PIX_FMT_PRIV_MAGIC                0xfeedcafe
@@ -765,13 +788,15 @@ struct v4l2_fmtdesc {
        __u32               flags;
        __u8                description[32];   /* Description string */
        __u32               pixelformat;       /* Format fourcc      */
-       __u32               reserved[4];
+       __u32               mbus_code;          /* Media bus code    */
+       __u32               reserved[3];
 };
 
 #define V4L2_FMT_FLAG_COMPRESSED               0x0001
 #define V4L2_FMT_FLAG_EMULATED                 0x0002
 #define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM    0x0004
 #define V4L2_FMT_FLAG_DYN_RESOLUTION           0x0008
+#define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL   0x0010
 
        /* Frame Size and frame rate enumeration */
 /*
@@ -900,20 +925,44 @@ struct v4l2_jpegcompression {
 /*
  *     M E M O R Y - M A P P I N G   B U F F E R S
  */
+
+#ifdef __KERNEL__
+/*
+ * This corresponds to the user space version of timeval
+ * for 64-bit time_t. sparc64 is different from everyone
+ * else, using the microseconds in the wrong half of the
+ * second 64-bit word.
+ */
+struct __kernel_v4l2_timeval {
+       long long       tv_sec;
+#if defined(__sparc__) && defined(__arch64__)
+       int             tv_usec;
+       int             __pad;
+#else
+       long long       tv_usec;
+#endif
+};
+#endif
+
 struct v4l2_requestbuffers {
        __u32                   count;
        __u32                   type;           /* enum v4l2_buf_type */
        __u32                   memory;         /* enum v4l2_memory */
        __u32                   capabilities;
-       __u32                   reserved[1];
+       union {
+               __u32           flags;
+               __u32           reserved[1];
+       };
 };
 
 /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
-#define V4L2_BUF_CAP_SUPPORTS_MMAP     (1 << 0)
-#define V4L2_BUF_CAP_SUPPORTS_USERPTR  (1 << 1)
-#define V4L2_BUF_CAP_SUPPORTS_DMABUF   (1 << 2)
-#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
-#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_MMAP                     (1 << 0)
+#define V4L2_BUF_CAP_SUPPORTS_USERPTR                  (1 << 1)
+#define V4L2_BUF_CAP_SUPPORTS_DMABUF                   (1 << 2)
+#define V4L2_BUF_CAP_SUPPORTS_REQUESTS                 (1 << 3)
+#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS            (1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF     (1 << 5)
+#define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS         (1 << 6)
 
 /**
  * struct v4l2_plane - plane info for multi-planar buffers
@@ -984,7 +1033,11 @@ struct v4l2_buffer {
        __u32                   bytesused;
        __u32                   flags;
        __u32                   field;
+#ifdef __KERNEL__
+       struct __kernel_v4l2_timeval timestamp;
+#else
        struct timeval          timestamp;
+#endif
        struct v4l2_timecode    timecode;
        __u32                   sequence;
 
@@ -1004,6 +1057,7 @@ struct v4l2_buffer {
        };
 };
 
+#ifndef __KERNEL__
 /**
  * v4l2_timeval_to_ns - Convert timeval to nanoseconds
  * @ts:                pointer to the timeval variable to be converted
@@ -1011,10 +1065,11 @@ struct v4l2_buffer {
  * Returns the scalar nanosecond representation of the timeval
  * parameter.
  */
-static __inline__ __u64 v4l2_timeval_to_ns(const struct timeval *tv)
+static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
 {
        return (__u64)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000;
 }
+#endif
 
 /*  Flags for 'flags' field */
 /* Buffer is mapped (flag) */
@@ -1035,6 +1090,8 @@ static __inline__ __u64 v4l2_timeval_to_ns(const struct timeval *tv)
 #define V4L2_BUF_FLAG_IN_REQUEST               0x00000080
 /* timecode field is valid */
 #define V4L2_BUF_FLAG_TIMECODE                 0x00000100
+/* Don't return the capture buffer until OUTPUT timestamp changes */
+#define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF     0x00000200
 /* Buffer is prepared for queuing */
 #define V4L2_BUF_FLAG_PREPARED                 0x00000400
 /* Cache handling flags */
@@ -1121,16 +1178,16 @@ struct v4l2_framebuffer {
 
 struct v4l2_clip {
        struct v4l2_rect        c;
-       struct v4l2_clip        *next;
+       struct v4l2_clip        __user *next;
 };
 
 struct v4l2_window {
        struct v4l2_rect        w;
        __u32                   field;   /* enum v4l2_field */
        __u32                   chromakey;
-       struct v4l2_clip        *clips;
+       struct v4l2_clip        __user *clips;
        __u32                   clipcount;
-       void                    *bitmap;
+       void                    __user *bitmap;
        __u8                    global_alpha;
 };
 
@@ -1202,6 +1259,10 @@ struct v4l2_selection {
 
 typedef __u64 v4l2_std_id;
 
+/*
+ * Attention: Keep the V4L2_STD_* bit definitions in sync with
+ * include/dt-bindings/display/sdtv-standards.h SDTV_STD_* bit definitions.
+ */
 /* one bit for each */
 #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
 #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
@@ -1665,17 +1726,20 @@ struct v4l2_ext_control {
        union {
                __s32 value;
                __s64 value64;
-               char *string;
-               __u8 *p_u8;
-               __u16 *p_u16;
-               __u32 *p_u32;
-               void *ptr;
+               char __user *string;
+               __u8 __user *p_u8;
+               __u16 __user *p_u16;
+               __u32 __user *p_u32;
+               struct v4l2_area __user *p_area;
+               void __user *ptr;
        };
 } __attribute__ ((packed));
 
 struct v4l2_ext_controls {
        union {
+#ifndef __KERNEL__
                __u32 ctrl_class;
+#endif
                __u32 which;
        };
        __u32 count;
@@ -1686,7 +1750,9 @@ struct v4l2_ext_controls {
 };
 
 #define V4L2_CTRL_ID_MASK        (0x0fffffff)
+#ifndef __KERNEL__
 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
+#endif
 #define V4L2_CTRL_ID2WHICH(id)    ((id) & 0x0fff0000UL)
 #define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
 #define V4L2_CTRL_MAX_DIMS       (4)
@@ -1710,6 +1776,7 @@ enum v4l2_ctrl_type {
        V4L2_CTRL_TYPE_U8            = 0x0100,
        V4L2_CTRL_TYPE_U16           = 0x0101,
        V4L2_CTRL_TYPE_U32           = 0x0102,
+       V4L2_CTRL_TYPE_AREA          = 0x0106,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
@@ -1965,6 +2032,7 @@ struct v4l2_encoder_cmd {
 #define V4L2_DEC_CMD_STOP        (1)
 #define V4L2_DEC_CMD_PAUSE       (2)
 #define V4L2_DEC_CMD_RESUME      (3)
+#define V4L2_DEC_CMD_FLUSH       (4)
 
 /* Flags for V4L2_DEC_CMD_START */
 #define V4L2_DEC_CMD_START_MUTE_AUDIO  (1 << 0)
@@ -2317,7 +2385,11 @@ struct v4l2_event {
        } u;
        __u32                           pending;
        __u32                           sequence;
+#ifdef __KERNEL__
+       struct __kernel_timespec        timestamp;
+#else
        struct timespec                 timestamp;
+#endif
        __u32                           id;
        __u32                           reserved[8];
 };
@@ -2384,6 +2456,9 @@ struct v4l2_dbg_chip_info {
  * @memory:    enum v4l2_memory; buffer memory type
  * @format:    frame format, for which buffers are requested
  * @capabilities: capabilities of this buffer type.
+ * @flags:     additional buffer management attributes (ignored unless the
+ *             queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
+ *             and configured for MMAP streaming I/O).
  * @reserved:  future extensions
  */
 struct v4l2_create_buffers {
@@ -2392,7 +2467,8 @@ struct v4l2_create_buffers {
        __u32                   memory;
        struct v4l2_format      format;
        __u32                   capabilities;
-       __u32                   reserved[7];
+       __u32                   flags;
+       __u32                   reserved[6];
 };
 
 /*
@@ -2500,4 +2576,4 @@ struct v4l2_create_buffers {
 
 #define BASE_VIDIOC_PRIVATE    192             /* 192-255 are private */
 
-#endif /* __LINUX_VIDEODEV2_H */
+#endif /* _UAPI__LINUX_VIDEODEV2_H */