v4l2codecs: Sync kernel headers against 5.16.0
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 21 Jan 2022 19:13:39 +0000 (14:13 -0500)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 21 Jan 2022 19:32:30 +0000 (19:32 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/965>

subprojects/gst-plugins-bad/sys/v4l2codecs/linux/v4l2-controls.h
subprojects/gst-plugins-bad/sys/v4l2codecs/linux/videodev2.h

index 091b933..8fd9a21 100644 (file)
@@ -127,6 +127,7 @@ enum v4l2_colorfx {
        V4L2_COLORFX_SOLARIZATION               = 13,
        V4L2_COLORFX_ANTIQUE                    = 14,
        V4L2_COLORFX_SET_CBCR                   = 15,
+       V4L2_COLORFX_SET_RGB                    = 16,
 };
 #define V4L2_CID_AUTOBRIGHTNESS                        (V4L2_CID_BASE+32)
 #define V4L2_CID_BAND_STOP_FILTER              (V4L2_CID_BASE+33)
@@ -144,9 +145,10 @@ enum v4l2_colorfx {
 
 #define V4L2_CID_ALPHA_COMPONENT               (V4L2_CID_BASE+41)
 #define V4L2_CID_COLORFX_CBCR                  (V4L2_CID_BASE+42)
+#define V4L2_CID_COLORFX_RGB                   (V4L2_CID_BASE+43)
 
 /* last CID + 1 */
-#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43)
+#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+44)
 
 /* USER-class private control IDs */
 
@@ -210,6 +212,11 @@ enum v4l2_colorfx {
  * We reserve 128 controls for this driver.
  */
 #define V4L2_CID_USER_CCS_BASE                 (V4L2_CID_USER_BASE + 0x10f0)
+/*
+ * The base for Allegro driver controls.
+ * We reserve 16 controls for this driver.
+ */
+#define V4L2_CID_USER_ALLEGRO_BASE             (V4L2_CID_USER_BASE + 0x1170)
 
 /* MPEG-class control IDs */
 /* The MPEG controls are applicable to all codec controls
@@ -1115,6 +1122,7 @@ enum v4l2_jpeg_chroma_subsampling {
 #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)
+#define V4L2_CID_NOTIFY_GAINS                  (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 9)
 
 
 /* Image processing controls */
@@ -2009,23 +2017,21 @@ struct v4l2_ctrl_hdr10_mastering_display {
 
 /* Stateless VP9 controls */
 
-/**
- */
 #define V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED        0x1
 #define        V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE  0x2
 
 /**
  * struct v4l2_vp9_loop_filter - VP9 loop filter parameters
  *
- * @ref_deltas: contains the adjustment needed for the filter level based on the chosen
- *     reference frame. If this syntax element is not present in the bitstream, users
- *     should pass its last value.
- * @mode_deltas: contains the adjustment needed for the filter level based on the chosen mode.
- *     If this syntax element is not present in the bitstream, users
- *     should pass its last value.
- * @level: indicates the loop filter strength
- * @sharpness: indicates the sharpness level
- * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_* flags
+ * @ref_deltas: contains the adjustment needed for the filter level based on the
+ * chosen reference frame. If this syntax element is not present in the bitstream,
+ * users should pass its last value.
+ * @mode_deltas: contains the adjustment needed for the filter level based on the
+ * chosen mode.        If this syntax element is not present in the bitstream, users should
+ * pass its last value.
+ * @level: indicates the loop filter strength.
+ * @sharpness: indicates the sharpness level.
+ * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_{} flags.
  * @reserved: padding field. Should be zeroed by applications.
  *
  * This structure contains all loop filter related parameters. See sections
@@ -2043,10 +2049,10 @@ struct v4l2_vp9_loop_filter {
 /**
  * struct v4l2_vp9_quantization - VP9 quantization parameters
  *
- * @base_q_idx: indicates the base frame qindex
- * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx
- * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx
- * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx
+ * @base_q_idx: indicates the base frame qindex.
+ * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx.
+ * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx.
+ * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx.
  * @reserved: padding field. Should be zeroed by applications.
  *
  * Encodes the quantization parameters. See section '7.2.9 Quantization params
@@ -2078,19 +2084,19 @@ struct v4l2_vp9_quantization {
 /**
  * struct v4l2_vp9_segmentation - VP9 segmentation parameters
  *
- * @feature_data: data attached to each feature. Data entry is only valid if the feature is enabled.
- * The array shall be indexed with segment number as the first dimension (0..7) and one of
- * V4L2_VP9_SEG_* as the second dimension.
- * @feature_enabled: bitmask defining which features are enabled in each segment. The value for
- * each segment is a combination of V4L2_VP9_SEGMENT_FEATURE_ENABLED(id) values where id is one
- * of V4L2_VP9_SEG_*
- * @tree_probs: specifies the probability values to be used when
- *     decoding a Segment-ID. See '5.15. Segmentation map' section of the VP9 specification
- *     for more details.
+ * @feature_data: data attached to each feature. Data entry is only valid if
+ * the feature is enabled. The array shall be indexed with segment number as
+ * the first dimension (0..7) and one of V4L2_VP9_SEG_{} as the second dimension.
+ * @feature_enabled: bitmask defining which features are enabled in each segment.
+ * The value for each segment is a combination of V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)
+ * values where id is one of V4L2_VP9_SEG_LVL_{}.
+ * @tree_probs: specifies the probability values to be used when decoding a
+ * Segment-ID. See '5.15. Segmentation map' section of the VP9 specification
+ * for more details.
  * @pred_probs: specifies the probability values to be used when decoding a
- *     Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section of :ref:`vp9`
- *     for more details.
- * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_* flags
+ * Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section of :ref:`vp9`
+ * for more details.
+ * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_{} flags.
  * @reserved: padding field. Should be zeroed by applications.
  *
  * Encodes the quantization parameters. See section '7.2.10 Segmentation params syntax' of
@@ -2140,20 +2146,20 @@ struct v4l2_vp9_segmentation {
 /**
  * struct v4l2_ctrl_vp9_frame - VP9 frame decoding control
  *
- * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more details
- * @quant: quantization parameters. See &v4l2_vp9_quantization for more details
- * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more details
- * @flags: combination of V4L2_VP9_FRAME_FLAG_* flags
- * @compressed_header_size: compressed header size in bytes
- * @uncompressed_header_size: uncompressed header size in bytes
- * @frame_width_minus_1: add 1 to it and you'll get the frame width expressed in pixels
- * @frame_height_minus_1: add 1 to it and you'll get the frame height expressed in pixels
+ * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more details.
+ * @quant: quantization parameters. See &v4l2_vp9_quantization for more details.
+ * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more details.
+ * @flags: combination of V4L2_VP9_FRAME_FLAG_{} flags.
+ * @compressed_header_size: compressed header size in bytes.
+ * @uncompressed_header_size: uncompressed header size in bytes.
+ * @frame_width_minus_1: add 1 to it and you'll get the frame width expressed in pixels.
+ * @frame_height_minus_1: add 1 to it and you'll get the frame height expressed in pixels.
  * @render_width_minus_1: add 1 to it and you'll get the expected render width expressed in
- *     pixels. This is not used during the decoding process but might be used by HW scalers
- *     to prepare a frame that's ready for scanout
+ * pixels. This is not used during the decoding process but might be used by HW scalers
+ * to prepare a frame that's ready for scanout.
  * @render_height_minus_1: add 1 to it and you'll get the expected render height expressed in
- *     pixels. This is not used during the decoding process but might be used by HW scalers
- *     to prepare a frame that's ready for scanout
+ * pixels. This is not used during the decoding process but might be used by HW scalers
+ * to prepare a frame that's ready for scanout.
  * @last_frame_ts: "last" reference buffer timestamp.
  * The timestamp refers to the timestamp field in struct v4l2_buffer.
  * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
@@ -2164,21 +2170,21 @@ struct v4l2_vp9_segmentation {
  * The timestamp refers to the timestamp field in struct v4l2_buffer.
  * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64.
  * @ref_frame_sign_bias: a bitfield specifying whether the sign bias is set for a given
- *     reference frame. Either of V4L2_VP9_SIGN_BIAS_*.
+ * reference frame. Either of V4L2_VP9_SIGN_BIAS_{}.
  * @reset_frame_context: specifies whether the frame context should be reset to default values.
- *     Either of V4L2_VP9_RESET_FRAME_CTX_*.
- * @frame_context_idx: frame context that should be used/updated
- * @profile: VP9 profile. Can be 0, 1, 2 or 3
+ * Either of V4L2_VP9_RESET_FRAME_CTX_{}.
+ * @frame_context_idx: frame context that should be used/updated.
+ * @profile: VP9 profile. Can be 0, 1, 2 or 3.
  * @bit_depth: bits per components. Can be 8, 10 or 12. Note that not all profiles support
- *     10 and/or 12 bits depths
+ * 10 and/or 12 bits depths.
  * @interpolation_filter: specifies the filter selection used for performing inter prediction.
- *     Either of V4L2_VP9_INTERP_FILTER_*
+ * Set to one of V4L2_VP9_INTERP_FILTER_{}.
  * @tile_cols_log2: specifies the base 2 logarithm of the width of each tile (where the width
- *     is measured in units of 8x8 blocks). Shall be less than or equal to 6
+ * is measured in units of 8x8 blocks). Shall be less than or equal to 6.
  * @tile_rows_log2: specifies the base 2 logarithm of the height of each tile (where the height
- *     is measured in units of 8x8 blocks)
- * @reference_mode: specifies the type of inter prediction to be used. See
- *     Either of V4L2_VP9_REFERENCE_MODE_*
+ * is measured in units of 8x8 blocks).
+ * @reference_mode: specifies the type of inter prediction to be used.
+ * Set to one of V4L2_VP9_REFERENCE_MODE_{}.
  * @reserved: padding field. Should be zeroed by applications.
  */
 struct v4l2_ctrl_vp9_frame {
@@ -2211,15 +2217,15 @@ struct v4l2_ctrl_vp9_frame {
 
 /**
  * struct v4l2_vp9_mv_probs - VP9 Motion vector probability updates
- * @joint: motion vector joint probability updates
- * @sign: motion vector sign probability updates
- * @classes: motion vector class probability updates
- * @class0_bit: motion vector class0 bit probability updates
- * @bits: motion vector bits probability updates
- * @class0_fr: motion vector class0 fractional bit probability updates
- * @fr: motion vector fractional bit probability updates
- * @class0_hp: motion vector class0 high precision fractional bit probability updates
- * @hp: motion vector high precision fractional bit probability updates
+ * @joint: motion vector joint probability updates.
+ * @sign: motion vector sign probability updates.
+ * @classes: motion vector class probability updates.
+ * @class0_bit: motion vector class0 bit probability updates.
+ * @bits: motion vector bits probability updates.
+ * @class0_fr: motion vector class0 fractional bit probability updates.
+ * @fr: motion vector fractional bit probability updates.
+ * @class0_hp: motion vector class0 high precision fractional bit probability updates.
+ * @hp: motion vector high precision fractional bit probability updates.
  *
  * This structure contains new values of motion vector probabilities.
  * A value of zero in an array element means there is no update of the relevant probability.
@@ -2247,22 +2253,22 @@ struct v4l2_vp9_mv_probs {
 
 /**
  * struct v4l2_ctrl_vp9_compressed_hdr - VP9 probability updates control
- * @tx_mode: specifies the TX mode. Either of V4L2_VP9_TX_MODE_*.
- * @tx8: TX 8x8 probability updates
- * @tx16: TX 16x16 probability updates
- * @tx32: TX 32x32 probability updates
- * @coef: coefficient probability updates
- * @skip: skip probability updates
- * @inter_mode: inter mode probability updates
- * @interp_filter: interpolation filter probability updates
- * @is_inter: is inter-block probability updates
- * @comp_mode: compound prediction mode probability updates
- * @single_ref: single ref probability updates
- * @comp_ref: compound ref probability updates
- * @y_mode: Y prediction mode probability updates
- * @uv_mode: UV prediction mode probability updates
- * @partition: partition probability updates
- * @mv: motion vector probability updates
+ * @tx_mode: specifies the TX mode. Set to one of V4L2_VP9_TX_MODE_{}.
+ * @tx8: TX 8x8 probability updates.
+ * @tx16: TX 16x16 probability updates.
+ * @tx32: TX 32x32 probability updates.
+ * @coef: coefficient probability updates.
+ * @skip: skip probability updates.
+ * @inter_mode: inter mode probability updates.
+ * @interp_filter: interpolation filter probability updates.
+ * @is_inter: is inter-block probability updates.
+ * @comp_mode: compound prediction mode probability updates.
+ * @single_ref: single ref probability updates.
+ * @comp_ref: compound ref probability updates.
+ * @y_mode: Y prediction mode probability updates.
+ * @uv_mode: UV prediction mode probability updates.
+ * @partition: partition probability updates.
+ * @mv: motion vector probability updates.
  *
  * This structure holds the probabilities update as parsed in the compressed
  * header (Spec 6.3). These values represent the value of probability update after
index 2ee05f6..2ecc8cf 100644 (file)
@@ -509,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 */
@@ -518,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     */
@@ -540,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     */
@@ -584,6 +580,7 @@ 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  */
@@ -598,16 +595,12 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
 #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
 #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
-#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
-#define V4L2_PIX_FMT_NV12_4L4 v4l2_fourcc('V', 'T', '1', '2') /*  8  YUV 4:2:0 4x4 macroblocks */
 
 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
 #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     */
@@ -625,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.. */
@@ -732,8 +734,8 @@ 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 */
 
@@ -935,9 +937,12 @@ struct v4l2_requestbuffers {
        __u32                   type;           /* enum v4l2_buf_type */
        __u32                   memory;         /* enum v4l2_memory */
        __u32                   capabilities;
-       __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)
@@ -959,8 +964,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
@@ -1002,10 +1009,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.
@@ -1038,7 +1049,7 @@ struct v4l2_buffer {
 
 /**
  * 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.
@@ -1098,6 +1109,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
@@ -1715,6 +1727,7 @@ struct v4l2_ext_control {
                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;
@@ -1737,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)
@@ -1763,6 +1778,9 @@ enum v4l2_ctrl_type {
        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,
@@ -1774,6 +1792,10 @@ enum v4l2_ctrl_type {
 
        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,
 };
@@ -2213,6 +2235,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;
@@ -2231,8 +2254,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;
@@ -2257,6 +2282,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;
@@ -2283,6 +2309,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;
@@ -2451,6 +2479,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 {
@@ -2459,7 +2490,8 @@ struct v4l2_create_buffers {
        __u32                   memory;
        struct v4l2_format      format;
        __u32                   capabilities;
-       __u32                   reserved[7];
+       __u32                   flags;
+       __u32                   reserved[6];
 };
 
 /*
@@ -2567,4 +2599,8 @@ struct v4l2_create_buffers {
 
 #define BASE_VIDIOC_PRIVATE    192             /* 192-255 are private */
 
+/* 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 */