hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/include/uapi/linux/videodev2.h
....@@ -80,7 +80,7 @@
8080 /* Four-character-code (FOURCC) */
8181 #define v4l2_fourcc(a, b, c, d)\
8282 ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24))
83
-#define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
83
+#define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1U << 31))
8484
8585 /*
8686 * E N U M S
....@@ -130,6 +130,13 @@
130130 ((field) == V4L2_FIELD_BOTTOM ||\
131131 (field) == V4L2_FIELD_TOP ||\
132132 (field) == V4L2_FIELD_ALTERNATE)
133
+#define V4L2_FIELD_IS_INTERLACED(field) \
134
+ ((field) == V4L2_FIELD_INTERLACED ||\
135
+ (field) == V4L2_FIELD_INTERLACED_TB ||\
136
+ (field) == V4L2_FIELD_INTERLACED_BT)
137
+#define V4L2_FIELD_IS_SEQUENTIAL(field) \
138
+ ((field) == V4L2_FIELD_SEQ_TB ||\
139
+ (field) == V4L2_FIELD_SEQ_BT)
133140
134141 enum v4l2_buf_type {
135142 V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
....@@ -163,6 +170,8 @@
163170 || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT \
164171 || (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
165172 || (type) == V4L2_BUF_TYPE_META_OUTPUT)
173
+
174
+#define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
166175
167176 enum v4l2_tuner_type {
168177 V4L2_TUNER_RADIO = 1,
....@@ -414,6 +423,11 @@
414423 __u32 denominator;
415424 };
416425
426
+struct v4l2_area {
427
+ __u32 width;
428
+ __u32 height;
429
+};
430
+
417431 /**
418432 * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
419433 *
....@@ -474,6 +488,8 @@
474488
475489 #define V4L2_CAP_TOUCH 0x10000000 /* Is a touch device */
476490
491
+#define V4L2_CAP_IO_MC 0x20000000 /* Is input/output controlled by the media controller */
492
+
477493 #define V4L2_CAP_DEVICE_CAPS 0x80000000 /* sets device capabilities field */
478494
479495 /*
....@@ -506,9 +522,27 @@
506522 #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
507523 #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */
508524 #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */
525
+#define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2') /* 16 rrrrgggg bbbbaaaa */
526
+#define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */
527
+#define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */
528
+#define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */
529
+
530
+/*
531
+ * Originally this had 'BA12' as fourcc, but this clashed with the older
532
+ * V4L2_PIX_FMT_SGRBG12 which inexplicably used that same fourcc.
533
+ * So use 'GA12' instead for V4L2_PIX_FMT_BGRA444.
534
+ */
535
+#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */
536
+#define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */
509537 #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
510538 #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */
511539 #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */
540
+#define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5') /* 16 RGBA-5-5-5-1 */
541
+#define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5') /* 16 RGBX-5-5-5-1 */
542
+#define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5') /* 16 ABGR-1-5-5-5 */
543
+#define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5') /* 16 XBGR-1-5-5-5 */
544
+#define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5') /* 16 BGRA-5-5-5-1 */
545
+#define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5') /* 16 BGRX-5-5-5-1 */
512546 #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */
513547 #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */
514548 #define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */
....@@ -520,7 +554,11 @@
520554 #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */
521555 #define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') /* 32 BGRA-8-8-8-8 */
522556 #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') /* 32 BGRX-8-8-8-8 */
557
+#define V4L2_PIX_FMT_BGRA32 v4l2_fourcc('R', 'A', '2', '4') /* 32 ABGR-8-8-8-8 */
558
+#define V4L2_PIX_FMT_BGRX32 v4l2_fourcc('R', 'X', '2', '4') /* 32 XBGR-8-8-8-8 */
523559 #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */
560
+#define V4L2_PIX_FMT_RGBA32 v4l2_fourcc('A', 'B', '2', '4') /* 32 RGBA-8-8-8-8 */
561
+#define V4L2_PIX_FMT_RGBX32 v4l2_fourcc('X', 'B', '2', '4') /* 32 RGBX-8-8-8-8 */
524562 #define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */
525563 #define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */
526564
....@@ -530,6 +568,7 @@
530568 #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
531569 #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
532570 #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */
571
+#define V4L2_PIX_FMT_Y14 v4l2_fourcc('Y', '1', '4', ' ') /* 14 Greyscale */
533572 #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
534573 #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */
535574
....@@ -554,6 +593,10 @@
554593 #define V4L2_PIX_FMT_YUV555 v4l2_fourcc('Y', 'U', 'V', 'O') /* 16 YUV-5-5-5 */
555594 #define V4L2_PIX_FMT_YUV565 v4l2_fourcc('Y', 'U', 'V', 'P') /* 16 YUV-5-6-5 */
556595 #define V4L2_PIX_FMT_YUV32 v4l2_fourcc('Y', 'U', 'V', '4') /* 32 YUV-8-8-8-8 */
596
+#define V4L2_PIX_FMT_AYUV32 v4l2_fourcc('A', 'Y', 'U', 'V') /* 32 AYUV-8-8-8-8 */
597
+#define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V') /* 32 XYUV-8-8-8-8 */
598
+#define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A') /* 32 VUYA-8-8-8-8 */
599
+#define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X') /* 32 VUYX-8-8-8-8 */
557600 #define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
558601 #define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
559602 #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
....@@ -565,14 +608,6 @@
565608 #define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
566609 #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
567610 #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
568
-
569
-/* NV12_512 8-bit Y/CbCr 4:2:0 */
570
-#define V4L2_PIX_FMT_NV12_512 v4l2_fourcc('Q', '5', '1', '2')
571
-
572
-/* UBWC 8-bit Y/CbCr 4:2:0 */
573
-#define V4L2_PIX_FMT_NV12_UBWC v4l2_fourcc('Q', '1', '2', '8')
574
-/* UBWC 10-bit Y/CbCr 4:2:0 */
575
-#define V4L2_PIX_FMT_NV12_TP10_UBWC v4l2_fourcc('Q', '1', '2', 'A')
576611
577612 /* two non contiguous planes - one Y, one Cr + Cb interleaved */
578613 #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
....@@ -631,6 +666,10 @@
631666 #define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
632667 #define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
633668 #define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
669
+#define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14 BGBG.. GRGR.. */
670
+#define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14 GBGB.. RGRG.. */
671
+#define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4') /* 14 GRGR.. BGBG.. */
672
+#define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14 RGRG.. GBGB.. */
634673 /* 14bit raw bayer packed, 7 bytes for every 4 pixels */
635674 #define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
636675 #define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
....@@ -657,6 +696,7 @@
657696 #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3') /* H263 */
658697 #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES */
659698 #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES */
699
+#define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S') /* MPEG-2 parsed slice data */
660700 #define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
661701 #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */
662702 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
....@@ -665,6 +705,7 @@
665705 #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */
666706 #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
667707 #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
708
+#define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
668709
669710 /* Vendor-specific formats */
670711 #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
....@@ -698,19 +739,14 @@
698739 #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
699740 #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */
700741 #define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
701
-#define V4L2_PIX_FMT_FBC2 v4l2_fourcc('F', 'B', 'C', '2') /* Rockchip yuv422sp frame buffer compression encoder */
702
-#define V4L2_PIX_FMT_FBC0 v4l2_fourcc('F', 'B', 'C', '0') /* Rockchip yuv420sp frame buffer compression encoder */
703
-#define V4L2_PIX_FMT_FBCG v4l2_fourcc('F', 'B', 'C', 'G')
704
-#define V4l2_PIX_FMT_EBD8 v4l2_fourcc('E', 'B', 'D', '8') /* embedded data 8-bit */
705
-#define V4l2_PIX_FMT_SPD16 v4l2_fourcc('S', 'P', 'D', '6') /* shield pix data 16-bit */
742
+#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */
743
+#define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
706744
707745 /* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
708746 #define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
709747 #define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g') /* IPU3 packed 10-bit GBRG bayer */
710748 #define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
711749 #define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */
712
-#define V4L2_PIX_FMT_SDE_Y_CBCR_H2V2_P010_VENUS \
713
- v4l2_fourcc('Q', 'P', '1', '0') /* Y/CbCr 4:2:0 P10 Venus*/
714750
715751 /* SDR formats - used only for Software Defined Radio devices */
716752 #define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
....@@ -732,20 +768,15 @@
732768 #define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H') /* R-Car VSP1 1-D Histogram */
733769 #define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
734770 #define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
735
-
736
-/* Vendor specific - used for Rockchip ISP1 camera sub-system */
737
-#define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 params */
738
-#define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A statistics */
739
-#define V4L2_META_FMT_RK_ISP1_STAT_LUMA v4l2_fourcc('R', 'K', '1', 'L') /* Rockchip ISP1 luma statistics */
740
-
741
-#define V4L2_META_FMT_RK_ISPP_PARAMS v4l2_fourcc('R', 'K', 'P', 'P') /* Rockchip ISPP params */
742
-#define V4L2_META_FMT_RK_ISPP_STAT v4l2_fourcc('R', 'K', 'P', 'S') /* Rockchip ISPP statistics */
771
+#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
772
+#define V4L2_META_FMT_VIVID v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
743773
744774 /* priv field value to indicates that subsequent fields are valid. */
745775 #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
746776
747777 /* Flags */
748778 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
779
+#define V4L2_PIX_FMT_FLAG_SET_CSC 0x00000002
749780
750781 /*
751782 * F O R M A T E N U M E R A T I O N
....@@ -756,11 +787,20 @@
756787 __u32 flags;
757788 __u8 description[32]; /* Description string */
758789 __u32 pixelformat; /* Format fourcc */
759
- __u32 reserved[4];
790
+ __u32 mbus_code; /* Media bus code */
791
+ __u32 reserved[3];
760792 };
761793
762
-#define V4L2_FMT_FLAG_COMPRESSED 0x0001
763
-#define V4L2_FMT_FLAG_EMULATED 0x0002
794
+#define V4L2_FMT_FLAG_COMPRESSED 0x0001
795
+#define V4L2_FMT_FLAG_EMULATED 0x0002
796
+#define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM 0x0004
797
+#define V4L2_FMT_FLAG_DYN_RESOLUTION 0x0008
798
+#define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL 0x0010
799
+#define V4L2_FMT_FLAG_CSC_COLORSPACE 0x0020
800
+#define V4L2_FMT_FLAG_CSC_XFER_FUNC 0x0040
801
+#define V4L2_FMT_FLAG_CSC_YCBCR_ENC 0x0080
802
+#define V4L2_FMT_FLAG_CSC_HSV_ENC V4L2_FMT_FLAG_CSC_YCBCR_ENC
803
+#define V4L2_FMT_FLAG_CSC_QUANTIZATION 0x0100
764804
765805 /* Frame Size and frame rate enumeration */
766806 /*
....@@ -889,12 +929,41 @@
889929 /*
890930 * M E M O R Y - M A P P I N G B U F F E R S
891931 */
932
+
933
+#ifdef __KERNEL__
934
+/*
935
+ * This corresponds to the user space version of timeval
936
+ * for 64-bit time_t. sparc64 is different from everyone
937
+ * else, using the microseconds in the wrong half of the
938
+ * second 64-bit word.
939
+ */
940
+struct __kernel_v4l2_timeval {
941
+ long long tv_sec;
942
+#if defined(__sparc__) && defined(__arch64__)
943
+ int tv_usec;
944
+ int __pad;
945
+#else
946
+ long long tv_usec;
947
+#endif
948
+};
949
+#endif
950
+
892951 struct v4l2_requestbuffers {
893952 __u32 count;
894953 __u32 type; /* enum v4l2_buf_type */
895954 __u32 memory; /* enum v4l2_memory */
896
- __u32 reserved[2];
955
+ __u32 capabilities;
956
+ __u32 reserved[1];
897957 };
958
+
959
+/* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
960
+#define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
961
+#define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
962
+#define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
963
+#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
964
+#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
965
+#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5)
966
+#define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS (1 << 6)
898967
899968 /**
900969 * struct v4l2_plane - plane info for multi-planar buffers
....@@ -910,7 +979,9 @@
910979 * descriptor associated with this plane
911980 * @data_offset: offset in the plane to the start of data; usually 0,
912981 * unless there is a header in front of the data
913
- *
982
+ * @reserved: few userspace clients and drivers use reserved fields
983
+ * and it is up to them how these fields are used. v4l2
984
+ * simply copy reserved fields between them.
914985 * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
915986 * with two planes can have one plane for Y, and another for interleaved CbCr
916987 * components. Each plane can reside in a separate memory buffer, or even in
....@@ -925,6 +996,7 @@
925996 __s32 fd;
926997 } m;
927998 __u32 data_offset;
999
+ /* reserved fields used by few userspace clients and drivers */
9281000 __u32 reserved[11];
9291001 };
9301002
....@@ -954,6 +1026,7 @@
9541026 * @length: size in bytes of the buffer (NOT its payload) for single-plane
9551027 * buffers (when type != *_MPLANE); number of elements in the
9561028 * planes array for multi-plane buffers
1029
+ * @request_fd: fd of the request that this buffer should use
9571030 *
9581031 * Contains data exchanged by application and driver using one of the Streaming
9591032 * I/O methods.
....@@ -964,7 +1037,11 @@
9641037 __u32 bytesused;
9651038 __u32 flags;
9661039 __u32 field;
1040
+#ifdef __KERNEL__
1041
+ struct __kernel_v4l2_timeval timestamp;
1042
+#else
9671043 struct timeval timestamp;
1044
+#endif
9681045 struct v4l2_timecode timecode;
9691046 __u32 sequence;
9701047
....@@ -978,8 +1055,25 @@
9781055 } m;
9791056 __u32 length;
9801057 __u32 reserved2;
981
- __u32 reserved;
1058
+ union {
1059
+ __s32 request_fd;
1060
+ __u32 reserved;
1061
+ };
9821062 };
1063
+
1064
+#ifndef __KERNEL__
1065
+/**
1066
+ * v4l2_timeval_to_ns - Convert timeval to nanoseconds
1067
+ * @ts: pointer to the timeval variable to be converted
1068
+ *
1069
+ * Returns the scalar nanosecond representation of the timeval
1070
+ * parameter.
1071
+ */
1072
+static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
1073
+{
1074
+ return (__u64)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000;
1075
+}
1076
+#endif
9831077
9841078 /* Flags for 'flags' field */
9851079 /* Buffer is mapped (flag) */
....@@ -996,8 +1090,12 @@
9961090 #define V4L2_BUF_FLAG_BFRAME 0x00000020
9971091 /* Buffer is ready, but the data contained within is corrupted. */
9981092 #define V4L2_BUF_FLAG_ERROR 0x00000040
1093
+/* Buffer is added to an unqueued request */
1094
+#define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
9991095 /* timecode field is valid */
10001096 #define V4L2_BUF_FLAG_TIMECODE 0x00000100
1097
+/* Don't return the capture buffer until OUTPUT timestamp changes */
1098
+#define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF 0x00000200
10011099 /* Buffer is prepared for queuing */
10021100 #define V4L2_BUF_FLAG_PREPARED 0x00000400
10031101 /* Cache handling flags */
....@@ -1014,6 +1112,8 @@
10141112 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000
10151113 /* mem2mem encoder/decoder */
10161114 #define V4L2_BUF_FLAG_LAST 0x00100000
1115
+/* request_fd is valid */
1116
+#define V4L2_BUF_FLAG_REQUEST_FD 0x00800000
10171117
10181118 /**
10191119 * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
....@@ -1163,6 +1263,10 @@
11631263
11641264 typedef __u64 v4l2_std_id;
11651265
1266
+/*
1267
+ * Attention: Keep the V4L2_STD_* bit definitions in sync with
1268
+ * include/dt-bindings/display/sdtv-standards.h SDTV_STD_* bit definitions.
1269
+ */
11661270 /* one bit for each */
11671271 #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
11681272 #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
....@@ -1437,6 +1541,13 @@
14371541 * InfoFrame).
14381542 */
14391543 #define V4L2_DV_FL_HAS_HDMI_VIC (1 << 8)
1544
+/*
1545
+ * CEA-861 specific: only valid for video receivers.
1546
+ * If set, then HW can detect the difference between regular FPS and
1547
+ * 1000/1001 FPS. Note: This flag is only valid for HDMI VIC codes with
1548
+ * the V4L2_DV_FL_CAN_REDUCE_FPS flag set.
1549
+ */
1550
+#define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS (1 << 9)
14401551
14411552 /* A few useful defines to calculate the total blanking and frame sizes */
14421553 #define V4L2_DV_BT_BLANKING_WIDTH(bt) \
....@@ -1445,7 +1556,8 @@
14451556 ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
14461557 #define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
14471558 ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
1448
- (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
1559
+ ((bt)->interlaced ? \
1560
+ ((bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) : 0))
14491561 #define V4L2_DV_BT_FRAME_HEIGHT(bt) \
14501562 ((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
14511563
....@@ -1536,7 +1648,7 @@
15361648 __u8 name[32]; /* Label */
15371649 __u32 type; /* Type of input */
15381650 __u32 audioset; /* Associated audios (bitfield) */
1539
- __u32 tuner; /* enum v4l2_tuner_type */
1651
+ __u32 tuner; /* Tuner index */
15401652 v4l2_std_id std;
15411653 __u32 status;
15421654 __u32 capabilities;
....@@ -1623,6 +1735,7 @@
16231735 __u8 __user *p_u8;
16241736 __u16 __user *p_u16;
16251737 __u32 __user *p_u32;
1738
+ struct v4l2_area __user *p_area;
16261739 void __user *ptr;
16271740 };
16281741 } __attribute__ ((packed));
....@@ -1636,7 +1749,8 @@
16361749 };
16371750 __u32 count;
16381751 __u32 error_idx;
1639
- __u32 reserved[2];
1752
+ __s32 request_fd;
1753
+ __u32 reserved[1];
16401754 struct v4l2_ext_control *controls;
16411755 };
16421756
....@@ -1649,6 +1763,7 @@
16491763 #define V4L2_CTRL_MAX_DIMS (4)
16501764 #define V4L2_CTRL_WHICH_CUR_VAL 0
16511765 #define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
1766
+#define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
16521767
16531768 enum v4l2_ctrl_type {
16541769 V4L2_CTRL_TYPE_INTEGER = 1,
....@@ -1666,6 +1781,17 @@
16661781 V4L2_CTRL_TYPE_U8 = 0x0100,
16671782 V4L2_CTRL_TYPE_U16 = 0x0101,
16681783 V4L2_CTRL_TYPE_U32 = 0x0102,
1784
+ V4L2_CTRL_TYPE_AREA = 0x0106,
1785
+
1786
+ V4L2_CTRL_TYPE_HDR10_CLL_INFO = 0x0110,
1787
+ V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY = 0x0111,
1788
+
1789
+ V4L2_CTRL_TYPE_H264_SPS = 0x0200,
1790
+ V4L2_CTRL_TYPE_H264_PPS = 0x0201,
1791
+ V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 0x0202,
1792
+ V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 0x0203,
1793
+ V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 0x0204,
1794
+ V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205,
16691795 };
16701796
16711797 /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
....@@ -1921,6 +2047,7 @@
19212047 #define V4L2_DEC_CMD_STOP (1)
19222048 #define V4L2_DEC_CMD_PAUSE (2)
19232049 #define V4L2_DEC_CMD_RESUME (3)
2050
+#define V4L2_DEC_CMD_FLUSH (4)
19242051
19252052 /* Flags for V4L2_DEC_CMD_START */
19262053 #define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
....@@ -2273,7 +2400,11 @@
22732400 } u;
22742401 __u32 pending;
22752402 __u32 sequence;
2403
+#ifdef __KERNEL__
2404
+ struct __kernel_timespec timestamp;
2405
+#else
22762406 struct timespec timestamp;
2407
+#endif
22772408 __u32 id;
22782409 __u32 reserved[8];
22792410 };
....@@ -2339,6 +2470,7 @@
23392470 * return: number of created buffers
23402471 * @memory: enum v4l2_memory; buffer memory type
23412472 * @format: frame format, for which buffers are requested
2473
+ * @capabilities: capabilities of this buffer type.
23422474 * @reserved: future extensions
23432475 */
23442476 struct v4l2_create_buffers {
....@@ -2346,7 +2478,8 @@
23462478 __u32 count;
23472479 __u32 memory;
23482480 struct v4l2_format format;
2349
- __u32 reserved[8];
2481
+ __u32 capabilities;
2482
+ __u32 reserved[7];
23502483 };
23512484
23522485 /*