This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: v4l-utils: sync-with-kernel
Author:  Hans Verkuil <[email protected]>
Date:    Sat Jun 6 10:07:25 2015 +0200

Update to the latest media kernel.

Signed-off-by: Hans Verkuil <[email protected]>

 contrib/freebsd/include/linux/videodev2.h |   41 +++-
 include/linux/v4l2-mediabus.h             |    4 +-
 include/linux/videodev2.h                 |   41 +++-
 utils/v4l2-ctl/vivid-tpg-colors.c         |  478 ++++++++++++++++++++++-------
 utils/v4l2-ctl/vivid-tpg-colors.h         |    4 +-
 utils/v4l2-ctl/vivid-tpg.c                |  126 +++++---
 utils/v4l2-ctl/vivid-tpg.h                |   20 ++
 utils/v4l2-ctl/vivid-tpg.h.patch          |    3 +-
 8 files changed, 557 insertions(+), 160 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=ae0145535594c474254b877e3756ff0ce60e7e87

diff --git a/contrib/freebsd/include/linux/videodev2.h 
b/contrib/freebsd/include/linux/videodev2.h
index 4c18455..fe38b21 100644
--- a/contrib/freebsd/include/linux/videodev2.h
+++ b/contrib/freebsd/include/linux/videodev2.h
@@ -272,6 +272,42 @@ enum v4l2_colorspace {
        ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
         ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
 
+enum v4l2_xfer_func {
+       /*
+        * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
+        * for the various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
+        * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
+        *
+        * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
+        *
+        * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
+        *
+        * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
+        */
+       V4L2_XFER_FUNC_DEFAULT     = 0,
+       V4L2_XFER_FUNC_709         = 1,
+       V4L2_XFER_FUNC_SRGB        = 2,
+       V4L2_XFER_FUNC_ADOBERGB    = 3,
+       V4L2_XFER_FUNC_SMPTE240M   = 4,
+       V4L2_XFER_FUNC_NONE        = 5,
+};
+
+/*
+ * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
+       ((colsp) == V4L2_XFER_FUNC_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
+        ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
+         ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
+          ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG 
? \
+           V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709))))
+
 enum v4l2_ycbcr_encoding {
        /*
         * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
@@ -441,6 +477,7 @@ struct v4l2_pix_format {
        uint32_t                        flags;          /* format flags 
(V4L2_PIX_FMT_FLAG_*) */
        uint32_t                        ycbcr_enc;      /* enum 
v4l2_ycbcr_encoding */
        uint32_t                        quantization;   /* enum 
v4l2_quantization */
+       uint32_t                        xfer_func;      /* enum v4l2_xfer_func 
*/
 };
 
 /*      Pixel format         FOURCC                          depth  
Description  */
@@ -1939,6 +1976,7 @@ struct v4l2_plane_pix_format {
  * @flags:             format flags (V4L2_PIX_FMT_FLAG_*)
  * @ycbcr_enc:         enum v4l2_ycbcr_encoding, Y'CbCr encoding
  * @quantization:      enum v4l2_quantization, colorspace quantization
+ * @xfer_func:         enum v4l2_xfer_func, colorspace transfer function
  */
 struct v4l2_pix_format_mplane {
        uint32_t                                width;
@@ -1952,7 +1990,8 @@ struct v4l2_pix_format_mplane {
        uint8_t                         flags;
        uint8_t                         ycbcr_enc;
        uint8_t                         quantization;
-       uint8_t                         reserved[8];
+       uint8_t                         xfer_func;
+       uint8_t                         reserved[7];
 } __attribute__ ((packed));
 
 /**
diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
index 13f5ba9..dbacc51 100644
--- a/include/linux/v4l2-mediabus.h
+++ b/include/linux/v4l2-mediabus.h
@@ -24,6 +24,7 @@
  * @colorspace:        colorspace of the data (from enum v4l2_colorspace)
  * @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
  * @quantization: quantization of the data (from enum v4l2_quantization)
+ * @xfer_func:  transfer function of the data (from enum v4l2_xfer_func)
  */
 struct v4l2_mbus_framefmt {
        __u32                   width;
@@ -33,7 +34,8 @@ struct v4l2_mbus_framefmt {
        __u32                   colorspace;
        __u16                   ycbcr_enc;
        __u16                   quantization;
-       __u32                   reserved[6];
+       __u16                   xfer_func;
+       __u16                   reserved[11];
 };
 
 /*
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 6908397..e610a9b 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -238,6 +238,42 @@ enum v4l2_colorspace {
        ((is_sdtv) ? V4L2_COLORSPACE_SMPTE170M : \
         ((is_hdtv) ? V4L2_COLORSPACE_REC709 : V4L2_COLORSPACE_SRGB))
 
+enum v4l2_xfer_func {
+       /*
+        * Mapping of V4L2_XFER_FUNC_DEFAULT to actual transfer functions
+        * for the various colorspaces:
+        *
+        * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M,
+        * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_REC709 and
+        * V4L2_COLORSPACE_BT2020: V4L2_XFER_FUNC_709
+        *
+        * V4L2_COLORSPACE_SRGB, V4L2_COLORSPACE_JPEG: V4L2_XFER_FUNC_SRGB
+        *
+        * V4L2_COLORSPACE_ADOBERGB: V4L2_XFER_FUNC_ADOBERGB
+        *
+        * V4L2_COLORSPACE_SMPTE240M: V4L2_XFER_FUNC_SMPTE240M
+        *
+        * V4L2_COLORSPACE_RAW: V4L2_XFER_FUNC_NONE
+        */
+       V4L2_XFER_FUNC_DEFAULT     = 0,
+       V4L2_XFER_FUNC_709         = 1,
+       V4L2_XFER_FUNC_SRGB        = 2,
+       V4L2_XFER_FUNC_ADOBERGB    = 3,
+       V4L2_XFER_FUNC_SMPTE240M   = 4,
+       V4L2_XFER_FUNC_NONE        = 5,
+};
+
+/*
+ * Determine how XFER_FUNC_DEFAULT should map to a proper transfer function.
+ * This depends on the colorspace.
+ */
+#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) \
+       ((colsp) == V4L2_XFER_FUNC_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : \
+        ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : \
+         ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : \
+          ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG 
? \
+           V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709))))
+
 enum v4l2_ycbcr_encoding {
        /*
         * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the
@@ -407,6 +443,7 @@ struct v4l2_pix_format {
        __u32                   flags;          /* format flags 
(V4L2_PIX_FMT_FLAG_*) */
        __u32                   ycbcr_enc;      /* enum v4l2_ycbcr_encoding */
        __u32                   quantization;   /* enum v4l2_quantization */
+       __u32                   xfer_func;      /* enum v4l2_xfer_func */
 };
 
 /*      Pixel format         FOURCC                          depth  
Description  */
@@ -1905,6 +1942,7 @@ struct v4l2_plane_pix_format {
  * @flags:             format flags (V4L2_PIX_FMT_FLAG_*)
  * @ycbcr_enc:         enum v4l2_ycbcr_encoding, Y'CbCr encoding
  * @quantization:      enum v4l2_quantization, colorspace quantization
+ * @xfer_func:         enum v4l2_xfer_func, colorspace transfer function
  */
 struct v4l2_pix_format_mplane {
        __u32                           width;
@@ -1918,7 +1956,8 @@ struct v4l2_pix_format_mplane {
        __u8                            flags;
        __u8                            ycbcr_enc;
        __u8                            quantization;
-       __u8                            reserved[8];
+       __u8                            xfer_func;
+       __u8                            reserved[7];
 } __attribute__ ((packed));
 
 /**
diff --git a/utils/v4l2-ctl/vivid-tpg-colors.c 
b/utils/v4l2-ctl/vivid-tpg-colors.c
index 424aa7a..8f231a6 100644
--- a/utils/v4l2-ctl/vivid-tpg-colors.c
+++ b/utils/v4l2-ctl/vivid-tpg-colors.c
@@ -598,71 +598,327 @@ const unsigned short tpg_linear_to_rec709[255 * 16 + 1] 
= {
 };
 
 /* Generated table */
-const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 
1][TPG_COLOR_CSC_BLACK + 1] = {
-       [V4L2_COLORSPACE_SMPTE170M][0] = { 2939, 2939, 2939 },
-       [V4L2_COLORSPACE_SMPTE170M][1] = { 2953, 2963, 586 },
-       [V4L2_COLORSPACE_SMPTE170M][2] = { 0, 2967, 2937 },
-       [V4L2_COLORSPACE_SMPTE170M][3] = { 88, 2990, 575 },
-       [V4L2_COLORSPACE_SMPTE170M][4] = { 3016, 259, 2933 },
-       [V4L2_COLORSPACE_SMPTE170M][5] = { 3030, 405, 558 },
-       [V4L2_COLORSPACE_SMPTE170M][6] = { 478, 428, 2931 },
-       [V4L2_COLORSPACE_SMPTE170M][7] = { 547, 547, 547 },
-       [V4L2_COLORSPACE_SMPTE240M][0] = { 2926, 2926, 2926 },
-       [V4L2_COLORSPACE_SMPTE240M][1] = { 2941, 2950, 546 },
-       [V4L2_COLORSPACE_SMPTE240M][2] = { 0, 2954, 2924 },
-       [V4L2_COLORSPACE_SMPTE240M][3] = { 78, 2978, 536 },
-       [V4L2_COLORSPACE_SMPTE240M][4] = { 3004, 230, 2920 },
-       [V4L2_COLORSPACE_SMPTE240M][5] = { 3018, 363, 518 },
-       [V4L2_COLORSPACE_SMPTE240M][6] = { 437, 387, 2918 },
-       [V4L2_COLORSPACE_SMPTE240M][7] = { 507, 507, 507 },
-       [V4L2_COLORSPACE_REC709][0] = { 2939, 2939, 2939 },
-       [V4L2_COLORSPACE_REC709][1] = { 2939, 2939, 547 },
-       [V4L2_COLORSPACE_REC709][2] = { 547, 2939, 2939 },
-       [V4L2_COLORSPACE_REC709][3] = { 547, 2939, 547 },
-       [V4L2_COLORSPACE_REC709][4] = { 2939, 547, 2939 },
-       [V4L2_COLORSPACE_REC709][5] = { 2939, 547, 547 },
-       [V4L2_COLORSPACE_REC709][6] = { 547, 547, 2939 },
-       [V4L2_COLORSPACE_REC709][7] = { 547, 547, 547 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][0] = { 2892, 2988, 2807 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][1] = { 2846, 3070, 843 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][2] = { 1656, 2962, 2783 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][3] = { 1572, 3045, 763 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][4] = { 2476, 229, 2742 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][5] = { 2420, 672, 614 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][6] = { 725, 63, 2718 },
-       [V4L2_COLORSPACE_470_SYSTEM_M][7] = { 534, 561, 509 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][0] = { 2939, 2939, 2939 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][1] = { 2939, 2939, 464 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][2] = { 786, 2939, 2939 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][3] = { 786, 2939, 464 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][4] = { 2879, 547, 2956 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][5] = { 2879, 547, 547 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][6] = { 547, 547, 2956 },
-       [V4L2_COLORSPACE_470_SYSTEM_BG][7] = { 547, 547, 547 },
-       [V4L2_COLORSPACE_SRGB][0] = { 3056, 3056, 3056 },
-       [V4L2_COLORSPACE_SRGB][1] = { 3056, 3056, 800 },
-       [V4L2_COLORSPACE_SRGB][2] = { 800, 3056, 3056 },
-       [V4L2_COLORSPACE_SRGB][3] = { 800, 3056, 800 },
-       [V4L2_COLORSPACE_SRGB][4] = { 3056, 800, 3056 },
-       [V4L2_COLORSPACE_SRGB][5] = { 3056, 800, 800 },
-       [V4L2_COLORSPACE_SRGB][6] = { 800, 800, 3056 },
-       [V4L2_COLORSPACE_SRGB][7] = { 800, 800, 800 },
-       [V4L2_COLORSPACE_ADOBERGB][0] = { 3033, 3033, 3033 },
-       [V4L2_COLORSPACE_ADOBERGB][1] = { 3033, 3033, 1063 },
-       [V4L2_COLORSPACE_ADOBERGB][2] = { 1828, 3033, 3033 },
-       [V4L2_COLORSPACE_ADOBERGB][3] = { 1828, 3033, 1063 },
-       [V4L2_COLORSPACE_ADOBERGB][4] = { 2633, 851, 2979 },
-       [V4L2_COLORSPACE_ADOBERGB][5] = { 2633, 851, 851 },
-       [V4L2_COLORSPACE_ADOBERGB][6] = { 851, 851, 2979 },
-       [V4L2_COLORSPACE_ADOBERGB][7] = { 851, 851, 851 },
-       [V4L2_COLORSPACE_BT2020][0] = { 2939, 2939, 2939 },
-       [V4L2_COLORSPACE_BT2020][1] = { 2877, 2923, 1058 },
-       [V4L2_COLORSPACE_BT2020][2] = { 1837, 2840, 2916 },
-       [V4L2_COLORSPACE_BT2020][3] = { 1734, 2823, 993 },
-       [V4L2_COLORSPACE_BT2020][4] = { 2427, 961, 2812 },
-       [V4L2_COLORSPACE_BT2020][5] = { 2351, 912, 648 },
-       [V4L2_COLORSPACE_BT2020][6] = { 792, 618, 2788 },
-       [V4L2_COLORSPACE_BT2020][7] = { 547, 547, 547 },
+const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 
1][V4L2_XFER_FUNC_NONE + 1][TPG_COLOR_CSC_BLACK + 1] = {
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][1] = { 2953, 2963, 586 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][2] = { 0, 2967, 2937 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][3] = { 88, 2990, 575 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][4] = { 3016, 259, 2933 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][5] = { 3030, 405, 558 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][6] = { 478, 428, 2931 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 
3056 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][1] = { 3068, 3077, 838 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][2] = { 0, 3081, 3053 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][3] = { 241, 3102, 828 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][4] = { 3126, 504, 3050 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][5] = { 3138, 657, 810 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][6] = { 731, 680, 3048 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SRGB][7] = { 800, 799, 800 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 
3033 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][1] = { 3046, 3054, 
886 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][2] = { 0, 3058, 
3031 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][3] = { 360, 3079, 
877 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][4] = { 3103, 587, 
3027 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][5] = { 3116, 723, 
861 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][6] = { 789, 744, 
3025 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 
851 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 
2926, 2926 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][1] = { 2941, 
2950, 546 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][2] = { 0, 2954, 
2924 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][3] = { 78, 2978, 
536 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][4] = { 3004, 230, 
2920 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][5] = { 3018, 363, 
518 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][6] = { 437, 387, 
2918 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 
507 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 
2125 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][1] = { 2145, 2159, 142 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][2] = { 0, 2164, 2122 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][3] = { 19, 2198, 138 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][4] = { 2236, 57, 2116 
},
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][5] = { 2256, 90, 133 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][6] = { 110, 96, 2113 },
+       [V4L2_COLORSPACE_SMPTE170M][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][1] = { 2953, 2963, 586 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][2] = { 0, 2967, 2937 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][3] = { 88, 2990, 575 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][4] = { 3016, 259, 2933 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][5] = { 3030, 405, 558 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][6] = { 478, 428, 2931 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 
3056 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][1] = { 3068, 3077, 838 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][2] = { 0, 3081, 3053 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][3] = { 241, 3102, 828 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][4] = { 3126, 504, 3050 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][5] = { 3138, 657, 810 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][6] = { 731, 680, 3048 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SRGB][7] = { 800, 799, 800 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 
3033 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][1] = { 3046, 3054, 
886 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][2] = { 0, 3058, 
3031 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][3] = { 360, 3079, 
877 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][4] = { 3103, 587, 
3027 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][5] = { 3116, 723, 
861 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][6] = { 789, 744, 
3025 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 
851 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 
2926, 2926 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][1] = { 2941, 
2950, 546 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][2] = { 0, 2954, 
2924 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][3] = { 78, 2978, 
536 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][4] = { 3004, 230, 
2920 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][5] = { 3018, 363, 
518 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][6] = { 437, 387, 
2918 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 
507 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 
2125 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][1] = { 2145, 2159, 142 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][2] = { 0, 2164, 2122 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][3] = { 19, 2198, 138 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][4] = { 2236, 57, 2116 
},
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][5] = { 2256, 90, 133 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][6] = { 110, 96, 2113 },
+       [V4L2_COLORSPACE_SMPTE240M][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][1] = { 2939, 2939, 547 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][2] = { 547, 2939, 2939 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][3] = { 547, 2939, 547 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][4] = { 2939, 547, 2939 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][5] = { 2939, 547, 547 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][6] = { 547, 547, 2939 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 3056 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][1] = { 3056, 3056, 800 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][2] = { 800, 3056, 3056 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][3] = { 800, 3056, 800 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][4] = { 3056, 800, 3056 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][5] = { 3056, 800, 800 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][6] = { 800, 800, 3056 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SRGB][7] = { 800, 800, 800 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 
3033 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][1] = { 3033, 3033, 
851 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][2] = { 851, 3033, 
3033 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][3] = { 851, 3033, 851 
},
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][4] = { 3033, 851, 
3033 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][5] = { 3033, 851, 851 
},
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][6] = { 851, 851, 3033 
},
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 851 
},
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 2926, 
2926 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][1] = { 2926, 2926, 
507 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][2] = { 507, 2926, 
2926 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][3] = { 507, 2926, 
507 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][4] = { 2926, 507, 
2926 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][5] = { 2926, 507, 
507 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][6] = { 507, 507, 
2926 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 507 
},
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 2125 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][1] = { 2125, 2125, 130 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][2] = { 130, 2125, 2125 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][3] = { 130, 2125, 130 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][4] = { 2125, 130, 2125 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][5] = { 2125, 130, 130 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][6] = { 130, 130, 2125 },
+       [V4L2_COLORSPACE_REC709][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][0] = { 2892, 2988, 
2807 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][1] = { 2846, 3070, 
843 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][2] = { 1656, 2962, 
2783 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][3] = { 1572, 3045, 
763 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][4] = { 2476, 229, 
2742 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][5] = { 2420, 672, 
614 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][6] = { 725, 63, 2718 
},
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_709][7] = { 534, 561, 509 
},
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][0] = { 3013, 3099, 
2935 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][1] = { 2970, 3174, 
1091 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][2] = { 1871, 3076, 
2913 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][3] = { 1791, 3152, 
1013 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][4] = { 2632, 468, 
2876 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][5] = { 2581, 924, 
866 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][6] = { 976, 180, 
2854 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SRGB][7] = { 786, 813, 
762 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][0] = { 2990, 
3077, 2912 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][1] = { 2947, 
3153, 1119 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][2] = { 1859, 
3053, 2889 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][3] = { 1782, 
3130, 1047 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][4] = { 2608, 
556, 2852 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][5] = { 2557, 
964, 912 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][6] = { 1013, 
309, 2830 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_ADOBERGB][7] = { 839, 
864, 817 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][0] = { 2879, 
2975, 2793 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][1] = { 2832, 
3059, 806 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][2] = { 1629, 
2949, 2768 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][3] = { 1543, 
3033, 725 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][4] = { 2457, 
203, 2727 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][5] = { 2401, 
633, 574 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][6] = { 687, 
56, 2702 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_SMPTE240M][7] = { 493, 
521, 469 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][0] = { 2060, 2194, 
1943 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][1] = { 1995, 2314, 
237 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][2] = { 725, 2157, 
1911 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][3] = { 660, 2278, 
205 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][4] = { 1525, 50, 
1857 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][5] = { 1461, 171, 
151 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][6] = { 190, 14, 
1825 },
+       [V4L2_COLORSPACE_470_SYSTEM_M][V4L2_XFER_FUNC_NONE][7] = { 126, 134, 
118 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 
2939 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][1] = { 2939, 2939, 
464 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][2] = { 786, 2939, 
2939 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][3] = { 786, 2939, 
464 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][4] = { 2879, 547, 
2956 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][5] = { 2879, 547, 
547 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][6] = { 547, 547, 
2956 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_709][7] = { 547, 547, 
547 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 
3056 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][1] = { 3056, 3056, 
717 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][2] = { 1036, 3056, 
3056 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][3] = { 1036, 3056, 
717 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][4] = { 3001, 800, 
3071 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][5] = { 3001, 800, 
799 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][6] = { 800, 800, 
3071 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SRGB][7] = { 800, 800, 
799 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 
3033, 3033 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][1] = { 3033, 
3033, 776 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][2] = { 1068, 
3033, 3033 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][3] = { 1068, 
3033, 776 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][4] = { 2977, 
851, 3048 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][5] = { 2977, 
851, 851 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][6] = { 851, 
851, 3048 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 
851, 851 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 
2926, 2926 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][1] = { 2926, 
2926, 423 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][2] = { 749, 
2926, 2926 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][3] = { 749, 
2926, 423 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][4] = { 2865, 
507, 2943 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][5] = { 2865, 
507, 507 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][6] = { 507, 
507, 2943 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 
507, 507 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 
2125 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][1] = { 2125, 2125, 
106 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][2] = { 214, 2125, 
2125 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][3] = { 214, 2125, 
106 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][4] = { 2041, 130, 
2149 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][5] = { 2041, 130, 
130 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][6] = { 130, 130, 
2149 },
+       [V4L2_COLORSPACE_470_SYSTEM_BG][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 
130 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][1] = { 2939, 2939, 547 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][2] = { 547, 2939, 2939 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][3] = { 547, 2939, 547 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][4] = { 2939, 547, 2939 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][5] = { 2939, 547, 547 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][6] = { 547, 547, 2939 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 3056 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][1] = { 3056, 3056, 800 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][2] = { 800, 3056, 3056 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][3] = { 800, 3056, 800 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][4] = { 3056, 800, 3056 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][5] = { 3056, 800, 800 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][6] = { 800, 800, 3056 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SRGB][7] = { 800, 800, 800 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 3033 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][1] = { 3033, 3033, 851 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][2] = { 851, 3033, 3033 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][3] = { 851, 3033, 851 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][4] = { 3033, 851, 3033 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][5] = { 3033, 851, 851 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][6] = { 851, 851, 3033 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 851 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 2926, 
2926 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][1] = { 2926, 2926, 507 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][2] = { 507, 2926, 2926 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][3] = { 507, 2926, 507 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][4] = { 2926, 507, 2926 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][5] = { 2926, 507, 507 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][6] = { 507, 507, 2926 
},
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 507 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 2125 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][1] = { 2125, 2125, 130 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][2] = { 130, 2125, 2125 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][3] = { 130, 2125, 130 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][4] = { 2125, 130, 2125 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][5] = { 2125, 130, 130 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][6] = { 130, 130, 2125 },
+       [V4L2_COLORSPACE_SRGB][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][1] = { 2939, 2939, 781 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][2] = { 1622, 2939, 2939 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][3] = { 1622, 2939, 781 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][4] = { 2502, 547, 2881 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][5] = { 2502, 547, 547 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][6] = { 547, 547, 2881 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 3056 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][1] = { 3056, 3056, 1031 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][2] = { 1838, 3056, 3056 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][3] = { 1838, 3056, 1031 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][4] = { 2657, 800, 3002 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][5] = { 2657, 800, 800 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][6] = { 800, 800, 3002 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SRGB][7] = { 800, 800, 800 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 
3033 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][1] = { 3033, 3033, 
1063 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][2] = { 1828, 3033, 
3033 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][3] = { 1828, 3033, 
1063 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][4] = { 2633, 851, 
2979 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][5] = { 2633, 851, 
851 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][6] = { 851, 851, 
2979 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 
851 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 2926, 
2926 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][1] = { 2926, 2926, 
744 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][2] = { 1594, 2926, 
2926 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][3] = { 1594, 2926, 
744 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][4] = { 2484, 507, 
2867 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][5] = { 2484, 507, 
507 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][6] = { 507, 507, 
2867 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 
507 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 2125 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][1] = { 2125, 2125, 212 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][2] = { 698, 2125, 2125 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][3] = { 698, 2125, 212 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][4] = { 1557, 130, 2043 
},
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][5] = { 1557, 130, 130 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][6] = { 130, 130, 2043 },
+       [V4L2_COLORSPACE_ADOBERGB][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][0] = { 2939, 2939, 2939 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][1] = { 2877, 2923, 1058 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][2] = { 1837, 2840, 2916 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][3] = { 1734, 2823, 993 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][4] = { 2427, 961, 2812 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][5] = { 2351, 912, 648 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][6] = { 792, 618, 2788 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_709][7] = { 547, 547, 547 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][0] = { 3056, 3056, 3056 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][1] = { 2999, 3041, 1301 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][2] = { 2040, 2965, 3034 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][3] = { 1944, 2950, 1238 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][4] = { 2587, 1207, 2940 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][5] = { 2517, 1159, 900 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][6] = { 1042, 870, 2917 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SRGB][7] = { 800, 800, 800 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][0] = { 3033, 3033, 
3033 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][1] = { 2976, 3018, 
1315 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][2] = { 2024, 2942, 
3011 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][3] = { 1930, 2926, 
1256 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][4] = { 2563, 1227, 
2916 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][5] = { 2494, 1183, 
943 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][6] = { 1073, 916, 
2894 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_ADOBERGB][7] = { 851, 851, 851 
},
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][0] = { 2926, 2926, 
2926 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][1] = { 2864, 2910, 
1024 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][2] = { 1811, 2826, 
2903 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][3] = { 1707, 2809, 
958 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][4] = { 2408, 926, 
2798 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][5] = { 2331, 876, 
609 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][6] = { 755, 579, 
2773 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_SMPTE240M][7] = { 507, 507, 507 
},
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][0] = { 2125, 2125, 2125 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][1] = { 2039, 2102, 338 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][2] = { 873, 1987, 2092 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][3] = { 787, 1965, 305 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][4] = { 1468, 290, 1949 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][5] = { 1382, 268, 162 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][6] = { 216, 152, 1917 },
+       [V4L2_COLORSPACE_BT2020][V4L2_XFER_FUNC_NONE][7] = { 130, 130, 130 },
 };
 
 #else
