Merge changes I9ab41b56,I61e4ca9b
* changes: Add color mode enums add android_flex_layout for describing all flexible formats.
This commit is contained in:
commit
f246ec6ae0
1 changed files with 326 additions and 0 deletions
|
|
@ -477,6 +477,102 @@ struct android_ycbcr {
|
|||
uint32_t reserved[8];
|
||||
};
|
||||
|
||||
/*
|
||||
* Structures for describing flexible YUVA/RGBA formats for consumption by
|
||||
* applications. Such flexible formats contain a plane for each component (e.g.
|
||||
* red, green, blue), where each plane is laid out in a grid-like pattern
|
||||
* occupying unique byte addresses and with consistent byte offsets between
|
||||
* neighboring pixels.
|
||||
*
|
||||
* The android_flex_layout structure is used with any pixel format that can be
|
||||
* represented by it, such as:
|
||||
* - HAL_PIXEL_FORMAT_YCbCr_*_888
|
||||
* - HAL_PIXEL_FORMAT_FLEX_RGB*_888
|
||||
* - HAL_PIXEL_FORMAT_RGB[AX]_888[8],BGRA_8888,RGB_888
|
||||
* - HAL_PIXEL_FORMAT_YV12,Y8,Y16,YCbCr_422_SP/I,YCrCb_420_SP
|
||||
* - even implementation defined formats that can be represented by
|
||||
* the structures
|
||||
*
|
||||
* Vertical increment (aka. row increment or stride) describes the distance in
|
||||
* bytes from the first pixel of one row to the first pixel of the next row
|
||||
* (below) for the component plane. This can be negative.
|
||||
*
|
||||
* Horizontal increment (aka. column or pixel increment) describes the distance
|
||||
* in bytes from one pixel to the next pixel (to the right) on the same row for
|
||||
* the component plane. This can be negative.
|
||||
*
|
||||
* Each plane can be subsampled either vertically or horizontally by
|
||||
* a power-of-two factor.
|
||||
*
|
||||
* The bit-depth of each component can be arbitrary, as long as the pixels are
|
||||
* laid out on whole bytes, in native byte-order, using the most significant
|
||||
* bits of each unit.
|
||||
*/
|
||||
|
||||
typedef enum android_flex_component {
|
||||
/* luma */
|
||||
FLEX_COMPONENT_Y = 1 << 0,
|
||||
/* chroma blue */
|
||||
FLEX_COMPONENT_Cb = 1 << 1,
|
||||
/* chroma red */
|
||||
FLEX_COMPONENT_Cr = 1 << 2,
|
||||
|
||||
/* red */
|
||||
FLEX_COMPONENT_R = 1 << 10,
|
||||
/* green */
|
||||
FLEX_COMPONENT_G = 1 << 11,
|
||||
/* blue */
|
||||
FLEX_COMPONENT_B = 1 << 12,
|
||||
|
||||
/* alpha */
|
||||
FLEX_COMPONENT_A = 1 << 30,
|
||||
} android_flex_component_t;
|
||||
|
||||
typedef struct android_flex_plane {
|
||||
/* pointer to the first byte of the top-left pixel of the plane. */
|
||||
uint8_t *top_left;
|
||||
|
||||
android_flex_component_t component;
|
||||
|
||||
/* bits allocated for the component in each pixel. Must be a positive
|
||||
multiple of 8. */
|
||||
int32_t bits_per_component;
|
||||
/* number of the most significant bits used in the format for this
|
||||
component. Must be between 1 and bits_per_component, inclusive. */
|
||||
int32_t bits_used;
|
||||
|
||||
/* horizontal increment */
|
||||
int32_t h_increment;
|
||||
/* vertical increment */
|
||||
int32_t v_increment;
|
||||
/* horizontal subsampling. Must be a positive power of 2. */
|
||||
int32_t h_subsampling;
|
||||
/* vertical subsampling. Must be a positive power of 2. */
|
||||
int32_t v_subsampling;
|
||||
} android_flex_plane_t;
|
||||
|
||||
typedef enum android_flex_format {
|
||||
/* not a flexible format */
|
||||
FLEX_FORMAT_INVALID = 0x0,
|
||||
FLEX_FORMAT_Y = FLEX_COMPONENT_Y,
|
||||
FLEX_FORMAT_YCbCr = FLEX_COMPONENT_Y | FLEX_COMPONENT_Cb | FLEX_COMPONENT_Cr,
|
||||
FLEX_FORMAT_YCbCrA = FLEX_FORMAT_YCbCr | FLEX_COMPONENT_A,
|
||||
FLEX_FORMAT_RGB = FLEX_COMPONENT_R | FLEX_COMPONENT_G | FLEX_COMPONENT_B,
|
||||
FLEX_FORMAT_RGBA = FLEX_FORMAT_RGB | FLEX_COMPONENT_A,
|
||||
} android_flex_format_t;
|
||||
|
||||
typedef struct android_flex_layout {
|
||||
/* the kind of flexible format */
|
||||
android_flex_format_t format;
|
||||
|
||||
/* number of planes; 0 for FLEX_FORMAT_INVALID */
|
||||
uint32_t num_planes;
|
||||
/* a plane for each component; ordered in increasing component value order.
|
||||
E.g. FLEX_FORMAT_RGBA maps 0 -> R, 1 -> G, etc.
|
||||
Can be NULL for FLEX_FORMAT_INVALID */
|
||||
android_flex_plane_t *planes;
|
||||
} android_flex_layout_t;
|
||||
|
||||
/**
|
||||
* Structure used to define depth point clouds for format HAL_PIXEL_FORMAT_BLOB
|
||||
* with dataSpace value of HAL_DATASPACE_DEPTH.
|
||||
|
|
@ -1038,6 +1134,236 @@ typedef enum android_dataspace {
|
|||
|
||||
} android_dataspace_t;
|
||||
|
||||
/*
|
||||
* Color modes that may be supported by a display.
|
||||
*
|
||||
* Definitions:
|
||||
* Rendering intent generally defines the goal in mapping a source (input)
|
||||
* color to a destination device color for a given color mode.
|
||||
*
|
||||
* It is important to keep in mind three cases where mapping may be applied:
|
||||
* 1. The source gamut is much smaller than the destination (display) gamut
|
||||
* 2. The source gamut is much larger than the destination gamut (this will
|
||||
* ordinarily be handled using colorimetric rendering, below)
|
||||
* 3. The source and destination gamuts are roughly equal, although not
|
||||
* completely overlapping
|
||||
* Also, a common requirement for mappings is that skin tones should be
|
||||
* preserved, or at least remain natural in appearance.
|
||||
*
|
||||
* Colorimetric Rendering Intent (All cases):
|
||||
* Colorimetric indicates that colors should be preserved. In the case
|
||||
* that the source gamut lies wholly within the destination gamut or is
|
||||
* about the same (#1, #3), this will simply mean that no manipulations
|
||||
* (no saturation boost, for example) are applied. In the case where some
|
||||
* source colors lie outside the destination gamut (#2, #3), those will
|
||||
* need to be mapped to colors that are within the destination gamut,
|
||||
* while the already in-gamut colors remain unchanged.
|
||||
*
|
||||
* Non-colorimetric transforms can take many forms. There are no hard
|
||||
* rules and it's left to the implementation to define.
|
||||
* Two common intents are described below.
|
||||
*
|
||||
* Stretched-Gamut Enhancement Intent (Source < Destination):
|
||||
* When the destination gamut is much larger than the source gamut (#1), the
|
||||
* source primaries may be redefined to reflect the full extent of the
|
||||
* destination space, or to reflect an intermediate gamut.
|
||||
* Skin-tone preservation would likely be applied. An example might be sRGB
|
||||
* input displayed on a DCI-P3 capable device, with skin-tone preservation.
|
||||
*
|
||||
* Within-Gamut Enhancement Intent (Source >= Destination):
|
||||
* When the device (destination) gamut is not larger than the source gamut
|
||||
* (#2 or #3), but the appearance of a larger gamut is desired, techniques
|
||||
* such as saturation boost may be applied to the source colors. Skin-tone
|
||||
* preservation may be applied. There is no unique method for within-gamut
|
||||
* enhancement; it would be defined within a flexible color mode.
|
||||
*
|
||||
*/
|
||||
typedef enum android_color_mode {
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_DEFAULT is the "native" gamut of the display.
|
||||
* White Point: Vendor/OEM defined
|
||||
* Panel Gamma: Vendor/OEM defined (typically 2.2)
|
||||
* Rendering Intent: Vendor/OEM defined (typically 'enhanced')
|
||||
*/
|
||||
HAL_COLOR_MODE_NATIVE = 0,
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_STANDARD_BT601_625 corresponds with display
|
||||
* settings that implement the ITU-R Recommendation BT.601
|
||||
* or Rec 601. Using 625 line version
|
||||
* Rendering Intent: Colorimetric
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.290 0.600
|
||||
* blue 0.150 0.060
|
||||
* red 0.640 0.330
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
|
||||
* for RGB conversion from the one purely determined by the primaries
|
||||
* to minimize the color shift into RGB space that uses BT.709
|
||||
* primaries.
|
||||
*
|
||||
* Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear < 0.018
|
||||
* Vnonlinear = 4.500 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
|
||||
*/
|
||||
HAL_COLOR_MODE_STANDARD_BT601_625 = 1,
|
||||
|
||||
/*
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.290 0.600
|
||||
* blue 0.150 0.060
|
||||
* red 0.640 0.330
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* Use the unadjusted KR = 0.222, KB = 0.071 luminance interpretation
|
||||
* for RGB conversion.
|
||||
*
|
||||
* Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear < 0.018
|
||||
* Vnonlinear = 4.500 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
|
||||
*/
|
||||
HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED = 2,
|
||||
|
||||
/*
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.310 0.595
|
||||
* blue 0.155 0.070
|
||||
* red 0.630 0.340
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* KR = 0.299, KB = 0.114. This adjusts the luminance interpretation
|
||||
* for RGB conversion from the one purely determined by the primaries
|
||||
* to minimize the color shift into RGB space that uses BT.709
|
||||
* primaries.
|
||||
*
|
||||
* Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear < 0.018
|
||||
* Vnonlinear = 4.500 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
|
||||
*/
|
||||
HAL_COLOR_MODE_STANDARD_BT601_525 = 3,
|
||||
|
||||
/*
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.310 0.595
|
||||
* blue 0.155 0.070
|
||||
* red 0.630 0.340
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* Use the unadjusted KR = 0.212, KB = 0.087 luminance interpretation
|
||||
* for RGB conversion (as in SMPTE 240M).
|
||||
*
|
||||
* Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear < 0.018
|
||||
* Vnonlinear = 4.500 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.099 * (Vlinear)^(0.45) – 0.099
|
||||
*/
|
||||
HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED = 4,
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_REC709 corresponds with display settings that implement
|
||||
* the ITU-R Recommendation BT.709 / Rec. 709 for high-definition television.
|
||||
* Rendering Intent: Colorimetric
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.300 0.600
|
||||
* blue 0.150 0.060
|
||||
* red 0.640 0.330
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* HDTV REC709 Inverse Gamma Correction (IGC): V represents normalized
|
||||
* (with [0 to 1] range) value of R, G, or B.
|
||||
*
|
||||
* if Vnonlinear < 0.081
|
||||
* Vlinear = Vnonlinear / 4.5
|
||||
* else
|
||||
* Vlinear = ((Vnonlinear + 0.099) / 1.099) ^ (1/0.45)
|
||||
*
|
||||
* HDTV REC709 Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear < 0.018
|
||||
* Vnonlinear = 4.5 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.099 * (Vlinear) ^ 0.45 – 0.099
|
||||
*/
|
||||
HAL_COLOR_MODE_STANDARD_BT709 = 5,
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_DCI_P3 corresponds with display settings that implement
|
||||
* SMPTE EG 432-1 and SMPTE RP 431-2
|
||||
* Rendering Intent: Colorimetric
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.265 0.690
|
||||
* blue 0.150 0.060
|
||||
* red 0.680 0.320
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* Gamma: 2.2
|
||||
*/
|
||||
HAL_COLOR_MODE_DCI_P3 = 6,
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_SRGB corresponds with display settings that implement
|
||||
* the sRGB color space. Uses the same primaries as ITU-R Recommendation
|
||||
* BT.709
|
||||
* Rendering Intent: Colorimetric
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.300 0.600
|
||||
* blue 0.150 0.060
|
||||
* red 0.640 0.330
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* PC/Internet (sRGB) Inverse Gamma Correction (IGC):
|
||||
*
|
||||
* if Vnonlinear ≤ 0.03928
|
||||
* Vlinear = Vnonlinear / 12.92
|
||||
* else
|
||||
* Vlinear = ((Vnonlinear + 0.055)/1.055) ^ 2.4
|
||||
*
|
||||
* PC/Internet (sRGB) Gamma Correction (GC):
|
||||
*
|
||||
* if Vlinear ≤ 0.0031308
|
||||
* Vnonlinear = 12.92 * Vlinear
|
||||
* else
|
||||
* Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
|
||||
*/
|
||||
HAL_COLOR_MODE_SRGB = 7,
|
||||
|
||||
/*
|
||||
* HAL_COLOR_MODE_ADOBE_RGB corresponds with the RGB color space developed
|
||||
* by Adobe Systems, Inc. in 1998.
|
||||
* Rendering Intent: Colorimetric
|
||||
* Primaries:
|
||||
* x y
|
||||
* green 0.210 0.710
|
||||
* blue 0.150 0.060
|
||||
* red 0.640 0.330
|
||||
* white (D65) 0.3127 0.3290
|
||||
*
|
||||
* Gamma: 2.2
|
||||
*/
|
||||
HAL_COLOR_MODE_ADOBE_RGB = 8
|
||||
|
||||
} android_color_mode_t;
|
||||
|
||||
/*
|
||||
* Color transforms that may be applied by hardware composer to the whole
|
||||
* display.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue