]> granicus.if.org Git - strace/commitdiff
v4l2: print known pixel/SDR formats
authorEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 15 Feb 2018 20:16:15 +0000 (21:16 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 2 Mar 2018 16:02:20 +0000 (16:02 +0000)
* xlat/v4l2_pix_fmts.in: New file.
* xlat/v4l2_sdr_fmts.in: Likewise.
* v4l2.c [!v4l2_fourcc_be] (v4l2_fourcc_be): New macro.
(print_pixelformat): Add xlat parameter, print constant name
as a comment if it has been found in xlat.
(print_v4l2_fmtdesc, print_v4l2_frmivalenum): Pass v4l2_pix_fmts
to print_pixelformat.
(print_v4l2_format_fmt) <case V4L2_BUF_TYPE_VIDEO_CAPTURE, case
V4L2_BUF_TYPE_VIDEO_OUTPUT, case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, case V4L2_BUF_TYPE_VBI_CAPTURE,
case V4L2_BUF_TYPE_VBI_OUTPUT>: Pass v4l2_pix_fmts to print_pixelformat.
(print_v4l2_format_fmt) <case V4L2_BUF_TYPE_SDR_OUTPUT, case
V4L2_BUF_TYPE_SDR_CAPTURE>: Pass v4l2_sdr_fmts to print_pixelformat.
* tests/v4l2.c: Test it, update expected output.
* NEWS: Mention it.

NEWS
tests/ioctl_v4l2.c
v4l2.c
xlat/v4l2_pix_fmts.in [new file with mode: 0644]
xlat/v4l2_sdr_fmts.in [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index cd2f1928b0f10ea7cae7d882c8150b119241242a..30f9a58c7d45badf484317d6cc1def6681298c24 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,8 @@ Noteworthy changes in release ?.?? (????-??-??)
   * Updated lists of signal codes.
   * Updated lists of INET_DIAG_BC_*, POLL*, RWF_*, and SCHED_FLAG_* constants.
   * Implemented block/character device number printing in -yy mode.
+  * Known pixel/SDR format names are printed as comments for pixelformat fields
+    in v4l2 structures.
 
 * Bug fixes
   * Fixed build on m68k.
index 4d5745e4035e861c3dc33f2d76bd4acda1c4cb56..8cf22777cb8139a485b37f32931dc62afa141789 100644 (file)
@@ -27,6 +27,7 @@
  */
 
 #include "tests.h"
+#include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/ioctl.h>
         ((unsigned int)(a3) << 24))
 
 static const unsigned int magic = 0xdeadbeef;
+static const unsigned int pf_magic = fourcc('S', '5', '0', '8');
+#if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT
+static const unsigned int sf_magic = fourcc('R', 'U', '1', '2');
+#endif
 
 static void
 init_v4l2_format(struct v4l2_format *const f,
@@ -56,7 +61,10 @@ init_v4l2_format(struct v4l2_format *const f,
        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
                f->fmt.pix.width = 0x657b8160;
                f->fmt.pix.height = 0x951c0047;
-               f->fmt.pix.pixelformat = magic;
+               if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+                       f->fmt.pix.pixelformat = magic;
+               else
+                       f->fmt.pix.pixelformat = pf_magic;
                f->fmt.pix.field = V4L2_FIELD_NONE;
                f->fmt.pix.bytesperline = 0xdf20d185;
                f->fmt.pix.sizeimage = 0x0cf7be41;
@@ -70,7 +78,10 @@ init_v4l2_format(struct v4l2_format *const f,
                f->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
                f->fmt.pix_mp.width = 0x1f3b774b;
                f->fmt.pix_mp.height = 0xab96a8d6;
-               f->fmt.pix_mp.pixelformat = magic;
+               if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+                       f->fmt.pix_mp.pixelformat = magic;
+               else
+                       f->fmt.pix_mp.pixelformat = pf_magic;
                f->fmt.pix_mp.field = V4L2_FIELD_NONE;
                f->fmt.pix_mp.colorspace = V4L2_COLORSPACE_JPEG;
                struct v4l2_plane_pix_format *cur_pix =
@@ -117,7 +128,10 @@ init_v4l2_format(struct v4l2_format *const f,
                f->fmt.vbi.sampling_rate = 0x3d9b5b79;
                f->fmt.vbi.offset = 0x055b3a09;
                f->fmt.vbi.samples_per_line = 0xf176d436;
-               f->fmt.vbi.sample_format = magic;
+               if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
+                       f->fmt.vbi.sample_format = magic;
+               else
+                       f->fmt.vbi.sample_format = pf_magic;
                f->fmt.vbi.start[0] = 0x9858e2eb;
                f->fmt.vbi.start[1] = 0x8a4dc8c1;
                f->fmt.vbi.count[0] = 0x4bcf36a3;
@@ -142,10 +156,12 @@ init_v4l2_format(struct v4l2_format *const f,
 #endif
 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT
        case V4L2_BUF_TYPE_SDR_OUTPUT:
+               f->fmt.sdr.pixelformat = sf_magic;
 #endif
 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE
        case V4L2_BUF_TYPE_SDR_CAPTURE:
-               f->fmt.sdr.pixelformat = magic;
+               if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
+                       f->fmt.sdr.pixelformat = magic;
 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE
                f->fmt.sdr.buffersize = 0x25afabfb;
 #endif
@@ -159,18 +175,30 @@ dprint_ioctl_v4l2(struct v4l2_format *const f,
                  const char *request, const unsigned int buf_type,
                  const char *buf_type_string)
 {
+       int saved_errno;
+
        switch (buf_type) {
        case V4L2_BUF_TYPE_VIDEO_CAPTURE:
        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
+               saved_errno = errno;
                printf("ioctl(-1, %s, {type=%s"
-                      ", fmt.pix={width=%u, height=%u, pixelformat="
-                      "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')"
-                      ", field=V4L2_FIELD_NONE, bytesperline=%u, sizeimage=%u"
-                      ", colorspace=V4L2_COLORSPACE_JPEG}}) = -1 EBADF (%m)\n",
+                      ", fmt.pix={width=%u, height=%u, pixelformat=",
                       request,
                       buf_type_string,
-                      f->fmt.pix.width, f->fmt.pix.height,
-                      cc0(magic), cc1(magic), cc2(magic), cc3(magic),
+                      f->fmt.pix.width, f->fmt.pix.height);
+
+               if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+                       printf("v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')",
+                              cc0(magic), cc1(magic), cc2(magic), cc3(magic));
+               else
+                       printf("v4l2_fourcc('%c', '%c', '%c', '%c') "
+                              "/* V4L2_PIX_FMT_SPCA508 */",
+                              cc0(pf_magic), cc1(pf_magic), cc2(pf_magic),
+                              cc3(pf_magic));
+
+               errno = saved_errno;
+               printf(", field=V4L2_FIELD_NONE, bytesperline=%u, sizeimage=%u"
+                      ", colorspace=V4L2_COLORSPACE_JPEG}}) = -1 EBADF (%m)\n",
                       f->fmt.pix.bytesperline,
                       f->fmt.pix.sizeimage);
                break;
@@ -179,16 +207,25 @@ dprint_ioctl_v4l2(struct v4l2_format *const f,
        case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: {
                unsigned int i;
 
+               saved_errno = errno;
                printf("ioctl(-1, %s"
                       ", {type=%s"
-                      ", fmt.pix_mp={width=%u, height=%u, pixelformat="
-                      "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')"
-                      ", field=V4L2_FIELD_NONE, colorspace="
-                      "V4L2_COLORSPACE_JPEG, plane_fmt=[",
+                      ", fmt.pix_mp={width=%u, height=%u, pixelformat=",
                       request,
                       buf_type_string,
-                      f->fmt.pix_mp.width, f->fmt.pix_mp.height,
-                      cc0(magic), cc1(magic), cc2(magic), cc3(magic));
+                      f->fmt.pix_mp.width, f->fmt.pix_mp.height);
+
+               if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+                       printf("v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')",
+                              cc0(magic), cc1(magic), cc2(magic), cc3(magic));
+               else
+                       printf("v4l2_fourcc('%c', '%c', '%c', '%c') "
+                              "/* V4L2_PIX_FMT_SPCA508 */",
+                              cc0(pf_magic), cc1(pf_magic), cc2(pf_magic),
+                              cc3(pf_magic));
+
+               printf(", field=V4L2_FIELD_NONE, colorspace="
+                      "V4L2_COLORSPACE_JPEG, plane_fmt=[");
                for (i = 0;
                     i < ARRAY_SIZE(f->fmt.pix_mp.plane_fmt);
                     ++i) {
@@ -198,6 +235,7 @@ dprint_ioctl_v4l2(struct v4l2_format *const f,
                        f->fmt.pix_mp.plane_fmt[i].sizeimage,
                        f->fmt.pix_mp.plane_fmt[i].bytesperline);
                }
+               errno = saved_errno;
                printf("], num_planes=%u}}) = -1 EBADF (%m)\n",
                f->fmt.pix_mp.num_planes);
                break;
@@ -238,18 +276,28 @@ dprint_ioctl_v4l2(struct v4l2_format *const f,
                break;
        case V4L2_BUF_TYPE_VBI_CAPTURE:
        case V4L2_BUF_TYPE_VBI_OUTPUT:
+               saved_errno = errno;
                printf("ioctl(-1, %s, {type=%s"
                       ", fmt.vbi={sampling_rate=%u, offset=%u"
-                      ", samples_per_line=%u, sample_format="
-                      "v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')"
-                      ", start=[%u, %u], count=[%u, %u]"
-                      ", flags=V4L2_VBI_INTERLACED}})"
-                      " = -1 EBADF (%m)\n",
+                      ", samples_per_line=%u, sample_format=",
                       request,
                       buf_type_string,
                       f->fmt.vbi.sampling_rate, f->fmt.vbi.offset,
-                      f->fmt.vbi.samples_per_line,
-                      cc0(magic), cc1(magic), cc2(magic), cc3(magic),
+                      f->fmt.vbi.samples_per_line);
+
+               if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
+                       printf("v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')",
+                              cc0(magic), cc1(magic), cc2(magic), cc3(magic));
+               else
+                       printf("v4l2_fourcc('%c', '%c', '%c', '%c') "
+                              "/* V4L2_PIX_FMT_SPCA508 */",
+                              cc0(pf_magic), cc1(pf_magic), cc2(pf_magic),
+                              cc3(pf_magic));
+
+               errno = saved_errno;
+               printf(", start=[%u, %u], count=[%u, %u]"
+                      ", flags=V4L2_VBI_INTERLACED}})"
+                      " = -1 EBADF (%m)\n",
                       f->fmt.vbi.start[0], f->fmt.vbi.start[1],
                       f->fmt.vbi.count[0], f->fmt.vbi.count[1]);
                break;
@@ -289,16 +337,29 @@ dprint_ioctl_v4l2(struct v4l2_format *const f,
 #endif
 #if HAVE_DECL_V4L2_BUF_TYPE_SDR_CAPTURE
        case V4L2_BUF_TYPE_SDR_CAPTURE:
+               saved_errno = errno;
                printf("ioctl(-1, %s, {type=%s"
-                      ", fmt.sdr={pixelformat=v4l2_fourcc('\\x%x', '\\x%x',"
-                      " '\\x%x', '\\x%x')"
+                      ", fmt.sdr={pixelformat=",
+                      request,
+                      buf_type_string);
+
+               if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
+                       printf("v4l2_fourcc('\\x%x', '\\x%x', '\\x%x', '\\x%x')",
+                              cc0(magic), cc1(magic), cc2(magic), cc3(magic));
+# if HAVE_DECL_V4L2_BUF_TYPE_SDR_OUTPUT
+               else
+                       printf("v4l2_fourcc('%c', '%c', '%c', '%c') "
+                              "/* V4L2_SDR_FMT_RU12LE */",
+                              cc0(sf_magic), cc1(sf_magic), cc2(sf_magic),
+                              cc3(sf_magic));
+# endif
+
+               errno = saved_errno;
+               printf(
 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE
                       ", buffersize=%u"
 #endif
-                      "}}) = -1 EBADF (%m)\n",
-                      request,
-                      buf_type_string,
-                      cc0(magic), cc1(magic), cc2(magic), cc3(magic)
+                      "}}) = -1 EBADF (%m)\n"
 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE
                       , f->fmt.sdr.buffersize
 #endif
diff --git a/v4l2.c b/v4l2.c
index 6a89bf416e32df25d6306998722963437856d907..41f62c7f80affb3b5402e07810b963e5000accff 100644 (file)
--- a/v4l2.c
+++ b/v4l2.c
@@ -75,14 +75,22 @@ typedef struct v4l2_standard struct_v4l2_standard;
 #define V4L2_CID_BAND_STOP_FILTER (V4L2_CID_BASE+33)
 #endif
 
+/* v4l2_fourcc_be was added by Linux commit v3.18-rc1~101^2^2~127 */
+#ifndef v4l2_fourcc_be
+# define v4l2_fourcc_be(a, b, c, d) (v4l2_fourcc(a, b, c, d) | (1 << 31))
+#endif
+
 #define FMT_FRACT "%u/%u"
 #define ARGS_FRACT(x) ((x).numerator), ((x).denominator)
 
 #define FMT_RECT "{left=%d, top=%d, width=%u, height=%u}"
 #define ARGS_RECT(x) (x).left, (x).top, (x).width, (x).height
 
+#include "xlat/v4l2_pix_fmts.h"
+#include "xlat/v4l2_sdr_fmts.h"
+
 static void
-print_pixelformat(uint32_t fourcc)
+print_pixelformat(uint32_t fourcc, const struct xlat *xlat)
 {
        unsigned char a[] = {
                (unsigned char) fourcc,
@@ -129,6 +137,13 @@ print_pixelformat(uint32_t fourcc)
                }
        }
        tprints(")");
+
+       if (xlat) {
+               const char *pixfmt_name = xlookup(xlat, fourcc);
+
+               if (pixfmt_name)
+                       tprints_comment(pixfmt_name);
+       }
 }
 
 #include "xlat/v4l2_device_capabilities_flags.h"
@@ -184,7 +199,7 @@ print_v4l2_fmtdesc(struct tcb *const tcp, const kernel_ulong_t arg)
                           "V4L2_FMT_FLAG_???");
                PRINT_FIELD_CSTRING(", ", f, description);
                tprints(", pixelformat=");
-               print_pixelformat(f.pixelformat);
+               print_pixelformat(f.pixelformat, v4l2_pix_fmts);
        }
        tprints("}");
        return RVAL_IOCTL_DECODED;
@@ -214,7 +229,7 @@ print_v4l2_format_fmt(struct tcb *const tcp, const char *prefix,
                tprints(prefix);
                tprintf("fmt.pix={width=%u, height=%u, pixelformat=",
                        f->fmt.pix.width, f->fmt.pix.height);
-               print_pixelformat(f->fmt.pix.pixelformat);
+               print_pixelformat(f->fmt.pix.pixelformat, v4l2_pix_fmts);
                tprints(", field=");
                printxval(v4l2_fields, f->fmt.pix.field, "V4L2_FIELD_???");
                tprintf(", bytesperline=%u, sizeimage=%u, colorspace=",
@@ -231,7 +246,7 @@ print_v4l2_format_fmt(struct tcb *const tcp, const char *prefix,
                tprints(prefix);
                tprintf("fmt.pix_mp={width=%u, height=%u, pixelformat=",
                        f->fmt.pix_mp.width, f->fmt.pix_mp.height);
-               print_pixelformat(f->fmt.pix_mp.pixelformat);
+               print_pixelformat(f->fmt.pix_mp.pixelformat, v4l2_pix_fmts);
                tprints(", field=");
                printxval(v4l2_fields, f->fmt.pix_mp.field, "V4L2_FIELD_???");
                tprints(", colorspace=");
@@ -282,7 +297,7 @@ print_v4l2_format_fmt(struct tcb *const tcp, const char *prefix,
                        "samples_per_line=%u, sample_format=",
                        f->fmt.vbi.sampling_rate, f->fmt.vbi.offset,
                        f->fmt.vbi.samples_per_line);
-               print_pixelformat(f->fmt.vbi.sample_format);
+               print_pixelformat(f->fmt.vbi.sample_format, v4l2_pix_fmts);
                tprintf(", start=[%u, %u], count=[%u, %u], ",
                        f->fmt.vbi.start[0], f->fmt.vbi.start[1],
                        f->fmt.vbi.count[0], f->fmt.vbi.count[1]);
@@ -329,7 +344,7 @@ print_v4l2_format_fmt(struct tcb *const tcp, const char *prefix,
        case V4L2_BUF_TYPE_SDR_CAPTURE:
                tprints(prefix);
                tprints("fmt.sdr={pixelformat=");
-               print_pixelformat(f->fmt.sdr.pixelformat);
+               print_pixelformat(f->fmt.sdr.pixelformat, v4l2_sdr_fmts);
 #ifdef HAVE_STRUCT_V4L2_SDR_FORMAT_BUFFERSIZE
                tprintf(", buffersize=%u",
                        f->fmt.sdr.buffersize);
@@ -873,7 +888,7 @@ print_v4l2_frmsizeenum(struct tcb *const tcp, const kernel_ulong_t arg)
                if (umove_or_printaddr(tcp, arg, &s))
                        return RVAL_IOCTL_DECODED;
                tprintf("{index=%u, pixel_format=", s.index);
-               print_pixelformat(s.pixel_format);
+               print_pixelformat(s.pixel_format, v4l2_pix_fmts);
                return 0;
        }
 
@@ -913,7 +928,7 @@ print_v4l2_frmivalenum(struct tcb *const tcp, const kernel_ulong_t arg)
                if (umove_or_printaddr(tcp, arg, &f))
                        return RVAL_IOCTL_DECODED;
                tprintf("{index=%u, pixel_format=", f.index);
-               print_pixelformat(f.pixel_format);
+               print_pixelformat(f.pixel_format, v4l2_pix_fmts);
                tprintf(", width=%u, height=%u", f.width, f.height);
                return 0;
        }
diff --git a/xlat/v4l2_pix_fmts.in b/xlat/v4l2_pix_fmts.in
new file mode 100644 (file)
index 0000000..1c7e8f6
--- /dev/null
@@ -0,0 +1,153 @@
+V4L2_PIX_FMT_RGB332  v4l2_fourcc('R', 'G', 'B', '1') /*  8  RGB-3-3-2     */
+V4L2_PIX_FMT_RGB444  v4l2_fourcc('R', '4', '4', '4') /* 16  xxxxrrrr ggggbbbb */
+V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16  aaaarrrr ggggbbbb */
+V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16  xxxxrrrr ggggbbbb */
+V4L2_PIX_FMT_RGB555  v4l2_fourcc('R', 'G', 'B', 'O') /* 16  RGB-5-5-5     */
+V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16  ARGB-1-5-5-5  */
+V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16  XRGB-1-5-5-5  */
+V4L2_PIX_FMT_RGB565  v4l2_fourcc('R', 'G', 'B', 'P') /* 16  RGB-5-6-5     */
+V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16  RGB-5-5-5 BE  */
+V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16  ARGB-5-5-5 BE */
+V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16  XRGB-5-5-5 BE */
+V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16  RGB-5-6-5 BE  */
+V4L2_PIX_FMT_BGR666  v4l2_fourcc('B', 'G', 'R', 'H') /* 18  BGR-6-6-6    */
+V4L2_PIX_FMT_BGR24   v4l2_fourcc('B', 'G', 'R', '3') /* 24  BGR-8-8-8     */
+V4L2_PIX_FMT_RGB24   v4l2_fourcc('R', 'G', 'B', '3') /* 24  RGB-8-8-8     */
+V4L2_PIX_FMT_BGR32   v4l2_fourcc('B', 'G', 'R', '4') /* 32  BGR-8-8-8-8   */
+V4L2_PIX_FMT_ABGR32  v4l2_fourcc('A', 'R', '2', '4') /* 32  BGRA-8-8-8-8  */
+V4L2_PIX_FMT_XBGR32  v4l2_fourcc('X', 'R', '2', '4') /* 32  BGRX-8-8-8-8  */
+V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
+V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
+V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
+V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
+V4L2_PIX_FMT_Y4      v4l2_fourcc('Y', '0', '4', ' ') /*  4  Greyscale     */
+V4L2_PIX_FMT_Y6      v4l2_fourcc('Y', '0', '6', ' ') /*  6  Greyscale     */
+V4L2_PIX_FMT_Y10     v4l2_fourcc('Y', '1', '0', ' ') /* 10  Greyscale     */
+V4L2_PIX_FMT_Y12     v4l2_fourcc('Y', '1', '2', ' ') /* 12  Greyscale     */
+V4L2_PIX_FMT_Y16     v4l2_fourcc('Y', '1', '6', ' ') /* 16  Greyscale     */
+V4L2_PIX_FMT_Y16_BE  v4l2_fourcc_be('Y', '1', '6', ' ') /* 16  Greyscale BE  */
+V4L2_PIX_FMT_Y10BPACK    v4l2_fourcc('Y', '1', '0', 'B') /* 10  Greyscale bit-packed */
+V4L2_PIX_FMT_PAL8    v4l2_fourcc('P', 'A', 'L', '8') /*  8  8-bit palette */
+V4L2_PIX_FMT_UV8     v4l2_fourcc('U', 'V', '8', ' ') /*  8  UV 4:4 */
+V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
+V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
+V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
+V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
+V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
+V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
+V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
+V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
+V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
+V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
+V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
+V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
+V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
+V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
+V4L2_PIX_FMT_NV21    v4l2_fourcc('N', 'V', '2', '1') /* 12  Y/CrCb 4:2:0  */
+V4L2_PIX_FMT_NV16    v4l2_fourcc('N', 'V', '1', '6') /* 16  Y/CbCr 4:2:2  */
+V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
+V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
+V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
+V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
+V4L2_PIX_FMT_NV21M   v4l2_fourcc('N', 'M', '2', '1') /* 21  Y/CrCb 4:2:0  */
+V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
+V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
+V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
+V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
+V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y', 'U', 'V', '9') /*  9  YUV 4:1:0     */
+V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
+V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 12  YVU411 planar */
+V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y', 'U', '1', '2') /* 12  YUV 4:2:0     */
+V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
+V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
+V4L2_PIX_FMT_YUV420M v4l2_fourcc('Y', 'M', '1', '2') /* 12  YUV420 planar */
+V4L2_PIX_FMT_YVU420M v4l2_fourcc('Y', 'M', '2', '1') /* 12  YVU420 planar */
+V4L2_PIX_FMT_YUV422M v4l2_fourcc('Y', 'M', '1', '6') /* 16  YUV422 planar */
+V4L2_PIX_FMT_YVU422M v4l2_fourcc('Y', 'M', '6', '1') /* 16  YVU422 planar */
+V4L2_PIX_FMT_YUV444M v4l2_fourcc('Y', 'M', '2', '4') /* 24  YUV444 planar */
+V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */
+V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B', 'A', '8', '1') /*  8  BGBG.. GRGR.. */
+V4L2_PIX_FMT_SGBRG8  v4l2_fourcc('G', 'B', 'R', 'G') /*  8  GBGB.. RGRG.. */
+V4L2_PIX_FMT_SGRBG8  v4l2_fourcc('G', 'R', 'B', 'G') /*  8  GRGR.. BGBG.. */
+V4L2_PIX_FMT_SRGGB8  v4l2_fourcc('R', 'G', 'G', 'B') /*  8  RGRG.. GBGB.. */
+V4L2_PIX_FMT_SBGGR10 v4l2_fourcc('B', 'G', '1', '0') /* 10  BGBG.. GRGR.. */
+V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
+V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
+V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
+V4L2_PIX_FMT_SBGGR10P v4l2_fourcc('p', 'B', 'A', 'A')
+V4L2_PIX_FMT_SGBRG10P v4l2_fourcc('p', 'G', 'A', 'A')
+V4L2_PIX_FMT_SGRBG10P v4l2_fourcc('p', 'g', 'A', 'A')
+V4L2_PIX_FMT_SRGGB10P v4l2_fourcc('p', 'R', 'A', 'A')
+V4L2_PIX_FMT_SBGGR10ALAW8 v4l2_fourcc('a', 'B', 'A', '8')
+V4L2_PIX_FMT_SGBRG10ALAW8 v4l2_fourcc('a', 'G', 'A', '8')
+V4L2_PIX_FMT_SGRBG10ALAW8 v4l2_fourcc('a', 'g', 'A', '8')
+V4L2_PIX_FMT_SRGGB10ALAW8 v4l2_fourcc('a', 'R', 'A', '8')
+V4L2_PIX_FMT_SBGGR10DPCM8 v4l2_fourcc('b', 'B', 'A', '8')
+V4L2_PIX_FMT_SGBRG10DPCM8 v4l2_fourcc('b', 'G', 'A', '8')
+V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
+V4L2_PIX_FMT_SRGGB10DPCM8 v4l2_fourcc('b', 'R', 'A', '8')
+V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
+V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
+V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
+V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
+V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C')
+V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
+V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
+V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
+V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
+V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') /* 16  GBGB.. RGRG.. */
+V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') /* 16  GRGR.. BGBG.. */
+V4L2_PIX_FMT_SRGGB16 v4l2_fourcc('R', 'G', '1', '6') /* 16  RGRG.. GBGB.. */
+V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
+V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
+V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
+V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
+V4L2_PIX_FMT_DV       v4l2_fourcc('d', 'v', 's', 'd') /* 1394          */
+V4L2_PIX_FMT_MPEG     v4l2_fourcc('M', 'P', 'E', 'G') /* MPEG-1/2/4 Multiplexed */
+V4L2_PIX_FMT_H264     v4l2_fourcc('H', '2', '6', '4') /* H264 with start codes */
+V4L2_PIX_FMT_H264_NO_SC v4l2_fourcc('A', 'V', 'C', '1') /* H264 without start codes */
+V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
+V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
+V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
+V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
+V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
+V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
+V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
+V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */
+V4L2_PIX_FMT_VP8      v4l2_fourcc('V', 'P', '8', '0') /* VP8 */
+V4L2_PIX_FMT_VP9      v4l2_fourcc('V', 'P', '9', '0') /* VP9 */
+V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
+V4L2_PIX_FMT_WNVA     v4l2_fourcc('W', 'N', 'V', 'A') /* Winnov hw compress */
+V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S', '9', '1', '0') /* SN9C10x compression */
+V4L2_PIX_FMT_SN9C20X_I420 v4l2_fourcc('S', '9', '2', '0') /* SN9C20x YUV 4:2:0 */
+V4L2_PIX_FMT_PWC1     v4l2_fourcc('P', 'W', 'C', '1') /* pwc older webcam */
+V4L2_PIX_FMT_PWC2     v4l2_fourcc('P', 'W', 'C', '2') /* pwc newer webcam */
+V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E', '6', '2', '5') /* ET61X251 compression */
+V4L2_PIX_FMT_SPCA501  v4l2_fourcc('S', '5', '0', '1') /* YUYV per line */
+V4L2_PIX_FMT_SPCA505  v4l2_fourcc('S', '5', '0', '5') /* YYUV per line */
+V4L2_PIX_FMT_SPCA508  v4l2_fourcc('S', '5', '0', '8') /* YUVY per line */
+V4L2_PIX_FMT_SPCA561  v4l2_fourcc('S', '5', '6', '1') /* compressed GBRG bayer */
+V4L2_PIX_FMT_PAC207   v4l2_fourcc('P', '2', '0', '7') /* compressed BGGR bayer */
+V4L2_PIX_FMT_MR97310A v4l2_fourcc('M', '3', '1', '0') /* compressed BGGR bayer */
+V4L2_PIX_FMT_JL2005BCD v4l2_fourcc('J', 'L', '2', '0') /* compressed RGGB bayer */
+V4L2_PIX_FMT_SN9C2028 v4l2_fourcc('S', 'O', 'N', 'X') /* compressed GBRG bayer */
+V4L2_PIX_FMT_SQ905C   v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
+V4L2_PIX_FMT_PJPG     v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
+V4L2_PIX_FMT_OV511    v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
+V4L2_PIX_FMT_OV518    v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
+V4L2_PIX_FMT_STV0680  v4l2_fourcc('S', '6', '8', '0') /* stv0680 bayer */
+V4L2_PIX_FMT_TM6000   v4l2_fourcc('T', 'M', '6', '0') /* tm5600/tm60x0 */
+V4L2_PIX_FMT_CIT_YYVYUY v4l2_fourcc('C', 'I', 'T', 'V') /* one line of Y then 1 line of VYUY */
+V4L2_PIX_FMT_KONICA420  v4l2_fourcc('K', 'O', 'N', 'I') /* YUV420 planar in blocks of 256 pixels */
+V4L2_PIX_FMT_JPGL      v4l2_fourcc('J', 'P', 'G', 'L') /* JPEG-Lite */
+V4L2_PIX_FMT_SE401      v4l2_fourcc('S', '4', '0', '1') /* se401 janggu compressed rgb */
+V4L2_PIX_FMT_S5C_UYVY_JPG v4l2_fourcc('S', '5', 'C', 'I') /* S5C73M3 interleaved UYVY/JPEG */
+V4L2_PIX_FMT_Y8I      v4l2_fourcc('Y', '8', 'I', ' ') /* Greyscale 8-bit L/R interleaved */
+V4L2_PIX_FMT_Y12I     v4l2_fourcc('Y', '1', '2', 'I') /* Greyscale 12-bit L/R interleaved */
+V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
+V4L2_PIX_FMT_MT21C    v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode  */
+V4L2_PIX_FMT_INZI     v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
+V4L2_PIX_FMT_IPU3_SBGGR10      v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
+V4L2_PIX_FMT_IPU3_SGBRG10      v4l2_fourcc('i', 'p', '3', 'g') /* IPU3 packed 10-bit GBRG bayer */
+V4L2_PIX_FMT_IPU3_SGRBG10      v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */
+V4L2_PIX_FMT_IPU3_SRGGB10      v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */
diff --git a/xlat/v4l2_sdr_fmts.in b/xlat/v4l2_sdr_fmts.in
new file mode 100644 (file)
index 0000000..b8aec91
--- /dev/null
@@ -0,0 +1,8 @@
+V4L2_SDR_FMT_CU8          v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */
+V4L2_SDR_FMT_CU16LE       v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */
+V4L2_SDR_FMT_CS8          v4l2_fourcc('C', 'S', '0', '8') /* complex s8 */
+V4L2_SDR_FMT_CS14LE       v4l2_fourcc('C', 'S', '1', '4') /* complex s14le */
+V4L2_SDR_FMT_RU12LE       v4l2_fourcc('R', 'U', '1', '2') /* real u12le */
+V4L2_SDR_FMT_PCU16BE     v4l2_fourcc('P', 'C', '1', '6') /* planar complex u16be */
+V4L2_SDR_FMT_PCU18BE     v4l2_fourcc('P', 'C', '1', '8') /* planar complex u18be */
+V4L2_SDR_FMT_PCU20BE     v4l2_fourcc('P', 'C', '2', '0') /* planar complex u20be */