Merge branch 'tizen_gst_1.19.3' into tizen_gst_1.20.0
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-good / sys / v4l2 / ext / videodev2.h
index b3525cd..88d787d 100644 (file)
  *              Hans Verkuil <hverkuil@xs4all.nl>
  *             et al.
  */
-#ifndef _UAPI__LINUX_VIDEODEV2_H
-#define _UAPI__LINUX_VIDEODEV2_H
+#ifndef __LINUX_VIDEODEV2_H
+#define __LINUX_VIDEODEV2_H
 
-#ifndef __KERNEL__
 #include <sys/time.h>
 #include <sys/ioctl.h>
-#endif
 
 #include "ext/types-compat.h"
 #include "ext/v4l2-common.h"
@@ -191,8 +189,6 @@ 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 {
        /*
@@ -223,9 +219,7 @@ enum v4l2_colorspace {
        V4L2_COLORSPACE_470_SYSTEM_M  = 5,
 
        /*
-        * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
-        * dealing with really old PAL/SECAM recordings. Superseded by
-        * SMPTE 170M.
+        * EBU Tech 3213 PAL/SECAM colorspace.
         */
        V4L2_COLORSPACE_470_SYSTEM_BG = 6,
 
@@ -330,14 +324,12 @@ 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,
@@ -375,9 +367,9 @@ enum v4l2_hsv_encoding {
 
 enum v4l2_quantization {
        /*
-        * The default for R'G'B' quantization is always full range, except
-        * for the BT2020 colorspace. For Y'CbCr the quantization is always
-        * limited range, except for COLORSPACE_JPEG: this is full range.
+        * The default for R'G'B' quantization is always full range.
+        * For Y'CbCr the quantization is always limited range, except
+        * for COLORSPACE_JPEG: this is full range.
         */
        V4L2_QUANTIZATION_DEFAULT     = 0,
        V4L2_QUANTIZATION_FULL_RANGE  = 1,
@@ -386,14 +378,13 @@ enum v4l2_quantization {
 
 /*
  * Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
- * This depends on whether the image is RGB or not, the colorspace and the
- * Y'CbCr encoding.
+ * This depends on whether the image is RGB or not, the colorspace.
+ * The Y'CbCr encoding is not used anymore, but is still there for backwards
+ * compatibility.
  */
 #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
-       (((is_rgb_or_hsv) && (colsp) == V4L2_COLORSPACE_BT2020) ? \
-        V4L2_QUANTIZATION_LIM_RANGE : \
-        (((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
-        V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
+       (((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
+        V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)
 
 /*
  * Deprecated names for opRGB colorspace (IEC 61966-2-5)
@@ -401,10 +392,8 @@ 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 */
@@ -520,7 +509,7 @@ struct v4l2_pix_format {
 
 /*      Pixel format         FOURCC                          depth  Description  */
 
-/* RGB formats */
+/* RGB formats (1 or 2 bytes per pixel) */
 #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
 #define V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
 #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
@@ -529,12 +518,6 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16  rrrrgggg bbbbxxxx */
 #define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16  aaaabbbb ggggrrrr */
 #define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16  xxxxbbbb ggggrrrr */
-
-/*
- * Originally this had 'BA12' as fourcc, but this clashed with the older
- * V4L2_PIX_FMT_SGRBG12 which inexplicably used that same fourcc.
- * So use 'GA12' instead for V4L2_PIX_FMT_BGRA444.
- */
 #define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16  bbbbgggg rrrraaaa */
 #define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16  bbbbgggg rrrrxxxx */
 #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
@@ -551,6 +534,8 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
 #define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
 #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
+
+/* RGB formats (3 or 4 bytes per pixel) */
 #define V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6    */
 #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
 #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
@@ -595,13 +580,12 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
+#define V4L2_PIX_FMT_YUV24   v4l2_fourcc('Y', 'U', 'V', '3') /* 24  YUV-8-8-8     */
 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
 #define V4L2_PIX_FMT_AYUV32  v4l2_fourcc('A', 'Y', 'U', 'V') /* 32  AYUV-8-8-8-8  */
 #define V4L2_PIX_FMT_XYUV32  v4l2_fourcc('X', 'Y', 'U', 'V') /* 32  XYUV-8-8-8-8  */
 #define V4L2_PIX_FMT_VUYA32  v4l2_fourcc('V', 'U', 'Y', 'A') /* 32  VUYA-8-8-8-8  */
 #define V4L2_PIX_FMT_VUYX32  v4l2_fourcc('V', 'U', 'Y', 'X') /* 32  VUYX-8-8-8-8  */
-#define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
-#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
 
 /* two planes -- one Y, one Cr + Cb interleaved  */
@@ -617,8 +601,6 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
 #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
 #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
-#define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
-#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
 
 /* three planes - Y Cb, Cr */
 #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
@@ -636,6 +618,15 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24  YUV444 planar */
 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */
 
+/* Tiled YUV formats */
+#define V4L2_PIX_FMT_NV12_4L4 v4l2_fourcc('V', 'T', '1', '2')   /* 12  Y/CbCr 4:2:0  4x4 tiles */
+#define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */
+#define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2') /* 12  Y/CbCr 4:2:0 32x32 tiles */
+
+/* Tiled YUV formats, non contiguous planes */
+#define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 tiles */
+#define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */
+
 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
 #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
 #define V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
@@ -704,10 +695,13 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
 #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
 #define V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
+#define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') /* VP8 parsed frame */
 #define V4L2_PIX_FMT_VP9      v4l2_fourcc('V', 'P', '9', '0') /* VP9 */
+#define V4L2_PIX_FMT_VP9_FRAME v4l2_fourcc('V', 'P', '9', 'F') /* VP9 parsed frame */
 #define V4L2_PIX_FMT_HEVC     v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
 #define V4L2_PIX_FMT_FWHT     v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
 #define V4L2_PIX_FMT_FWHT_STATELESS     v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
+#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
 
 /*  Vendor-specific formats   */
 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
@@ -740,9 +734,10 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
 #define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
 #define V4L2_PIX_FMT_MT21C    v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode  */
+#define V4L2_PIX_FMT_MM21     v4l2_fourcc('M', 'M', '2', '1') /* Mediatek 8-bit block mode, two non-contiguous planes */
 #define V4L2_PIX_FMT_INZI     v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
-#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */
 #define V4L2_PIX_FMT_CNF4     v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
+#define V4L2_PIX_FMT_HI240    v4l2_fourcc('H', 'I', '2', '4') /* BTTV 8-bit dithered RGB */
 
 /* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
 #define V4L2_PIX_FMT_IPU3_SBGGR10      v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
@@ -773,6 +768,10 @@ struct v4l2_pix_format {
 #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 */
 
+/* Vendor specific - used for RK_ISP1 camera sub-system */
+#define V4L2_META_FMT_RK_ISP1_PARAMS   v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
+#define V4L2_META_FMT_RK_ISP1_STAT_3A  v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
+
 #define V4L2_PIX_FMT_INVZ     v4l2_fourcc('I', 'N', 'V', 'Z') /* Intel Planar Depth 16-bit */
 
 /* priv field value to indicates that subsequent fields are valid. */
@@ -780,6 +779,7 @@ struct v4l2_pix_format {
 
 /* Flags */
 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
+#define V4L2_PIX_FMT_FLAG_SET_CSC      0x00000002
 
 /*
  *     F O R M A T   E N U M E R A T I O N
@@ -799,6 +799,11 @@ struct v4l2_fmtdesc {
 #define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM    0x0004
 #define V4L2_FMT_FLAG_DYN_RESOLUTION           0x0008
 #define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL   0x0010
+#define V4L2_FMT_FLAG_CSC_COLORSPACE           0x0020
+#define V4L2_FMT_FLAG_CSC_XFER_FUNC            0x0040
+#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
 
        /* Frame Size and frame rate enumeration */
 /*
@@ -928,35 +933,18 @@ 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;
-       union {
-               __u32           flags;
-               __u32           reserved[1];
-       };
+       __u8                    flags;
+       __u8                    reserved[3];
 };
 
+#define V4L2_MEMORY_FLAG_NON_COHERENT                  (1 << 0)
+
 /* 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)
@@ -978,8 +966,10 @@ struct v4l2_requestbuffers {
  *                     pointing to this plane
  * @fd:                        when memory is V4L2_MEMORY_DMABUF, a userspace file
  *                     descriptor associated with this plane
+ * @m:                 union of @mem_offset, @userptr and @fd
  * @data_offset:       offset in the plane to the start of data; usually 0,
  *                     unless there is a header in front of the data
+ * @reserved:          drivers and applications must zero this array
  *
  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
  * with two planes can have one plane for Y, and another for interleaved CbCr
@@ -1021,10 +1011,14 @@ struct v4l2_plane {
  *             a userspace file descriptor associated with this buffer
  * @planes:    for multiplanar buffers; userspace pointer to the array of plane
  *             info structs for this buffer
+ * @m:         union of @offset, @userptr, @planes and @fd
  * @length:    size in bytes of the buffer (NOT its payload) for single-plane
  *             buffers (when type != *_MPLANE); number of elements in the
  *             planes array for multi-plane buffers
+ * @reserved2: drivers and applications must zero this field
  * @request_fd: fd of the request that this buffer should use
+ * @reserved:  for backwards compatibility with applications that do not know
+ *             about @request_fd
  *
  * Contains data exchanged by application and driver using one of the Streaming
  * I/O methods.
@@ -1035,11 +1029,7 @@ 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;
 
@@ -1059,19 +1049,17 @@ struct v4l2_buffer {
        };
 };
 
-#ifndef __KERNEL__
 /**
  * v4l2_timeval_to_ns - Convert timeval to nanoseconds
- * @ts:                pointer to the timeval variable to be converted
+ * @tv:                pointer to the timeval variable to be converted
  *
  * 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) */
@@ -1123,6 +1111,7 @@ static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
  * @flags:     flags for newly created file, currently only O_CLOEXEC is
  *             supported, refer to manual of open syscall for more details
  * @fd:                file descriptor associated with DMABUF (set by driver)
+ * @reserved:  drivers and applications must zero this array
  *
  * Contains data used for exporting a video buffer as DMABUF file descriptor.
  * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF
@@ -1180,16 +1169,16 @@ struct v4l2_framebuffer {
 
 struct v4l2_clip {
        struct v4l2_rect        c;
-       struct v4l2_clip        __user *next;
+       struct v4l2_clip        *next;
 };
 
 struct v4l2_window {
        struct v4l2_rect        w;
        __u32                   field;   /* enum v4l2_field */
        __u32                   chromakey;
-       struct v4l2_clip        __user *clips;
+       struct v4l2_clip        *clips;
        __u32                   clipcount;
-       void                    __user *bitmap;
+       void                    *bitmap;
        __u8                    global_alpha;
 };
 
@@ -1728,20 +1717,31 @@ struct v4l2_ext_control {
        union {
                __s32 value;
                __s64 value64;
-               char __user *string;
-               __u8 __user *p_u8;
-               __u16 __user *p_u16;
-               __u32 __user *p_u32;
-               struct v4l2_area __user *p_area;
-               void __user *ptr;
+               char *string;
+               __u8 *p_u8;
+               __u16 *p_u16;
+               __u32 *p_u32;
+               struct v4l2_area *p_area;
+               struct v4l2_ctrl_h264_sps *p_h264_sps;
+               struct v4l2_ctrl_h264_pps *p_h264_pps;
+               struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
+               struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
+               struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
+               struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
+               struct v4l2_ctrl_fwht_params *p_fwht_params;
+               struct v4l2_ctrl_vp8_frame *p_vp8_frame;
+               struct v4l2_ctrl_mpeg2_sequence *p_mpeg2_sequence;
+               struct v4l2_ctrl_mpeg2_picture *p_mpeg2_picture;
+               struct v4l2_ctrl_mpeg2_quantisation *p_mpeg2_quantisation;
+               struct v4l2_ctrl_vp9_compressed_hdr *p_vp9_compressed_hdr_probs;
+               struct v4l2_ctrl_vp9_frame *p_vp9_frame;
+               void *ptr;
        };
 } __attribute__ ((packed));
 
 struct v4l2_ext_controls {
        union {
-#ifndef __KERNEL__
                __u32 ctrl_class;
-#endif
                __u32 which;
        };
        __u32 count;
@@ -1779,6 +1779,27 @@ enum v4l2_ctrl_type {
        V4L2_CTRL_TYPE_U16           = 0x0101,
        V4L2_CTRL_TYPE_U32           = 0x0102,
        V4L2_CTRL_TYPE_AREA          = 0x0106,
+
+       V4L2_CTRL_TYPE_HDR10_CLL_INFO           = 0x0110,
+       V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY  = 0x0111,
+
+       V4L2_CTRL_TYPE_H264_SPS             = 0x0200,
+       V4L2_CTRL_TYPE_H264_PPS             = 0x0201,
+       V4L2_CTRL_TYPE_H264_SCALING_MATRIX  = 0x0202,
+       V4L2_CTRL_TYPE_H264_SLICE_PARAMS    = 0x0203,
+       V4L2_CTRL_TYPE_H264_DECODE_PARAMS   = 0x0204,
+       V4L2_CTRL_TYPE_H264_PRED_WEIGHTS    = 0x0205,
+
+       V4L2_CTRL_TYPE_FWHT_PARAMS          = 0x0220,
+
+       V4L2_CTRL_TYPE_VP8_FRAME            = 0x0240,
+
+       V4L2_CTRL_TYPE_MPEG2_QUANTISATION   = 0x0250,
+       V4L2_CTRL_TYPE_MPEG2_SEQUENCE       = 0x0251,
+       V4L2_CTRL_TYPE_MPEG2_PICTURE        = 0x0252,
+
+       V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR       = 0x0260,
+       V4L2_CTRL_TYPE_VP9_FRAME                = 0x0261,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
@@ -2216,6 +2237,7 @@ struct v4l2_mpeg_vbi_fmt_ivtv {
  *                     this plane will be used
  * @bytesperline:      distance in bytes between the leftmost pixels in two
  *                     adjacent lines
+ * @reserved:          drivers and applications must zero this array
  */
 struct v4l2_plane_pix_format {
        __u32           sizeimage;
@@ -2234,8 +2256,10 @@ struct v4l2_plane_pix_format {
  * @num_planes:                number of planes for this format
  * @flags:             format flags (V4L2_PIX_FMT_FLAG_*)
  * @ycbcr_enc:         enum v4l2_ycbcr_encoding, Y'CbCr encoding
+ * @hsv_enc:           enum v4l2_hsv_encoding, HSV encoding
  * @quantization:      enum v4l2_quantization, colorspace quantization
  * @xfer_func:         enum v4l2_xfer_func, colorspace transfer function
+ * @reserved:          drivers and applications must zero this array
  */
 struct v4l2_pix_format_mplane {
        __u32                           width;
@@ -2260,6 +2284,7 @@ struct v4l2_pix_format_mplane {
  * struct v4l2_sdr_format - SDR format definition
  * @pixelformat:       little endian four character code (fourcc)
  * @buffersize:                maximum size in bytes required for data
+ * @reserved:          drivers and applications must zero this array
  */
 struct v4l2_sdr_format {
        __u32                           pixelformat;
@@ -2286,6 +2311,8 @@ struct v4l2_meta_format {
  * @vbi:       raw VBI capture or output parameters
  * @sliced:    sliced VBI capture or output parameters
  * @raw_data:  placeholder for future extensions and custom formats
+ * @fmt:       union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr, @meta
+ *             and @raw_data
  */
 struct v4l2_format {
        __u32    type;
@@ -2387,11 +2414,7 @@ struct v4l2_event {
        } u;
        __u32                           pending;
        __u32                           sequence;
-#ifdef __KERNEL__
-       struct __kernel_timespec        timestamp;
-#else
        struct timespec                 timestamp;
-#endif
        __u32                           id;
        __u32                           reserved[8];
 };
@@ -2578,4 +2601,8 @@ struct v4l2_create_buffers {
 
 #define BASE_VIDIOC_PRIVATE    192             /* 192-255 are private */
 
-#endif /* _UAPI__LINUX_VIDEODEV2_H */
+/* Deprecated definitions kept for backwards compatibility */
+#define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
+#define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
+
+#endif /* __LINUX_VIDEODEV2_H */