]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android-sdk/kernel-video.git/commitdiff
Initial Open Color format Definitions (OCD).
authorDavid Sin <davidsin@ti.com>
Tue, 8 Nov 2011 20:55:17 +0000 (14:55 -0600)
committerPradeep Venkatasubbarao <pradeepv@ti.com>
Fri, 13 Sep 2013 06:03:47 +0000 (11:33 +0530)
OCD is a set of Open Color format Definitions.  Color formats
are used in everything from BLTers to video codecs,
and from cameras to displays.  But although there are
plenty of common formats, the definition of the code specifying
them is never the same.

OCD attempts to solve this problem.  It provides logical color
format codes, and is extensible.

Change-Id: I56ef49f451ab9c194418500d833d204a83f66edd
Signed-off-by: Rick Tillery <rtillery@ti.com>
Signed-off-by: David Sin <davidsin@ti.com>
Signed-off-by: Rodrigo Obregon <robregon@ti.com>
Signed-off-by: Sundar Raman <sunds@ti.com>
include/linux/ocd.h [new file with mode: 0644]

diff --git a/include/linux/ocd.h b/include/linux/ocd.h
new file mode 100644 (file)
index 0000000..250b7a1
--- /dev/null
@@ -0,0 +1,781 @@
+/*
+ * ocd.h
+ *
+ * Open Color format Definitions
+ *
+ * Copyright (C) 2011 Texas Instruments, Inc.
+ *
+ * This file defines the Open Color format Definitions (OCD), an open,
+ * extensible, color format definition.
+ *
+ * This package is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef OCD_H
+#define OCD_H
+
+/*
+ * ocdformat - specifies one of the supported color formats
+ *
+ * ocdformat consists of 8 bits indicating the vendor ID, followed by 24 bits
+ * specified by the vendor.
+ *
+ * VENDOR_ALL is a common ID with formats defined below.
+ */
+
+/****** Bits 31-24 are the vendor ID. The other 24 are vendor defined. ******/
+#define OCDFMTDEF_VENDOR_SHIFT 24
+#define OCDFMTDEF_VENDOR_MASK (0xFF << OCDFMTDEF_VENDOR_SHIFT)
+
+#define OCDFMTDEF_VENDOR_ALL \
+       (0x00 << OCDFMTDEF_VENDOR_SHIFT) /* Common format */
+#define OCDFMTDEF_VENDOR_TI  \
+       (0x01 << OCDFMTDEF_VENDOR_SHIFT) /* Texas Instruments, Inc. */
+/* 0xF0-0xFF reserved */
+
+/***** OCDFMTDEF_VENDOR_ALL *****/
+/* The formats in this group are created using combinations of the values
+   listed below. */
+
+/*
+ * 33222222 222 21 1  1  1  11 111  1
+ * 10987654 321 09 8  7  6  54 321  0  9 876 543210
+ * [------] [-] [] |  |  |  [] [-]  |  | [-] [----]
+ *    |      |  |  |  |  |  |   |   |  |  |    |
+ *    |      |  |  |  |  |  |   |   |  |  |  color bits minus 1
+ *    |      |  |  |  |  |  |   |   |  |  |
+ *    |      |  |  |  |  |  |   |   |  | container
+ *    |      |  |  |  |  |  |   |   |  |
+ *    |      |  |  |  |  |  |   |   | left justified
+ *    |      |  |  |  |  |  |   |   |
+ *    |      |  |  |  |  |  |   | reversed
+ *    |      |  |  |  |  |  |   |
+ *    |      |  |  |  |  |  | layout
+ *    |      |  |  |  |  |  |
+ *    |      |  |  |  |  | subsampling
+ *    |      |  |  |  |  |
+ *    |      |  |  |  | subsample position     \
+ *    |      |  |  |  |                               |
+ *    |      |  |  | non-premult/fill empty 0  > alpha components
+ *    |      |  |  |                          |
+ *    |      |  | alpha                               /
+ *    |      |  |
+ *    |      | standard
+ *    |      |
+ *    |    color space
+ *    |
+ * vendor ID (VENDOR_ALL = 0x00)
+ */
+
+/**** Bits 23-21 define the color space. ****/
+#define OCDFMTDEF_CS_SHIFT 21
+#define OCDFMTDEF_CS_MASK (7 << OCDFMTDEF_CS_SHIFT)
+
+#define OCDFMTDEF_CS_MONO \
+       (0 << OCDFMTDEF_CS_SHIFT) /* Monochrome (luma only) */
+#define OCDFMTDEF_CS_LUT \
+       (1 << OCDFMTDEF_CS_SHIFT) /* Look-up table (using palette) */
+#define OCDFMTDEF_CS_RGB \
+       (2 << OCDFMTDEF_CS_SHIFT) /* Red, green, blue */
+#define OCDFMTDEF_CS_YCbCr \
+       (3 << OCDFMTDEF_CS_SHIFT) /* YCbCr (YUV) (luma & chroma) */
+#define OCDFMTDEF_CS_ALPHA \
+       (4 << OCDFMTDEF_CS_SHIFT) /* Alpha only (transparency) */
+/* 5 reserved */
+/* 6 reserved */
+/* 7 reserved */
+
+/**** Bits 20-19 define the standard ****/
+#define OCDFMTDEF_STD_SHIFT 19
+#define OCDFMTDEF_STD_MASK (3 << OCDFMTDEF_STD_SHIFT)
+
+#define OCDFMTDEF_STD_ITUR_601_YCbCr \
+       (0 << OCDFMTDEF_STD_SHIFT) /* ITU-R BT.601 - YCbCr only */
+/* 0 default for non-YCbCr */
+#define OCDFMTDEF_STD_ITUR_709_YCbCr \
+       (1 << OCDFMTDEF_STD_SHIFT) /* ITU-R BT.709 - YCbCr only */
+/* 1 reserved for non-YCbCr */
+/* 2 reserved */
+#define OCDFMTDEF_FULLSCALE_YCbCr \
+       (3 << OCDFMTDEF_STD_SHIFT) /* RGB 0 to 255 =>
+                                     YCbCr 0 to 255, -128 to 127 */
+/* 3 reserved for non-YCbCr */
+
+/**** Bits 18-16 are component modifiers for non-alpha c/s only ****/
+#define OCDFMTDEF_ALPHA        \
+       (1 << 18) /* An alpha component is added to the format */
+#define OCDFMTDEF_NON_PREMULT \
+       (1 << 17) /* Component(s) is(are) not premultiplied by the alpha
+                    (default is premultiplied) */
+#define OCDFMTDEF_FILL_EMPTY_0 \
+       (1 << 17) /* Empty bits are hard-wired to 0 (default is 1) */
+#define OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED \
+       (0 << 16) /* Subsamples aligned w/1st non-subsample (e.g. MPEG-2) */
+#define OCDFMTDEF_SUBSAMPLE_HORZ_CENTERED \
+       (1 << 16) /* Subsamples are between non-subsamples (e.g. MPEG-1) */
+
+/*** Bits 18-16 are used differently for alpha c/s ***/
+/* Bit 18 is reserved */
+/*** Bits 17-16 define the number of alpha components for alpha c/s ***/
+#define OCDFMTDEF_ALPHA_COMPONENTS_SHIFT 16
+#define OCDFMTDEF_ALPHA_COMPONENTS_MASK (3 << OCDFMTDEF_ALPHA_COMPONENTS_SHIFT)
+
+#define OCDFMTDEF_ALPHA_COMPONENTS_1 (0 << OCDFMTDEF_ALPHA_COMPONENTS_SHIFT)
+#define OCDFMTDEF_ALPHA_COMPONENTS_2 (1 << OCDFMTDEF_ALPHA_COMPONENTS_SHIFT)
+#define OCDFMTDEF_ALPHA_COMPONENTS_3 (2 << OCDFMTDEF_ALPHA_COMPONENTS_SHIFT)
+#define OCDFMTDEF_ALPHA_COMPONENTS_4 (3 << OCDFMTDEF_ALPHA_COMPONENTS_SHIFT)
+
+/**** Bits 15-14 define subsampling ****/
+#define OCDFMTDEF_SUBSAMPLE_SHIFT 14
+#define OCDFMTDEF_SUBSAMPLE_MASK       (3 << OCDFMTDEF_SUBSAMPLE_SHIFT)
+
+#define OCDFMTDEF_SUBSAMPLE_NONE \
+       (0 << OCDFMTDEF_SUBSAMPLE_SHIFT) /* No subsampling;
+                                           each pixel has each component */
+#define OCDFMTDEF_SUBSAMPLE_422_YCbCr \
+       (1 << OCDFMTDEF_SUBSAMPLE_SHIFT) /* 4:2:2 subsampling;
+                                           each horizontal pair of pixels
+                                           has one Y (luma) component each,
+                                           but shares one Cb and Cr (chroma)
+                                           component. */
+/* 1 reserved for non-YCbCr */
+#define OCDFMTDEF_SUBSAMPLE_420_YCbCr \
+       (2 << OCDFMTDEF_SUBSAMPLE_SHIFT) /* 4:2:0 subsampling;
+                                           each square of four pixels has
+                                           one Y (luma) component each, but
+                                           shares one Cb and Cr (chroma)
+                                           component. */
+/* 2 reserved for non-YCbCr */
+#define OCDFMTDEF_SUBSAMPLE_411_YCbCr \
+       (3 << OCDFMTDEF_SUBSAMPLE_SHIFT) /* 4:1:1 subsampling;
+                                           each horizontal four pixels have
+                                           one Y (luma) component each, but
+                                           shares one Cb and Cr (chroma)
+                                           component. */
+/* 3 reserved for non-YCbCr */
+
+/**** Bits 13-11 define the memory layout
+      (combined with _REVERSED and _LEFT_JUSTIFIED) ****/
+#define OCDFMTDEF_LAYOUT_SHIFT 11
+#define OCDFMTDEF_LAYOUT_MASK (7 << OCDFMTDEF_LAYOUT_SHIFT)
+
+#define OCDFMTDEF_PACKED \
+       (0 << OCDFMTDEF_LAYOUT_SHIFT) /* Components interleaved together */
+#define OCDFMTDEF_DISTRIBUTED \
+       (1 << OCDFMTDEF_LAYOUT_SHIFT) /* Components are distributed evenly
+                                        across the container; e.g. a 64-bit
+                                        container with four 8-bit components
+                                        are distributed with 8 bits between
+                                        them: __C0__C1__C2__C3 */
+#define OCDFMTDEF_2_PLANE_YCbCr \
+       (2 << OCDFMTDEF_LAYOUT_SHIFT) /* Y component is separated from Cb & Cr
+                                        components.  After the Y plane, an
+                                        interleaved CbCr plane follows. */
+/* 2 reserved for non-YCbCr */
+#define OCDFMTDEF_3_PLANE_STACKED \
+       (3 << OCDFMTDEF_LAYOUT_SHIFT) /* Y, Cb, and Cr components are
+                                        separated.  After the Y plane is a Cb
+                                        plane, and then a Cr plane. */
+/* 3 reserved for non-YCbCr and non-RGB */
+/* 4 reserved */
+/* 5 reserved */
+/* 6 reserved */
+#define OCDFMTDEF_3_PLANE_SIDE_BY_SIDE_YCbCr \
+       (7 << OCDFMTDEF_LAYOUT_SHIFT) /* Y, Cb, and Cr components are
+                                        separated.  After the Y plane the Cb
+                                        and Cr planes are separated but
+                                        side-by-side in memory (interleaved
+                                        on a line-by-line basis). */
+/* 7 reserved for non-YCbCr */
+
+/**** Bits 10-9 are layout modifiers. ****/
+#define OCDFMTDEF_REVERSED \
+       (1 << 10) /* Order of components reversed (default is RGB or CbCr) */
+#define OCDFMTDEF_LEFT_JUSTIFIED \
+       (1 << 9) /* Components are shifted left (default is shifted right);
+                   for 3-plane YCbCr, this indicates wasted space to the
+                   right of the Cb & Cr planes (stride matches Y plane). */
+
+/**** Bits 6-8 specify the container type. ****/
+#define OCDFMTDEF_CONTAINER_SHIFT 6
+#define OCDFMTDEF_CONTAINER_MASK (7 << OCDFMTDEF_CONTAINER_SHIFT)
+
+#define OCDFMTDEF_CONTAINER_8BIT  (0 << OCDFMTDEF_CONTAINER_SHIFT)
+#define OCDFMTDEF_CONTAINER_16BIT (1 << OCDFMTDEF_CONTAINER_SHIFT)
+#define OCDFMTDEF_CONTAINER_24BIT (2 << OCDFMTDEF_CONTAINER_SHIFT)
+#define OCDFMTDEF_CONTAINER_32BIT (3 << OCDFMTDEF_CONTAINER_SHIFT)
+/* 4 (0x008000) reserved */
+#define OCDFMTDEF_CONTAINER_48BIT (5 << OCDFMTDEF_CONTAINER_SHIFT)
+/* 6 (0x00C000) reserved */
+#define OCDFMTDEF_CONTAINER_64BIT (7 << OCDFMTDEF_CONTAINER_SHIFT)
+
+/**** Bits 0-5 contain the total number of component bits minus one. ****/
+/* To calculate the number of bits for each RGBA component, use the following
+ * formula:
+ *
+ * green bits = int((color bits + 2) / 3)
+ * blue bits = int((color bits - green bits) / 2)
+ * red bits = color bits - green bits - blue bits
+ * alpha bits (when present) = container size - color bits
+ *
+ * Ex. 1:  RGB16 -> 16 bits
+ *        green bits = int((16 + 2) / 3) = 6
+ *         blue bits = int((16 - 6) / 2) = 5
+ *         red bits = 16 - 6 - 5 = 5
+ *         alpha bits = n/a
+ * Ex. 2:  ARGB16 -> 16 bits
+ *        green bits = int((16 + 2) / 3) = 6
+ *         blue bits = int((16 - 6) / 2) = 5
+ *         red bits = 16 - 6 - 5 = 5
+ *         alpha bits = 24 - 16 = 8
+ * Ex. 3:  RGB32 -> 32 bits
+ *        green bits = int((32 + 2) / 3) = 11
+ *        blue bits = int((32 - 11) / 2) = 10
+ *        red bits = 32 - 11 - 10 = 11
+ *        alpha bits = n/a
+ *
+ * For planar formats, the container indicates the total number of bits on the
+ * subsampled boundary, while the component bits are the average number of
+ * bits per pixel.
+ *
+ * Ex. 1:  YV12 -> YCbCr 4:2:0 w/8-bit samples -> 4x8 + 2x8 = 48 bit container
+ *        48 bits / 4 pixels = 12 bpp
+ * Ex. 2:  NV16 -> YCbCr 4:2:2 w/8-bit samples -> 2x8 + 2x8 = 32 bit container
+ *        24 bits / 2 pixels = 16 bpp
+ */
+#define OCDFMTDEF_COMPONENTSIZEMINUS1_SHIFT 0
+#define OCDFMTDEF_COMPONENTSIZEMINUS1_MASK \
+       (0x3F << OCDFMTDEF_COMPONENTSIZEMINUS1_SHIFT)
+
+
+/*
+ * The formats below are constructed from the definitions above.  However, not
+ * all formats possible are specified (and named) below.  The other formats
+ * which can be uniquely formed using the above definitions are legitimate
+ * formats, and may be used as well.
+ */
+enum ocdformat {
+       OCDFMT_UNKNOWN = -1,
+       OCDFMT_NONE = OCDFMT_UNKNOWN,
+
+ /*** Alpha only ***/
+ /** Packed **/
+       OCDFMT_ALPHA1 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_1 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (1 - 1),
+       OCDFMT_ALPHA2 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_1 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (2 - 1),
+       OCDFMT_ALPHA4 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_1 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (4 - 1),
+       OCDFMT_ALPHA8 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_1 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (8 - 1),
+ /* Sub-pixel */
+       OCDFMT_ALPHA4x1 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_4 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (4 - 1),
+       OCDFMT_ALPHA3x8 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_3 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_24BIT |
+                       (24 - 1),
+       OCDFMT_ALPHA4x8 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_ALPHA |
+                       OCDFMTDEF_ALPHA_COMPONENTS_4 |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_32BIT |
+                       (32 - 1),
+
+ /*** Monochrome ***/
+ /** Packed **/
+       OCDFMT_MONO1 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_MONO |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (1 - 1),
+       OCDFMT_MONO2 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_MONO |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (2 - 1),
+       OCDFMT_MONO4 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_MONO |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (4 - 1),
+       OCDFMT_MONO8 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_MONO |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (8 - 1),
+
+  /*** Palettized (look-up-table) ***/
+  /** Packed **/
+       OCDFMT_LUT1 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_LUT |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (1 - 1),
+       OCDFMT_LUT2 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_LUT |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (2 - 1),
+       OCDFMT_LUT4 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_LUT |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (4 - 1),
+       OCDFMT_LUT8 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_LUT |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_8BIT |
+                       (8 - 1),
+
+ /*** RGB ***/
+ /** Packed **/
+ /* No subsampling */
+       OCDFMT_RGB12 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_16BIT |
+                       (12 - 1),                       /* (15):4:4:4 */
+       OCDFMT_xRGB12 = OCDFMT_RGB12,
+       OCDFMT_1RGB12 = OCDFMT_xRGB12,
+       OCDFMT_0RGB12 = OCDFMT_xRGB12 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):4:4:4 */
+
+       OCDFMT_BGR12 =  OCDFMT_RGB12 |
+                       OCDFMTDEF_REVERSED,             /* (15):4:4:4 */
+       OCDFMT_xBGR12 = OCDFMT_BGR12,
+       OCDFMT_1BGR12 = OCDFMT_xBGR12,
+       OCDFMT_0BGR12 = OCDFMT_xBGR12 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):4:4:4 */
+
+       OCDFMT_RGBx12 = OCDFMT_xRGB12 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 4:4:4:(15) */
+       OCDFMT_RGB112 = OCDFMT_RGBx12,
+       OCDFMT_RGB012 = OCDFMT_RGBx12 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 4:4:4:(0) */
+
+       OCDFMT_BGRx12 = OCDFMT_xRGB12 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 4:4:4:(15) */
+       OCDFMT_BGR112 = OCDFMT_BGRx12,
+       OCDFMT_BGR012 = OCDFMT_BGRx12 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 4:4:4:(0) */
+
+       OCDFMT_RGB15 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_16BIT |
+                       (15 - 1),                       /* (1):5:5:5 */
+       OCDFMT_xRGB15 = OCDFMT_RGB15,
+       OCDFMT_1RGB15 = OCDFMT_xRGB15,
+       OCDFMT_0RGB15 = OCDFMT_xRGB15 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):5:5:5 */
+
+       OCDFMT_BGR15 =  OCDFMT_RGB15 |
+                       OCDFMTDEF_REVERSED,             /* (1):5:5:5 */
+       OCDFMT_xBGR15 = OCDFMT_BGR15,
+       OCDFMT_1BGR15 = OCDFMT_xBGR15,
+       OCDFMT_0BGR15 = OCDFMT_xBGR15 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):5:5:5 */
+
+       OCDFMT_RGBx15 = OCDFMT_RGB15 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 5:5:5:(1) */
+       OCDFMT_RGB115 = OCDFMT_RGBx15,
+       OCDFMT_RGB015 = OCDFMT_RGBx15 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 5:5:5:(0) */
+
+       OCDFMT_BGRx15 = OCDFMT_RGB15 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 5:5:5:(1) */
+       OCDFMT_BGR115 = OCDFMT_BGRx15,
+       OCDFMT_BGR015 = OCDFMT_BGRx15 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 5:5:5:(0) */
+
+       OCDFMT_RGB16 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_16BIT |
+                       (16 - 1),                       /* 5:6:5 */
+       OCDFMT_BGR16 =  OCDFMT_RGB16 |
+                       OCDFMTDEF_REVERSED,             /* 5:6:5 */
+
+       OCDFMT_RGB24 =  OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_24BIT |
+                       (24 - 1),                       /* 8:8:8 */
+       OCDFMT_BGR24 =  OCDFMT_RGB24 |
+                       OCDFMTDEF_REVERSED,             /* 8:8:8 */
+
+       OCDFMT_xRGB16 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_24BIT |
+                       (16 - 1),                       /* (255):5:6:5 */
+       OCDFMT_1RGB16 = OCDFMT_xRGB16,
+       OCDFMT_0RGB16 = OCDFMT_xRGB16  |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):5:6:5 */
+
+       OCDFMT_xBGR16 = OCDFMT_xRGB16 |
+                       OCDFMTDEF_REVERSED,             /* (255):5:6:5 */
+       OCDFMT_1BGR16 = OCDFMT_xBGR16,
+       OCDFMT_0BGR16 = OCDFMT_xBGR16  |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):5:6:5 */
+
+       OCDFMT_RGBx16 = OCDFMT_xRGB16 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 5:6:5:(255) */
+       OCDFMT_RGB116 = OCDFMT_RGBx16,
+       OCDFMT_RGB016 = OCDFMT_RGBx16  |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 5:6:5:(0) */
+
+       OCDFMT_BGRx16 = OCDFMT_xRGB16 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 5:6:5:(255) */
+       OCDFMT_BGR116 = OCDFMT_BGRx16,
+       OCDFMT_BGR016 = OCDFMT_BGRx16  |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 5:6:5:(0) */
+
+       OCDFMT_xRGB24 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_32BIT |
+                       (24 - 1),                       /* (255):8:8:8 */
+       OCDFMT_1RGB24 = OCDFMT_xRGB24,
+       OCDFMT_0RGB24 = OCDFMT_xRGB24 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):8:8:8 */
+
+       OCDFMT_xBGR24 = OCDFMT_xRGB24 |
+                       OCDFMTDEF_REVERSED,             /* (255):8:8:8 */
+       OCDFMT_1BGR24 = OCDFMT_xBGR24,
+       OCDFMT_0BGR24 = OCDFMT_xBGR24 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* (0):8:8:8 */
+
+       OCDFMT_RGBx24 = OCDFMT_xRGB24 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 8:8:8:(255) */
+       OCDFMT_RGB124 = OCDFMT_RGBx24,
+       OCDFMT_RGB024 = OCDFMT_RGBx24 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 8:8:8:(0) */
+
+       OCDFMT_BGRx24 = OCDFMT_xRGB24 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 8:8:8:(255) */
+       OCDFMT_BGR124 = OCDFMT_BGRx24,
+       OCDFMT_BGR024 = OCDFMT_BGRx24 |
+                       OCDFMTDEF_FILL_EMPTY_0,         /* 8:8:8:(0) */
+
+  /* Premultiplied ARGB */
+       OCDFMT_ARGB12 = OCDFMT_xRGB12 |
+                       OCDFMTDEF_ALPHA,                /* 4:4:4:4 */
+       OCDFMT_ABGR12 = OCDFMT_xBGR12 |
+                       OCDFMTDEF_ALPHA,                /* 4:4:4:4 */
+       OCDFMT_RGBA12 = OCDFMT_RGBx12 |
+                       OCDFMTDEF_ALPHA,                /* 4:4:4:4 */
+       OCDFMT_BGRA12 = OCDFMT_BGRx12 |
+                       OCDFMTDEF_ALPHA,                /* 4:4:4:4 */
+
+       OCDFMT_ARGB16 = OCDFMT_xRGB16 |
+                       OCDFMTDEF_ALPHA,                /* 8:5:6:5 */
+       OCDFMT_ABGR16 = OCDFMT_ARGB16 |
+                       OCDFMTDEF_REVERSED,             /* 8:5:6:5 */
+       OCDFMT_RGBA16 = OCDFMT_ARGB16 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 5:6:5:8 */
+       OCDFMT_BGRA16 = OCDFMT_ARGB16 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 5:6:5:8 */
+
+       OCDFMT_ARGB24 = OCDFMT_xRGB24 |
+                       OCDFMTDEF_ALPHA,                /* 8:8:8:8 */
+       OCDFMT_ABGR24 = OCDFMT_xBGR24 |
+                       OCDFMTDEF_ALPHA,                /* 8:8:8:8 */
+       OCDFMT_RGBA24 = OCDFMT_RGBx24 |
+                       OCDFMTDEF_ALPHA,                /* 8:8:8:8 */
+       OCDFMT_BGRA24 = OCDFMT_BGRx24 |
+                       OCDFMTDEF_ALPHA,                /* 8:8:8:8 */
+
+  /* Non-premultiplied ARGB */
+       OCDFMT_nARGB12 =        OCDFMT_ARGB12 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ARGB12_NON_PREMULT = OCDFMT_nARGB12,
+
+       OCDFMT_nABGR12 =        OCDFMT_ABGR12 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ABGR12_NON_PREMULT = OCDFMT_nABGR12,
+
+       OCDFMT_nRGBA12 =        OCDFMT_RGBA12 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_RGBA12_NON_PREMULT = OCDFMT_nRGBA12,
+
+       OCDFMT_nBGRA12 =        OCDFMT_BGRA12 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_BGRA12_NON_PREMULT = OCDFMT_nBGRA12,
+
+       OCDFMT_ARGB15 = OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_RGB |
+                       OCDFMTDEF_ALPHA |
+                       OCDFMTDEF_NON_PREMULT |
+                       OCDFMTDEF_SUBSAMPLE_NONE |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_16BIT |
+                       (15 - 1),                       /* 1:5:5:5 - "normal"
+                                                          format is not
+                                                          premultiplied */
+       OCDFMT_nARGB15 =        OCDFMT_ARGB15,
+       OCDFMT_ARGB15_NON_PREMULT = OCDFMT_nARGB15,
+
+       OCDFMT_ABGR15 = OCDFMT_ARGB15 |
+                       OCDFMTDEF_REVERSED,             /* 1:5:5:5 - "normal"
+                                                          format is not
+                                                          premultiplied */
+       OCDFMT_nABGR15 =        OCDFMT_ABGR15,
+       OCDFMT_ABGR15_NON_PREMULT = OCDFMT_nABGR15,
+
+       OCDFMT_RGBA15 = OCDFMT_ARGB15 |
+                       OCDFMTDEF_LEFT_JUSTIFIED,       /* 5:5:5:1 - "normal"
+                                                          format is not
+                                                          premultiplied */
+       OCDFMT_nRGBA15 =        OCDFMT_RGBA15,
+       OCDFMT_RGBA15_NON_PREMULT = OCDFMT_nRGBA15,
+
+       OCDFMT_BGRA15 = OCDFMT_ARGB15 |
+                       OCDFMTDEF_LEFT_JUSTIFIED |
+                       OCDFMTDEF_REVERSED,             /* 5:5:5:1 - "normal"
+                                                          format is not
+                                                          premultiplied */
+       OCDFMT_nBGRA15 =        OCDFMT_BGRA15,
+       OCDFMT_BGRA15_NON_PREMULT = OCDFMT_nRGBA15,
+
+       OCDFMT_nARGB16 =        OCDFMT_ARGB16 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ARGB16_NON_PREMULT = OCDFMT_nARGB16,
+
+       OCDFMT_nABGR16 =        OCDFMT_ABGR16 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ABGR16_NON_PREMULT =     OCDFMT_nABGR16,
+
+       OCDFMT_nRGBA16 =        OCDFMT_RGBA16 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_RGBA16_NON_PREMULT = OCDFMT_nRGBA16,
+
+       OCDFMT_nBGRA16 = OCDFMT_BGRA16 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_BGRA16_NON_PREMULT = OCDFMT_nBGRA16,
+
+       OCDFMT_nARGB24 =        OCDFMT_ARGB24 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ARGB24_NON_PREMULT = OCDFMT_nARGB24,
+
+       OCDFMT_nABGR24 =        OCDFMT_ABGR24 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_ABGR24_NON_PREMULT = OCDFMT_nABGR24,
+
+       OCDFMT_nRGBA24 =        OCDFMT_RGBA24 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_RGBA24_NON_PREMULT = OCDFMT_nRGBA24,
+
+       OCDFMT_nBGRA24 =        OCDFMT_BGRA24 |
+                       OCDFMTDEF_NON_PREMULT,
+       OCDFMT_BGRA24_NON_PREMULT = OCDFMT_nBGRA24,
+
+  /*** YCbCr ***/
+  /** Packed **/
+  /* YCbCr 4:2:2 */
+       OCDFMT_UYVY =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_422_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_PACKED |
+                       OCDFMTDEF_CONTAINER_32BIT |
+                       (16 - 1),
+       OCDFMT_UYVY_601 = OCDFMT_UYVY |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_UYVY_709 = OCDFMT_UYVY |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+       OCDFMT_Y422 = OCDFMT_UYVY,
+       OCDFMT_Y422_601 = OCDFMT_UYVY_601,
+       OCDFMT_Y422_709 = OCDFMT_UYVY_709,
+
+       OCDFMT_VYUY =   OCDFMT_UYVY |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_VYUY_601 = OCDFMT_VYUY |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_VYUY_709 = OCDFMT_VYUY |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_YUYV =   OCDFMT_UYVY |
+                       OCDFMTDEF_LEFT_JUSTIFIED,
+       OCDFMT_YUYV_601 = OCDFMT_YUYV |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_YUYV_709 = OCDFMT_YUYV |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+       OCDFMT_YUY2 = OCDFMT_YUYV,
+       OCDFMT_YUY2_601 = OCDFMT_YUYV_601,
+       OCDFMT_YUY2_709 = OCDFMT_YUYV_709,
+
+       OCDFMT_YVYU =   OCDFMT_VYUY |
+                       OCDFMTDEF_LEFT_JUSTIFIED,
+       OCDFMT_YVYU_601 = OCDFMT_YVYU |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_YVYU_709 = OCDFMT_YVYU |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+  /** 3-plane **/
+  /* YCbCr 4:2:2 */
+       OCDFMT_YV16 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_422_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_3_PLANE_STACKED |
+                       OCDFMTDEF_CONTAINER_32BIT |
+                       (16 - 1),
+       OCDFMT_YV16_601 = OCDFMT_YV16 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_YV16_709 = OCDFMT_YV16 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+  /* YCbCr 4:2:0 */
+       OCDFMT_IYUV =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_420_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_3_PLANE_STACKED |
+                       OCDFMTDEF_CONTAINER_48BIT |
+                       (12 - 1),
+       OCDFMT_IYUV_601 = OCDFMT_IYUV |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_IYUV_709 = OCDFMT_IYUV |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+       OCDFMT_I420 = OCDFMT_IYUV,
+       OCDFMT_I420_601 = OCDFMT_IYUV_601,
+       OCDFMT_I420_709 = OCDFMT_IYUV_709,
+
+       OCDFMT_YV12 =   OCDFMT_IYUV |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_YV12_601 = OCDFMT_YV12 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_YV12_709 = OCDFMT_YV12 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_IMC3 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_420_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_3_PLANE_STACKED |
+                       OCDFMTDEF_LEFT_JUSTIFIED |      /* Indicates wasted
+                                                          space to the
+                                                          right */
+                       OCDFMTDEF_CONTAINER_48BIT |
+                       (12 - 1),
+       OCDFMT_IMC3_601 = OCDFMT_IMC3 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_IMC3_709 = OCDFMT_IMC3 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_IMC1 =   OCDFMT_IMC3 |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_IMC1_601 = OCDFMT_IMC1 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_IMC1_709 = OCDFMT_IMC1 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_IMC4 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_420_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_3_PLANE_SIDE_BY_SIDE_YCbCr |
+                       OCDFMTDEF_CONTAINER_48BIT |
+                       (12 - 1),
+       OCDFMT_IMC4_601 = OCDFMT_IMC4 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_IMC4_709 = OCDFMT_IMC4 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_IMC2 =   OCDFMT_IMC4 |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_IMC2_601 = OCDFMT_IMC2 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_IMC2_709 = OCDFMT_IMC2 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+  /** 2-plane **/
+  /* YCbCr 4:2:2 */
+       OCDFMT_NV16 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_422_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_2_PLANE_YCbCr |
+                       OCDFMTDEF_CONTAINER_32BIT |
+                       (16 - 1),
+       OCDFMT_NV16_601 = OCDFMT_NV16 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_NV16_709 = OCDFMT_NV16 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_NV61 =   OCDFMT_NV16 |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_NV61_601 = OCDFMT_NV61 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_NV61_709 = OCDFMT_NV61 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+  /* YCbCr 4:2:0 */
+       OCDFMT_NV12 =   OCDFMTDEF_VENDOR_ALL |
+                       OCDFMTDEF_CS_YCbCr |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_420_YCbCr |
+                       OCDFMTDEF_SUBSAMPLE_HORZ_ALIGNED |
+                       OCDFMTDEF_2_PLANE_YCbCr |
+                       OCDFMTDEF_CONTAINER_48BIT |
+                       (12 - 1),
+       OCDFMT_NV12_601 = OCDFMT_NV12 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_NV12_709 = OCDFMT_NV12 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+       OCDFMT_NV21 =   OCDFMT_NV12 |
+                       OCDFMTDEF_REVERSED,
+       OCDFMT_NV21_601 = OCDFMT_NV21 |
+                       OCDFMTDEF_STD_ITUR_601_YCbCr,
+       OCDFMT_NV21_709 = OCDFMT_NV21 |
+                       OCDFMTDEF_STD_ITUR_709_YCbCr,
+
+#ifdef OCD_EXTERNAL_INCLUDE
+#include OCD_EXTERNAL_INCLUDE
+#endif
+};
+
+#endif /* OCD_H */