@@ -764,50 +1020,38 @@ static double transfer_srgb_to_rec709(double v)
        return transfer_rgb_to_rec709(transfer_srgb_to_rgb(v));
 }
 
-static void csc(enum v4l2_colorspace colorspace, double *r, double *g, double 
*b)
+static void csc(enum v4l2_colorspace colorspace, enum v4l2_xfer_func xfer_func,
+               double *r, double *g, double *b)
 {
        int clamp = 1;
 
+       *r = transfer_srgb_to_rgb(*r);
+       *g = transfer_srgb_to_rgb(*g);
+       *b = transfer_srgb_to_rgb(*b);
+
        /* Convert the primaries of Rec. 709 Linear RGB */
        switch (colorspace) {
        case V4L2_COLORSPACE_SMPTE240M:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_240m);
                break;
        case V4L2_COLORSPACE_SMPTE170M:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_170m);
                break;
        case V4L2_COLORSPACE_470_SYSTEM_BG:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_ebu);
                break;
        case V4L2_COLORSPACE_470_SYSTEM_M:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_ntsc1953);
                break;
        case V4L2_COLORSPACE_ADOBERGB:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_adobergb);
                break;
        case V4L2_COLORSPACE_BT2020:
-               *r = transfer_srgb_to_rgb(*r);
-               *g = transfer_srgb_to_rgb(*g);
-               *b = transfer_srgb_to_rgb(*b);
                mult_matrix(r, g, b, rec709_to_bt2020);
                break;
        case V4L2_COLORSPACE_SRGB:
        case V4L2_COLORSPACE_REC709:
