diff options
| author | Hans Verkuil <hans.verkuil@cisco.com> | 2014-11-17 07:06:42 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-12-01 12:32:27 -0500 |
| commit | d5735d64e1cebb3748e64f926fa7c35ffabd7afa (patch) | |
| tree | a90cef6a47151415473612bee90a4d21c97fec22 /include/uapi/linux | |
| parent | ac61e3787315a50d6e30bee47ab315f098ab0d39 (diff) | |
[media] videodev2.h: improve colorspace support
Add support for the new AdobeRGB and BT.2020 colorspaces as needed for
HDMI 2.0.
Add support to specify the Y'CbCr encoding and quantization range explicitly.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'include/uapi/linux')
| -rw-r--r-- | include/uapi/linux/videodev2.h | 99 |
1 files changed, 89 insertions, 10 deletions
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 1c2f84fd4d99..ced659e1b9f6 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h | |||
| @@ -178,30 +178,103 @@ enum v4l2_memory { | |||
| 178 | 178 | ||
| 179 | /* see also http://vektor.theorem.ca/graphics/ycbcr/ */ | 179 | /* see also http://vektor.theorem.ca/graphics/ycbcr/ */ |
| 180 | enum v4l2_colorspace { | 180 | enum v4l2_colorspace { |
| 181 | /* ITU-R 601 -- broadcast NTSC/PAL */ | 181 | /* SMPTE 170M: used for broadcast NTSC/PAL SDTV */ |
| 182 | V4L2_COLORSPACE_SMPTE170M = 1, | 182 | V4L2_COLORSPACE_SMPTE170M = 1, |
| 183 | 183 | ||
| 184 | /* 1125-Line (US) HDTV */ | 184 | /* Obsolete pre-1998 SMPTE 240M HDTV standard, superseded by Rec 709 */ |
| 185 | V4L2_COLORSPACE_SMPTE240M = 2, | 185 | V4L2_COLORSPACE_SMPTE240M = 2, |
| 186 | 186 | ||
| 187 | /* HD and modern captures. */ | 187 | /* Rec.709: used for HDTV */ |
| 188 | V4L2_COLORSPACE_REC709 = 3, | 188 | V4L2_COLORSPACE_REC709 = 3, |
| 189 | 189 | ||
| 190 | /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */ | 190 | /* |
| 191 | * Deprecated, do not use. No driver will ever return this. This was | ||
| 192 | * based on a misunderstanding of the bt878 datasheet. | ||
| 193 | */ | ||
| 191 | V4L2_COLORSPACE_BT878 = 4, | 194 | V4L2_COLORSPACE_BT878 = 4, |
| 192 | 195 | ||
| 193 | /* These should be useful. Assume 601 extents. */ | 196 | /* |
| 197 | * NTSC 1953 colorspace. This only makes sense when dealing with | ||
| 198 | * really, really old NTSC recordings. Superseded by SMPTE 170M. | ||
| 199 | */ | ||
| 194 | V4L2_COLORSPACE_470_SYSTEM_M = 5, | 200 | V4L2_COLORSPACE_470_SYSTEM_M = 5, |
| 201 | |||
| 202 | /* | ||
| 203 | * EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when | ||
| 204 | * dealing with really old PAL/SECAM recordings. Superseded by | ||
| 205 | * SMPTE 170M. | ||
| 206 | */ | ||
| 195 | V4L2_COLORSPACE_470_SYSTEM_BG = 6, | 207 | V4L2_COLORSPACE_470_SYSTEM_BG = 6, |
| 196 | 208 | ||
| 197 | /* I know there will be cameras that send this. So, this is | 209 | /* |
| 198 | * unspecified chromaticities and full 0-255 on each of the | 210 | * Effectively shorthand for V4L2_COLORSPACE_SRGB, V4L2_YCBCR_ENC_601 |
| 199 | * Y'CbCr components | 211 | * and V4L2_QUANTIZATION_FULL_RANGE. To be used for (Motion-)JPEG. |
| 200 | */ | 212 | */ |
| 201 | V4L2_COLORSPACE_JPEG = 7, | 213 | V4L2_COLORSPACE_JPEG = 7, |
| 202 | 214 | ||
| 203 | /* For RGB colourspaces, this is probably a good start. */ | 215 | /* For RGB colorspaces such as produces by most webcams. */ |
| 204 | V4L2_COLORSPACE_SRGB = 8, | 216 | V4L2_COLORSPACE_SRGB = 8, |
| 217 | |||
| 218 | /* AdobeRGB colorspace */ | ||
| 219 | V4L2_COLORSPACE_ADOBERGB = 9, | ||
| 220 | |||
| 221 | /* BT.2020 colorspace, used for UHDTV. */ | ||
| 222 | V4L2_COLORSPACE_BT2020 = 10, | ||
| 223 | }; | ||
| 224 | |||
| 225 | enum v4l2_ycbcr_encoding { | ||
| 226 | /* | ||
| 227 | * Mapping of V4L2_YCBCR_ENC_DEFAULT to actual encodings for the | ||
| 228 | * various colorspaces: | ||
| 229 | * | ||
| 230 | * V4L2_COLORSPACE_SMPTE170M, V4L2_COLORSPACE_470_SYSTEM_M, | ||
| 231 | * V4L2_COLORSPACE_470_SYSTEM_BG, V4L2_COLORSPACE_ADOBERGB and | ||
| 232 | * V4L2_COLORSPACE_JPEG: V4L2_YCBCR_ENC_601 | ||
| 233 | * | ||
| 234 | * V4L2_COLORSPACE_REC709: V4L2_YCBCR_ENC_709 | ||
| 235 | * | ||
| 236 | * V4L2_COLORSPACE_SRGB: V4L2_YCBCR_ENC_SYCC | ||
| 237 | * | ||
| 238 | * V4L2_COLORSPACE_BT2020: V4L2_YCBCR_ENC_BT2020 | ||
| 239 | * | ||
| 240 | * V4L2_COLORSPACE_SMPTE240M: V4L2_YCBCR_ENC_SMPTE240M | ||
| 241 | */ | ||
| 242 | V4L2_YCBCR_ENC_DEFAULT = 0, | ||
| 243 | |||
| 244 | /* ITU-R 601 -- SDTV */ | ||
| 245 | V4L2_YCBCR_ENC_601 = 1, | ||
| 246 | |||
| 247 | /* Rec. 709 -- HDTV */ | ||
| 248 | V4L2_YCBCR_ENC_709 = 2, | ||
| 249 | |||
| 250 | /* ITU-R 601/EN 61966-2-4 Extended Gamut -- SDTV */ | ||
| 251 | V4L2_YCBCR_ENC_XV601 = 3, | ||
| 252 | |||
| 253 | /* Rec. 709/EN 61966-2-4 Extended Gamut -- HDTV */ | ||
| 254 | V4L2_YCBCR_ENC_XV709 = 4, | ||
| 255 | |||
| 256 | /* sYCC (Y'CbCr encoding of sRGB) */ | ||
| 257 | V4L2_YCBCR_ENC_SYCC = 5, | ||
| 258 | |||
| 259 | /* BT.2020 Non-constant Luminance Y'CbCr */ | ||
| 260 | V4L2_YCBCR_ENC_BT2020 = 6, | ||
| 261 | |||
| 262 | /* BT.2020 Constant Luminance Y'CbcCrc */ | ||
| 263 | V4L2_YCBCR_ENC_BT2020_CONST_LUM = 7, | ||
| 264 | |||
| 265 | /* SMPTE 240M -- Obsolete HDTV */ | ||
| 266 | V4L2_YCBCR_ENC_SMPTE240M = 8, | ||
| 267 | }; | ||
| 268 | |||
| 269 | enum v4l2_quantization { | ||
| 270 | /* | ||
| 271 | * The default for R'G'B' quantization is always full range. For | ||
| 272 | * Y'CbCr the quantization is always limited range, except for | ||
| 273 | * SYCC, XV601, XV709 or JPEG: those are full range. | ||
| 274 | */ | ||
| 275 | V4L2_QUANTIZATION_DEFAULT = 0, | ||
| 276 | V4L2_QUANTIZATION_FULL_RANGE = 1, | ||
| 277 | V4L2_QUANTIZATION_LIM_RANGE = 2, | ||
| 205 | }; | 278 | }; |
| 206 | 279 | ||
| 207 | enum v4l2_priority { | 280 | enum v4l2_priority { |
| @@ -294,6 +367,8 @@ struct v4l2_pix_format { | |||
| 294 | __u32 colorspace; /* enum v4l2_colorspace */ | 367 | __u32 colorspace; /* enum v4l2_colorspace */ |
| 295 | __u32 priv; /* private data, depends on pixelformat */ | 368 | __u32 priv; /* private data, depends on pixelformat */ |
| 296 | __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ | 369 | __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ |
| 370 | __u32 ycbcr_enc; /* enum v4l2_ycbcr_encoding */ | ||
| 371 | __u32 quantization; /* enum v4l2_quantization */ | ||
| 297 | }; | 372 | }; |
| 298 | 373 | ||
| 299 | /* Pixel format FOURCC depth Description */ | 374 | /* Pixel format FOURCC depth Description */ |
| @@ -1777,6 +1852,8 @@ struct v4l2_plane_pix_format { | |||
| 1777 | * @plane_fmt: per-plane information | 1852 | * @plane_fmt: per-plane information |
| 1778 | * @num_planes: number of planes for this format | 1853 | * @num_planes: number of planes for this format |
| 1779 | * @flags: format flags (V4L2_PIX_FMT_FLAG_*) | 1854 | * @flags: format flags (V4L2_PIX_FMT_FLAG_*) |
| 1855 | * @ycbcr_enc: enum v4l2_ycbcr_encoding, Y'CbCr encoding | ||
| 1856 | * @quantization: enum v4l2_quantization, colorspace quantization | ||
| 1780 | */ | 1857 | */ |
| 1781 | struct v4l2_pix_format_mplane { | 1858 | struct v4l2_pix_format_mplane { |
| 1782 | __u32 width; | 1859 | __u32 width; |
| @@ -1788,7 +1865,9 @@ struct v4l2_pix_format_mplane { | |||
| 1788 | struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; | 1865 | struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; |
| 1789 | __u8 num_planes; | 1866 | __u8 num_planes; |
| 1790 | __u8 flags; | 1867 | __u8 flags; |
| 1791 | __u8 reserved[10]; | 1868 | __u8 ycbcr_enc; |
| 1869 | __u8 quantization; | ||
| 1870 | __u8 reserved[8]; | ||
| 1792 | } __attribute__ ((packed)); | 1871 | } __attribute__ ((packed)); |
| 1793 | 1872 | ||
| 1794 | /** | 1873 | /** |
