summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/include/nvcolor.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/include/nvcolor.h')
-rw-r--r--arch/arm/mach-tegra/include/nvcolor.h471
1 files changed, 471 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/include/nvcolor.h b/arch/arm/mach-tegra/include/nvcolor.h
new file mode 100644
index 000000000000..da1218197cd3
--- /dev/null
+++ b/arch/arm/mach-tegra/include/nvcolor.h
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2006-2009 NVIDIA Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef INCLUDED_NVCOLOR_H
+#define INCLUDED_NVCOLOR_H
+
+/*
+ * We provide a very generic, orthogonal way to specify color formats. There
+ * are four steps in specifying a color format:
+ * 1. What is the data type of the color components?
+ * 2. How are the color components packed into words of memory?
+ * 3. How are those color components swizzled into an (x,y,z,w) color vector?
+ * 4. How is that vector interpreted as a color?
+ *
+ * These correspond to NvColorDataType, NvColorComponentPacking,
+ * NV_COLOR_SWIZZLE_*, and NvColorSpace, respectively.
+ *
+ * First, you need to understand NVIDIA's standard way of describing color
+ * units (used in several business units within NVIDIA). Within a word, color
+ * components are ordered from most-significant bit to least-significant bit.
+ * Words are separated by underscores. For example:
+ *
+ * A8R8B8G8 = a single 32-bit word containing 8 bits alpha, 8 bits red, 8 bits
+ * green, 8 bits blue.
+ *
+ * In little endian: Byte 3 || 2 || 1 || 0
+ * Bits 31 0
+ * AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
+ *
+ * In big endian: Byte 0 || 1 || 2 || 3
+ * Bits 31 0
+ * AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
+ *
+ * R8_G8_B8_A8 = four consecutive 8-bit words, consisting the red, green, blue,
+ * and alpha components (in that order).
+ *
+ * In little endian: Byte 0 || 1 || 2 || 3
+ * Bits 76543210765432107654321076543210
+ * RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA
+ *
+ * In big endian: Byte 0 || 1 || 2 || 3
+ * Bits 76543210765432107654321076543210
+ * RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA
+ *
+ * R5G6B5 = a single 16-bit word containing 5 bits red, 6 bits green, 5 bits
+ * blue.
+ *
+ * In little endian: Byte 1 || 0
+ * Bits 15 0
+ * RRRRRGGGGGGBBBBB
+ *
+ * In big endian: Byte 0 || 1
+ * Bits 15 0
+ * RRRRRGGGGGGBBBBB
+ *
+ * In cases where a word is less than 8 bits (e.g. an A1 1-bit alpha mask
+ * bitmap), pixels are ordered from LSB to MSB within a word. That is, the LSB
+ * of the byte is the pixel at x%8 == 0, while the MSB of the byte is the pixel
+ * at x%8 == 7.
+ *
+ * Also, note equivalences such as the following.
+ *
+ * In little endian: R8_G8_B8_A8 = A8B8G8R8.
+ * In big endian: R8_G8_B8_A8 = R8G8B8A8.
+ *
+ * Some YUV "422" formats have different formats for pixels whose X is even vs.
+ * those whose X is odd. Every pixel contains a Y component, while (for
+ * example) only even pixels might contain a U component and only odd pixels
+ * might contain a V component. Such formats use a double-underscore to
+ * separate the even pixels from the odd pixels. For example, the format just
+ * described might be referred to as Y8_U8__Y8_V8.
+ *
+ * Here is how we would we go about mapping a color format (say, R5G6B5) to the
+ * NvColorFormat enums.
+ *
+ * 1. Remove the color information and rename the component R,G,B to generic
+ * names X,Y,Z. Our NvColorComponentPacking is therefore X5Y6Z5.
+ *
+ * 2. Pick the appropriate color space. This is plain old RGBA, so we pick
+ * NvColorSpace_LinearRGBA.
+ *
+ * 3. Determine what swizzle to use. We need R=X, G=Y, B=Z, and A=1, so we
+ * pick the "XYZ1" swizzle.
+ *
+ * 4. Pick the data type of the color components. This is just plain integers,
+ * so NvColorDataType_Integer is our choice.
+ */
+
+/**
+ * We provide a flexible way to map the input vector (x,y,z,w) to an output
+ * vector (x',y',z',w'). Each output component can select any of the input
+ * components or the constants zero or one. For example, the swizzle "XXX1"
+ * can be used to create a luminance pixel from the input x component, while
+ * the swizzle "ZYXW" swaps the X and Z components (converts between RGBA and
+ * BGRA).
+ */
+#define NV_COLOR_SWIZZLE_X 0
+#define NV_COLOR_SWIZZLE_Y 1
+#define NV_COLOR_SWIZZLE_Z 2
+#define NV_COLOR_SWIZZLE_W 3
+#define NV_COLOR_SWIZZLE_0 4
+#define NV_COLOR_SWIZZLE_1 5
+
+#define NV_COLOR_MAKE_SWIZZLE(x,y,z,w) \
+ ((NV_COLOR_SWIZZLE_##x) | ((NV_COLOR_SWIZZLE_##y) << 3) | \
+ ((NV_COLOR_SWIZZLE_##z) << 6) | ((NV_COLOR_SWIZZLE_##w) << 9))
+
+#define NV_COLOR_SWIZZLE_GET_X(swz) (((swz) ) & 7)
+#define NV_COLOR_SWIZZLE_GET_Y(swz) (((swz) >> 3) & 7)
+#define NV_COLOR_SWIZZLE_GET_Z(swz) (((swz) >> 6) & 7)
+#define NV_COLOR_SWIZZLE_GET_W(swz) (((swz) >> 9) & 7)
+
+#define NV_COLOR_SWIZZLE_XYZW NV_COLOR_MAKE_SWIZZLE(X,Y,Z,W)
+#define NV_COLOR_SWIZZLE_ZYXW NV_COLOR_MAKE_SWIZZLE(Z,Y,X,W)
+#define NV_COLOR_SWIZZLE_WZYX NV_COLOR_MAKE_SWIZZLE(W,Z,Y,X)
+#define NV_COLOR_SWIZZLE_YZWX NV_COLOR_MAKE_SWIZZLE(Y,Z,W,X)
+#define NV_COLOR_SWIZZLE_XYZ1 NV_COLOR_MAKE_SWIZZLE(X,Y,Z,1)
+#define NV_COLOR_SWIZZLE_YZW1 NV_COLOR_MAKE_SWIZZLE(Y,Z,W,1)
+#define NV_COLOR_SWIZZLE_XXX1 NV_COLOR_MAKE_SWIZZLE(X,X,X,1)
+#define NV_COLOR_SWIZZLE_XZY1 NV_COLOR_MAKE_SWIZZLE(X,Z,Y,1)
+#define NV_COLOR_SWIZZLE_ZYX1 NV_COLOR_MAKE_SWIZZLE(Z,Y,X,1)
+#define NV_COLOR_SWIZZLE_WZY1 NV_COLOR_MAKE_SWIZZLE(W,Z,Y,1)
+#define NV_COLOR_SWIZZLE_X000 NV_COLOR_MAKE_SWIZZLE(X,0,0,0)
+#define NV_COLOR_SWIZZLE_0X00 NV_COLOR_MAKE_SWIZZLE(0,X,0,0)
+#define NV_COLOR_SWIZZLE_00X0 NV_COLOR_MAKE_SWIZZLE(0,0,X,0)
+#define NV_COLOR_SWIZZLE_000X NV_COLOR_MAKE_SWIZZLE(0,0,0,X)
+#define NV_COLOR_SWIZZLE_0XY0 NV_COLOR_MAKE_SWIZZLE(0,X,Y,0)
+#define NV_COLOR_SWIZZLE_XXXY NV_COLOR_MAKE_SWIZZLE(X,X,X,Y)
+#define NV_COLOR_SWIZZLE_YYYX NV_COLOR_MAKE_SWIZZLE(Y,Y,Y,X)
+
+/**
+ * This macro extracts the number of bits per pixel out of an NvColorFormat or
+ * NvColorComponentPacking.
+ */
+#define NV_COLOR_GET_BPP(fmt) (((NvU32)(fmt)) >> 24)
+
+/**
+ * This macro encodes the number of bits per pixel into an
+ * NvColorComponentPacking enum.
+ */
+#define NV_COLOR_SET_BPP(bpp) ((bpp) << 24)
+
+/**
+ * NvColorComponentPacking enumerates the possible ways to pack color
+ * components into words in memory.
+ */
+typedef enum
+{
+ NvColorComponentPacking_X1 = 0x01 | NV_COLOR_SET_BPP(1),
+ NvColorComponentPacking_X2 = 0x02 | NV_COLOR_SET_BPP(2),
+ NvColorComponentPacking_X4 = 0x03 | NV_COLOR_SET_BPP(4),
+ NvColorComponentPacking_X8 = 0x04 | NV_COLOR_SET_BPP(8),
+ NvColorComponentPacking_X3Y3Z2 = 0x05 | NV_COLOR_SET_BPP(8),
+ NvColorComponentPacking_Y4X4 = 0x06 | NV_COLOR_SET_BPP(8),
+ NvColorComponentPacking_X16 = 0x07 | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X4Y4Z4W4 = 0x08 | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X1Y5Z5W5 = 0x09 | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X5Y6Z5 = 0x0A | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X8_Y8 = 0x0B | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X8_Y8__X8_Z8 = 0x0C | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_Y8_X8__Z8_X8 = 0x0D | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_Y6X10 = 0x0E | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_Y4X12 = 0x0F | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_Y2X14 = 0x10 | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X5Y5Z5W1 = 0x11 | NV_COLOR_SET_BPP(16),
+ NvColorComponentPacking_X8_Y8_Z8 = 0x12 | NV_COLOR_SET_BPP(24),
+ NvColorComponentPacking_X32 = 0x13 | NV_COLOR_SET_BPP(32),
+ NvColorComponentPacking_X8Y8Z8W8 = 0x14 | NV_COLOR_SET_BPP(32),
+ NvColorComponentPacking_X11Y11Z10 = 0x15 | NV_COLOR_SET_BPP(32),
+ NvColorComponentPacking_X16Y16 = 0x16 | NV_COLOR_SET_BPP(32),
+ NvColorComponentPacking_X16_Y16 = 0x17 | NV_COLOR_SET_BPP(32),
+ NvColorComponentPacking_X16_Y16_Z16 = 0x18 | NV_COLOR_SET_BPP(48),
+ NvColorComponentPacking_X16_Y16_Z16_W16 = 0x19 | NV_COLOR_SET_BPP(64),
+ NvColorComponentPacking_X16Y16Z16W16 = 0x20 | NV_COLOR_SET_BPP(64),
+ NvColorComponentPacking_X32_Y32 = 0x21 | NV_COLOR_SET_BPP(64),
+ NvColorComponentPacking_X32_Y32_Z32 = 0x22 | NV_COLOR_SET_BPP(96),
+ NvColorComponentPacking_X32_Y32_Z32_W32 = 0x23 | NV_COLOR_SET_BPP(128),
+ NvColorComponentPacking_X32Y32Z32W32 = 0x24 | NV_COLOR_SET_BPP(128),
+
+ NvColorComponentPacking_Force32 = 0x7FFFFFFF
+} NvColorComponentPacking;
+
+/**
+ * NvColorDataType defines the data type of color components.
+ *
+ * The default datatype of color components is 'Integer' which should be used
+ * when the color value is to be intepreted as an integer value ranging from 0
+ * to the maximum value representable by the width of the components (as
+ * specified by the packing of the component). Use 'Integer' also when the
+ * interpretation of color value bits is not known, does not matter or is
+ * context dependent.
+ *
+ * A data type of 'Float' indicates that float values are stored in the
+ * components of the color. The combination of data type 'Float' and the
+ * bit width of the component packing defines the final data format of the
+ * individual component.
+ *
+ * The list below defines the accepted combinations, when adding new
+ * float formats please add an entry into this list.
+ *
+ * - DataType = Float, Component bit width = 32:
+ * A IEEE 754 single precision float (binary32) with 1 sign bit,
+ * 8 exponent bits and 23 mantissa bits.
+ *
+ * - DataType = Float, Component bit width = 16:
+ * A IEEE 754 half precision float (binary16) with 1 sign bit,
+ * 5 exponent bits and 10 mantissa bits.
+ *
+ * - DataType = Float, Component bit width = 10:
+ * An unsigned nvfloat with 5 exponent bits and 5 mantissa bits.
+ *
+ * - DataType = Float, Component bit width = 11:
+ * An unsigned nvfloat with 5 exponent bits and 6 mantissa bits.
+ *
+ */
+typedef enum
+{
+ NvColorDataType_Integer = 0x0,
+ NvColorDataType_Float = 0x1,
+
+ NvColorDataType_Force32 = 0x7FFFFFFF
+} NvColorDataType;
+
+/**
+ * NvColorSpace defines a number of ways of interpreting an (x,y,z,w) tuple as
+ * a color. The most common and basic is linear RGBA, which simply maps X->R,
+ * Y->G, Z->B, and W->A, but various other color spaces also exist.
+ *
+ * Some future candidates for expansion are premultiplied alpha formats and
+ * Z/stencil formats. They have been omitted for now until there is a need.
+ */
+typedef enum
+{
+ /** Linear RGBA color space. */
+ NvColorSpace_LinearRGBA = 1,
+
+ /** sRGB color space with linear alpha. */
+ NvColorSpace_sRGB,
+
+ /** Paletted/color index color space. (data is meaningless w/o the palette)
+ */
+ NvColorSpace_ColorIndex,
+
+ /** YCbCr ITU-R BT.601 color space. */
+ NvColorSpace_YCbCr601,
+
+ /** YCbCr ITU-R BT.601 color space with range reduced YCbCr for VC1 decoded
+ * surfaces. If picture layer of VC1 bit stream has RANGEREDFRM bit set,
+ * decoded YUV data has to be scaled up (range expanded).
+ * For this type of surface, clients should range expand Y,Cb,Cr as follows:
+ * Y = clip( (( Y-128)*2) + 128 );
+ * Cb = clip( ((Cb-128)*2) + 128 );
+ * Cr = clip( ((Cr-128)*2) + 128 );
+ */
+ NvColorSpace_YCbCr601_RR,
+
+ /** YCbCr ITU-R BT.709 color space. */
+ NvColorSpace_YCbCr709,
+
+ /**
+ * Bayer format with the X component mapped to samples as follows.
+ * span 1: R G R G R G R G
+ * span 2: G B G B G B G B
+ * (Y,Z,W are discarded.)
+ */
+ NvColorSpace_BayerRGGB,
+
+ /**
+ * Bayer format with the X component mapped to samples as follows.
+ * span 1: B G B G B G B G
+ * span 2: G R G R G R G R
+ * (Y,Z,W are discarded.)
+ */
+ NvColorSpace_BayerBGGR,
+
+ /**
+ * Bayer format with the X component mapped to samples as follows.
+ * span 1: G R G R G R G R
+ * span 2: B G B G B G B G
+ * (Y,Z,W are discarded.)
+ */
+ NvColorSpace_BayerGRBG,
+
+ /**
+ * Bayer format with the X component mapped to samples as follows.
+ * span 1: G B G B G B G B
+ * span 2: R G R G R G R G
+ * (Y,Z,W are discarded.)
+ */
+ NvColorSpace_BayerGBRG,
+
+ /**
+ * Noncolor data (for example depth, stencil, coverage).
+ */
+ NvColorSpace_NonColor,
+
+ NvColorSpace_Force32 = 0x7FFFFFFF
+} NvColorSpace;
+
+/**
+ * NV_COLOR_MAKE_FORMAT_XXX macros build NvColor values out of the
+ * constituent parts.
+ *
+ * NV_COLOR_MAKE_FORMAT_GENERIC is the generic form that accepts
+ * the NvColorDataType of the format as the fourth parameter.
+ *
+ * NV_COLOR_MAKE_FORMAT is used to build DataType = Integer formats.
+ * This special case macro exists because integer formats are the
+ * overwhelming majority and for retaining backwards compatibility with
+ * code written before addition of NvColor data types.
+ */
+
+#define NV_COLOR_MAKE_FORMAT_GENERIC(ColorSpace, Swizzle, ComponentPacking, DataType) \
+ (((NvColorSpace_##ColorSpace) << 20) | \
+ ((NV_COLOR_SWIZZLE_##Swizzle) << 8) | \
+ ((NvColorDataType_##DataType) << 6) | \
+ (NvColorComponentPacking_##ComponentPacking))
+
+#define NV_COLOR_MAKE_FORMAT(ColorSpace, Swizzle, ComponentPacking) \
+ NV_COLOR_MAKE_FORMAT_GENERIC(ColorSpace, Swizzle, ComponentPacking, Integer)
+
+#define NV_COLOR_GET_COLOR_SPACE(fmt) ((NvU32)(((fmt) >> 20) & 0xF))
+#define NV_COLOR_GET_SWIZZLE(fmt) ((NvU32)(((fmt) >> 8) & 0xFFF))
+#define NV_COLOR_GET_COMPONENT_PACKING(fmt) ((NvU32)((fmt) & 0xFF00003F))
+#define NV_COLOR_GET_DATA_TYPE(fmt) ((NvU32)(((fmt) >> 6) & 0x3))
+
+/**
+ * Each value of NvColorFormat represents a way of laying out pixels in memory.
+ * Some of the most common color formats are listed here, but other formats can
+ * be constructed freely using NV_COLOR_MAKE_FORMAT, so you should generally
+ * use NV_COLOR_GET_* to extract out the constituent parts of the color format
+ * if if you want to provide fully general color format support. (There is no
+ * requirement, of course, that any particular API must support all conceivable
+ * color formats.)
+ */
+typedef enum
+{
+ /**
+ * In some cases we don't know or don't care about the color format of a
+ * block of data. This value can be used as a placeholder. It is
+ * guaranteed that this value (zero) will never collide with any real color
+ * format, based on the way that we construct color format enums.
+ */
+ NvColorFormat_Unspecified = 0,
+
+ // RGBA color formats
+ NvColorFormat_R3G3B2 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZ1, X3Y3Z2),
+ NvColorFormat_A4R4G4B4 = NV_COLOR_MAKE_FORMAT(LinearRGBA, YZWX, X4Y4Z4W4),
+ NvColorFormat_R4G4B4A4 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZW, X4Y4Z4W4),
+ NvColorFormat_A1R5G5B5 = NV_COLOR_MAKE_FORMAT(LinearRGBA, YZWX, X1Y5Z5W5),
+ NvColorFormat_R5G5B5A1 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZW, X5Y5Z5W1),
+ NvColorFormat_R5G6B5 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZ1, X5Y6Z5),
+ NvColorFormat_R8_G8_B8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZ1, X8_Y8_Z8),
+ NvColorFormat_B8_G8_R8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, ZYX1, X8_Y8_Z8),
+ NvColorFormat_A8R8G8B8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, YZWX, X8Y8Z8W8),
+ NvColorFormat_A8B8G8R8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, WZYX, X8Y8Z8W8),
+ NvColorFormat_R8G8B8A8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZW, X8Y8Z8W8),
+ NvColorFormat_B8G8R8A8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, ZYXW, X8Y8Z8W8),
+ NvColorFormat_X8R8G8B8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, YZW1, X8Y8Z8W8),
+ NvColorFormat_R8G8B8X8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XYZ1, X8Y8Z8W8),
+ NvColorFormat_X8B8G8R8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, WZY1, X8Y8Z8W8),
+ NvColorFormat_B8G8R8X8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, ZYX1, X8Y8Z8W8),
+
+ NvColorFormat_Float_B10G11R11 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, ZYX1, X11Y11Z10, Float),
+ NvColorFormat_Float_A16B16G16R16 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, WZYX, X16Y16Z16W16, Float),
+ NvColorFormat_Float_X16B16G16R16 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, WZY1, X16Y16Z16W16, Float),
+
+ // Luminance color formats
+ NvColorFormat_L1 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X1),
+ NvColorFormat_L2 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X2),
+ NvColorFormat_L4 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X4),
+ NvColorFormat_L8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X8),
+ NvColorFormat_L16 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X16),
+ NvColorFormat_L32 = NV_COLOR_MAKE_FORMAT(LinearRGBA, XXX1, X32),
+
+ NvColorFormat_Float_L16 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, XXX1, X16, Float),
+ NvColorFormat_Float_A16L16 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, YYYX, X16Y16, Float),
+
+ // Alpha color formats
+ NvColorFormat_A1 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X1),
+ NvColorFormat_A2 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X2),
+ NvColorFormat_A4 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X4),
+ NvColorFormat_A8 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X8),
+ NvColorFormat_A16 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X16),
+ NvColorFormat_A32 = NV_COLOR_MAKE_FORMAT(LinearRGBA, 000X, X32),
+
+ NvColorFormat_Float_A16 = NV_COLOR_MAKE_FORMAT_GENERIC(LinearRGBA, 000X, X16, Float),
+
+ // Color index formats
+ NvColorFormat_I1 = NV_COLOR_MAKE_FORMAT(ColorIndex, X000, X1),
+ NvColorFormat_I2 = NV_COLOR_MAKE_FORMAT(ColorIndex, X000, X2),
+ NvColorFormat_I4 = NV_COLOR_MAKE_FORMAT(ColorIndex, X000, X4),
+ NvColorFormat_I8 = NV_COLOR_MAKE_FORMAT(ColorIndex, X000, X8),
+
+ // YUV interleaved color formats
+ NvColorFormat_Y8_U8_V8 = NV_COLOR_MAKE_FORMAT(YCbCr601, XYZ1, X8_Y8_Z8),
+ NvColorFormat_UYVY = NV_COLOR_MAKE_FORMAT(YCbCr601, XYZ1, Y8_X8__Z8_X8),
+ NvColorFormat_VYUY = NV_COLOR_MAKE_FORMAT(YCbCr601, XZY1, Y8_X8__Z8_X8),
+ NvColorFormat_YUYV = NV_COLOR_MAKE_FORMAT(YCbCr601, XYZ1, X8_Y8__X8_Z8),
+ NvColorFormat_YVYU = NV_COLOR_MAKE_FORMAT(YCbCr601, XZY1, X8_Y8__X8_Z8),
+
+ // YUV planar color formats
+ NvColorFormat_Y8 = NV_COLOR_MAKE_FORMAT(YCbCr601, X000, X8),
+ NvColorFormat_U8 = NV_COLOR_MAKE_FORMAT(YCbCr601, 0X00, X8),
+ NvColorFormat_V8 = NV_COLOR_MAKE_FORMAT(YCbCr601, 00X0, X8),
+ NvColorFormat_U8_V8 = NV_COLOR_MAKE_FORMAT(YCbCr601, 0XY0, X8_Y8),
+
+ // Range Reduced YUV planar color formats
+ NvColorFormat_Y8_RR = NV_COLOR_MAKE_FORMAT(YCbCr601_RR, X000, X8),
+ NvColorFormat_U8_RR = NV_COLOR_MAKE_FORMAT(YCbCr601_RR, 0X00, X8),
+ NvColorFormat_V8_RR = NV_COLOR_MAKE_FORMAT(YCbCr601_RR, 00X0, X8),
+ NvColorFormat_U8_V8_RR = NV_COLOR_MAKE_FORMAT(YCbCr601_RR, 0XY0, X8_Y8),
+
+ // Bayer color formats
+ NvColorFormat_Bayer8RGGB = NV_COLOR_MAKE_FORMAT(BayerRGGB, X000, X8),
+ NvColorFormat_Bayer8BGGR = NV_COLOR_MAKE_FORMAT(BayerBGGR, X000, X8),
+ NvColorFormat_Bayer8GRBG = NV_COLOR_MAKE_FORMAT(BayerGRBG, X000, X8),
+ NvColorFormat_Bayer8GBRG = NV_COLOR_MAKE_FORMAT(BayerGBRG, X000, X8),
+ NvColorFormat_X6Bayer10RGGB = NV_COLOR_MAKE_FORMAT(BayerRGGB, X000, Y6X10),
+ NvColorFormat_X6Bayer10BGGR = NV_COLOR_MAKE_FORMAT(BayerBGGR, X000, Y6X10),
+ NvColorFormat_X6Bayer10GRBG = NV_COLOR_MAKE_FORMAT(BayerGRBG, X000, Y6X10),
+ NvColorFormat_X6Bayer10GBRG = NV_COLOR_MAKE_FORMAT(BayerGBRG, X000, Y6X10),
+ NvColorFormat_X4Bayer12RGGB = NV_COLOR_MAKE_FORMAT(BayerRGGB, X000, Y4X12),
+ NvColorFormat_X4Bayer12BGGR = NV_COLOR_MAKE_FORMAT(BayerBGGR, X000, Y4X12),
+ NvColorFormat_X4Bayer12GRBG = NV_COLOR_MAKE_FORMAT(BayerGRBG, X000, Y4X12),
+ NvColorFormat_X4Bayer12GBRG = NV_COLOR_MAKE_FORMAT(BayerGBRG, X000, Y4X12),
+ NvColorFormat_X2Bayer14RGGB = NV_COLOR_MAKE_FORMAT(BayerRGGB, X000, Y2X14),
+ NvColorFormat_X2Bayer14BGGR = NV_COLOR_MAKE_FORMAT(BayerBGGR, X000, Y2X14),
+ NvColorFormat_X2Bayer14GRBG = NV_COLOR_MAKE_FORMAT(BayerGRBG, X000, Y2X14),
+ NvColorFormat_X2Bayer14GBRG = NV_COLOR_MAKE_FORMAT(BayerGBRG, X000, Y2X14),
+ NvColorFormat_Bayer16RGGB = NV_COLOR_MAKE_FORMAT(BayerRGGB, X000, X16),
+ NvColorFormat_Bayer16BGGR = NV_COLOR_MAKE_FORMAT(BayerBGGR, X000, X16),
+ NvColorFormat_Bayer16GRBG = NV_COLOR_MAKE_FORMAT(BayerGRBG, X000, X16),
+ NvColorFormat_Bayer16GBRG = NV_COLOR_MAKE_FORMAT(BayerGBRG, X000, X16),
+
+ // Non color formats
+ NvColorFormat_X4C4 = NV_COLOR_MAKE_FORMAT(NonColor, X000, Y4X4), // VCAA
+
+ NvColorFormat_Force32 = 0x7FFFFFFF
+} NvColorFormat;
+
+#endif // INCLUDED_NVCOLOR_H