+               break;
        default:
                break;
        }
@@ -818,33 +1062,28 @@ static void csc(enum v4l2_colorspace colorspace, double 
*r, double *g, double *b
                *b = ((*b) < 0) ? 0 : (((*b) > 1) ? 1 : (*b));
        }
 
-       /* Encode to gamma corrected colorspace */
-       switch (colorspace) {
-       case V4L2_COLORSPACE_SMPTE240M:
-               *r = transfer_rgb_to_smpte240m(*r);
-               *g = transfer_rgb_to_smpte240m(*g);
-               *b = transfer_rgb_to_smpte240m(*b);
-               break;
-       case V4L2_COLORSPACE_SMPTE170M:
-       case V4L2_COLORSPACE_470_SYSTEM_M:
-       case V4L2_COLORSPACE_470_SYSTEM_BG:
-       case V4L2_COLORSPACE_BT2020:
+       switch (xfer_func) {
+       case V4L2_XFER_FUNC_709:
                *r = transfer_rgb_to_rec709(*r);
                *g = transfer_rgb_to_rec709(*g);
                *b = transfer_rgb_to_rec709(*b);
                break;
-       case V4L2_COLORSPACE_SRGB:
+       case V4L2_XFER_FUNC_SRGB:
+               *r = transfer_rgb_to_srgb(*r);
+               *g = transfer_rgb_to_srgb(*g);
+               *b = transfer_rgb_to_srgb(*b);
                break;
-       case V4L2_COLORSPACE_ADOBERGB:
+       case V4L2_XFER_FUNC_ADOBERGB:
                *r = transfer_rgb_to_adobergb(*r);
                *g = transfer_rgb_to_adobergb(*g);
                *b = transfer_rgb_to_adobergb(*b);
                break;
-       case V4L2_COLORSPACE_REC709:
-       default:
-               *r = transfer_srgb_to_rec709(*r);
-               *g = transfer_srgb_to_rec709(*g);
-               *b = transfer_srgb_to_rec709(*b);
+       case V4L2_XFER_FUNC_SMPTE240M:
+               *r = transfer_rgb_to_smpte240m(*r);
+               *g = transfer_rgb_to_smpte240m(*g);
+               *b = transfer_rgb_to_smpte240m(*b);
+               break;
+       case V4L2_XFER_FUNC_NONE:
                break;
        }
 }
@@ -877,7 +1116,16 @@ int main(int argc, char **argv)
                "V4L2_COLORSPACE_ADOBERGB",
                "V4L2_COLORSPACE_BT2020",
        };
+       static const char * const xfer_func_names[] = {
+               "",
+               "V4L2_XFER_FUNC_709",
+               "V4L2_XFER_FUNC_SRGB",
+               "V4L2_XFER_FUNC_ADOBERGB",
+               "V4L2_XFER_FUNC_SMPTE240M",
+               "V4L2_XFER_FUNC_NONE",
+       };
        int i;
+       int x;
        int c;
 
        printf("/* Generated table */\n");
@@ -905,22 +1153,26 @@ int main(int argc, char **argv)
        printf("\n};\n\n");
 
        printf("/* Generated table */\n");
-       printf("const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 
1][TPG_COLOR_CSC_BLACK + 1] = {\n");
+       printf("const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 
1][V4L2_XFER_FUNC_NONE + 1][TPG_COLOR_CSC_BLACK + 1] = {\n");
        for (c = 0; c <= V4L2_COLORSPACE_BT2020; c++) {
-               for (i = 0; i <= TPG_COLOR_CSC_BLACK; i++) {
-                       double r, g, b;
+               for (x = 1; x <= V4L2_XFER_FUNC_NONE; x++) {
+                       for (i = 0; i <= TPG_COLOR_CSC_BLACK; i++) {
+                               double r, g, b;
 
-                       if (colorspaces[c] == 0)
-                               continue;
+                               if (colorspaces[c] == 0)
+                                       continue;
 
-                       r = tpg_colors[i].r / 255.0;
-                       g = tpg_colors[i].g / 255.0;
-                       b = tpg_colors[i].b / 255.0;
+                               r = tpg_colors[i].r / 255.0;
+                               g = tpg_colors[i].g / 255.0;
+                               b = tpg_colors[i].b / 255.0;
 
-                       csc(c, &r, &g, &b);
+                               csc(c, x, &r, &g, &b);
 
-                       printf("\t[%s][%d] = { %d, %d, %d },\n", 
colorspace_names[c], i,
-                               (int)(r * 4080), (int)(g * 4080), (int)(b * 
4080));
+                               printf("\t[%s][%s][%d] = { %d, %d, %d },\n",
+                                       colorspace_names[c],
+                                       xfer_func_names[x], i,
+                                       (int)(r * 4080), (int)(g * 4080), 
(int)(b * 4080));
+                       }
                }
        }
        printf("};\n\n");
diff --git a/utils/v4l2-ctl/vivid-tpg-colors.h 
b/utils/v4l2-ctl/vivid-tpg-colors.h
index 2c33335..86b8bf3 100644
--- a/utils/v4l2-ctl/vivid-tpg-colors.h
+++ b/utils/v4l2-ctl/vivid-tpg-colors.h
@@ -61,6 +61,8 @@ enum tpg_color {
 extern const struct color tpg_colors[TPG_COLOR_MAX];
 extern const unsigned short tpg_rec709_to_linear[255 * 16 + 1];
 extern const unsigned short tpg_linear_to_rec709[255 * 16 + 1];
-extern const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 
1][TPG_COLOR_CSC_BLACK + 1];
+extern const struct color16 tpg_csc_colors[V4L2_COLORSPACE_BT2020 + 1]
+                                         [V4L2_XFER_FUNC_NONE + 1]
+                                         [TPG_COLOR_CSC_BLACK + 1];
 
 #endif
diff --git a/utils/v4l2-ctl/vivid-tpg.c b/utils/v4l2-ctl/vivid-tpg.c
index b1147f2..32ebf0d 100644
--- a/utils/v4l2-ctl/vivid-tpg.c
+++ b/utils/v4l2-ctl/vivid-tpg.c
@@ -706,9 +706,9 @@ static void precalculate_color(struct tpg_data *tpg, int k)
        }
 
        if (tpg->pattern == TPG_PAT_CSC_COLORBAR && col <= TPG_COLOR_CSC_BLACK) 
{
-               r = tpg_csc_colors[tpg->colorspace][col].r;
-               g = tpg_csc_colors[tpg->colorspace][col].g;
-               b = tpg_csc_colors[tpg->colorspace][col].b;
+               r = tpg_csc_colors[tpg->colorspace][tpg->real_xfer_func][col].r;
+               g = tpg_csc_colors[tpg->colorspace][tpg->real_xfer_func][col].g;
+               b = tpg_csc_colors[tpg->colorspace][tpg->real_xfer_func][col].b;
        } else {
                r <<= 4;
                g <<= 4;
@@ -1462,42 +1462,10 @@ static void tpg_precalculate_line(struct tpg_data *tpg)
 /* need this to do rgb24 rendering */
 typedef struct { u16 __; u8 _; } __packed x24;
 
-void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
-                 int y, int x, char *text)
-{
-       int line;
-       unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
-       unsigned div = step;
-       unsigned first = 0;
-       unsigned len = strlen(text);
-       unsigned p;
-
-       if (font8x16 == NULL || basep == NULL)
-               return;
-
-       /* Checks if it is possible to show string */
-       if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
-               return;
-
-       if (len > (tpg->compose.width - x) / 8)
-               len = (tpg->compose.width - x) / 8;
-       if (tpg->vflip)
-               y = tpg->compose.height - y - 16;
-       if (tpg->hflip)
-               x = tpg->compose.width - x - 8;
-       y += tpg->compose.top;
-       x += tpg->compose.left;
-       if (tpg->field == V4L2_FIELD_BOTTOM)
-               first = 1;
-       else if (tpg->field == V4L2_FIELD_SEQ_TB || tpg->field == 
V4L2_FIELD_SEQ_BT)
-               div = 2;
-
-       for (p = 0; p < tpg->planes; p++) {
-               unsigned vdiv = tpg->vdownsampling[p];
-               unsigned hdiv = tpg->hdownsampling[p];
-
-               /* Print text */
 #define PRINTSTR(PIXTYPE) do { \
+       unsigned vdiv = tpg->vdownsampling[p]; \
+       unsigned hdiv = tpg->hdownsampling[p]; \
+       int line;       \
        PIXTYPE fg;     \
        PIXTYPE bg;     \
        memcpy(&fg, tpg->textfg[p], sizeof(PIXTYPE));   \
@@ -1548,15 +1516,82 @@ void tpg_gen_text(const struct tpg_data *tpg, u8 
*basep[TPG_MAX_PLANES][2],
        }       \
 } while (0)
 
+static noinline void tpg_print_str_2(const struct tpg_data *tpg, u8 
*basep[TPG_MAX_PLANES][2],
+                       unsigned p, unsigned first, unsigned div, unsigned step,
+                       int y, int x, char *text, unsigned len)
+{
+       PRINTSTR(u8);
+}
+
+static noinline void tpg_print_str_4(const struct tpg_data *tpg, u8 
*basep[TPG_MAX_PLANES][2],
+                       unsigned p, unsigned first, unsigned div, unsigned step,
+                       int y, int x, char *text, unsigned len)
+{
+       PRINTSTR(u16);
+}
+
+static noinline void tpg_print_str_6(const struct tpg_data *tpg, u8 
*basep[TPG_MAX_PLANES][2],
+                       unsigned p, unsigned first, unsigned div, unsigned step,
+                       int y, int x, char *text, unsigned len)
+{
+       PRINTSTR(x24);
+}
+
+static noinline void tpg_print_str_8(const struct tpg_data *tpg, u8 
*basep[TPG_MAX_PLANES][2],
+                       unsigned p, unsigned first, unsigned div, unsigned step,
+                       int y, int x, char *text, unsigned len)
+{
+       PRINTSTR(u32);
+}
+
+void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
+                 int y, int x, char *text)
+{
+       unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
+       unsigned div = step;
+       unsigned first = 0;
+       unsigned len = strlen(text);
+       unsigned p;
+
+       if (font8x16 == NULL || basep == NULL)
+               return;
+
+       /* Checks if it is possible to show string */
+       if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
+               return;
+
+       if (len > (tpg->compose.width - x) / 8)
+               len = (tpg->compose.width - x) / 8;
+       if (tpg->vflip)
+               y = tpg->compose.height - y - 16;
+       if (tpg->hflip)
+               x = tpg->compose.width - x - 8;
+       y += tpg->compose.top;
+       x += tpg->compose.left;
+       if (tpg->field == V4L2_FIELD_BOTTOM)
+               first = 1;
+       else if (tpg->field == V4L2_FIELD_SEQ_TB || tpg->field == 
V4L2_FIELD_SEQ_BT)
+               div = 2;
+
+       for (p = 0; p < tpg->planes; p++) {
+               /* Print text */
                switch (tpg->twopixelsize[p]) {
                case 2:
-                       PRINTSTR(u8); break;
+                       tpg_print_str_2(tpg, basep, p, first, div, step, y, x,
+                                       text, len);
+                       break;
                case 4:
-                       PRINTSTR(u16); break;
+                       tpg_print_str_4(tpg, basep, p, first, div, step, y, x,
+                                       text, len);
+                       break;
                case 6:
-                       PRINTSTR(x24); break;
+                       tpg_print_str_6(tpg, basep, p, first, div, step, y, x,
+                                       text, len);
+                       break;
                case 8:
-                       PRINTSTR(u32); break;
+                       tpg_print_str_8(tpg, basep, p, first, div, step, y, x,
+                                       text, len);
+                       break;
                }
        }
 }
@@ -1650,8 +1685,14 @@ static void tpg_recalc(struct tpg_data *tpg)
        if (tpg->recalc_colors) {
                tpg->recalc_colors = false;
                tpg->recalc_lines = true;
+               tpg->real_xfer_func = tpg->xfer_func;
                tpg->real_ycbcr_enc = tpg->ycbcr_enc;
                tpg->real_quantization = tpg->quantization;
+
+               if (tpg->xfer_func == V4L2_XFER_FUNC_DEFAULT)
+                       tpg->real_xfer_func =
+                               V4L2_MAP_XFER_FUNC_DEFAULT(tpg->colorspace);
+
                if (tpg->ycbcr_enc == V4L2_YCBCR_ENC_DEFAULT)
                        tpg->real_ycbcr_enc =
                                V4L2_MAP_YCBCR_ENC_DEFAULT(tpg->colorspace);
@@ -1715,6 +1756,7 @@ void tpg_log_status(struct tpg_data *tpg)
        pr_info("tpg compose: %ux%u@%dx%d\n", tpg->compose.width, 
tpg->compose.height,
                        tpg->compose.left, tpg->compose.top);
        pr_info("tpg colorspace: %d\n", tpg->colorspace);
+       pr_info("tpg transfer function: %d/%d\n", tpg->xfer_func, 
tpg->real_xfer_func);
        pr_info("tpg Y'CbCr encoding: %d/%d\n", tpg->ycbcr_enc, 
tpg->real_ycbcr_enc);
        pr_info("tpg quantization: %d/%d\n", tpg->quantization, 
tpg->real_quantization);
        pr_info("tpg RGB range: %d/%d\n", tpg->rgb_range, tpg->real_rgb_range);
diff --git a/utils/v4l2-ctl/vivid-tpg.h b/utils/v4l2-ctl/vivid-tpg.h
index d4ea0f2..fe7a80d 100644
--- a/utils/v4l2-ctl/vivid-tpg.h
+++ b/utils/v4l2-ctl/vivid-tpg.h
@@ -36,6 +36,7 @@ typedef __s8 s8;
 
 #define __packed __attribute__((packed))
 #define pr_info printf
+#define noinline
 
 static inline void vfree(void *p)
 {
@@ -156,8 +157,14 @@ struct tpg_data {
        u32                             fourcc;
        bool                            is_yuv;
        u32                             colorspace;
+       u32                             xfer_func;
        u32                             ycbcr_enc;
        /*
+        * Stores the actual transfer function, i.e. will never be
+        * V4L2_XFER_FUNC_DEFAULT.
+        */
+       u32                             real_xfer_func;
+       /*
         * Stores the actual Y'CbCr encoding, i.e. will never be
         * V4L2_YCBCR_ENC_DEFAULT.
         */
@@ -363,6 +370,19 @@ static inline u32 tpg_g_ycbcr_enc(const struct tpg_data 
*tpg)
        return tpg->ycbcr_enc;
 }
 
+static inline void tpg_s_xfer_func(struct tpg_data *tpg, u32 xfer_func)
+{
+       if (tpg->xfer_func == xfer_func)
+               return;
+       tpg->xfer_func = xfer_func;
+       tpg->recalc_colors = true;
+}
+
+static inline u32 tpg_g_xfer_func(const struct tpg_data *tpg)
+{
+       return tpg->xfer_func;
+}
+
 static inline void tpg_s_quantization(struct tpg_data *tpg, u32 quantization)
 {
        if (tpg->quantization == quantization)
diff --git a/utils/v4l2-ctl/vivid-tpg.h.patch b/utils/v4l2-ctl/vivid-tpg.h.patch
index 3b590e1..65d6466 100644
--- a/utils/v4l2-ctl/vivid-tpg.h.patch
+++ b/utils/v4l2-ctl/vivid-tpg.h.patch
@@ -2,7 +2,7 @@ diff --git 
a/devel/v4l/patchwork//drivers/media/platform/vivid/vivid-tpg.h b/uti
 index 8ef3e52ba3be..76c373a7b4f1 100644
 --- a/devel/v4l/patchwork//drivers/media/platform/vivid/vivid-tpg.h
 +++ b/utils/v4l2-ctl/vivid-tpg.h
-@@ -20,13 +20,47 @@
+@@ -20,13 +20,48 @@
  #ifndef _VIVID_TPG_H_
  #define _VIVID_TPG_H_
  
@@ -27,6 +27,7 @@ index 8ef3e52ba3be..76c373a7b4f1 100644
 +
 +#define __packed __attribute__((packed))
 +#define pr_info printf
++#define noinline
 +
 +static inline void vfree(void *p)
 +{

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to