diff options
Diffstat (limited to 'include/system/graphics.h')
| -rw-r--r-- | include/system/graphics.h | 211 | 
1 files changed, 173 insertions, 38 deletions
| diff --git a/include/system/graphics.h b/include/system/graphics.h index c3fca97..efd48cb 100644 --- a/include/system/graphics.h +++ b/include/system/graphics.h @@ -45,9 +45,12 @@ enum {      /*       * "linear" color pixel formats:       * -     * The pixel formats below contain sRGB data but are otherwise treated -     * as linear formats, i.e.: no special operation is performed when -     * reading or writing into a buffer in one of these formats +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer. +     * +     * The color space determines, for example, if the formats are linear or +     * gamma-corrected; or whether any special operations are performed when +     * reading or writing into a buffer in one of these formats.       */      HAL_PIXEL_FORMAT_RGBA_8888          = 1,      HAL_PIXEL_FORMAT_RGBX_8888          = 2, @@ -55,25 +58,8 @@ enum {      HAL_PIXEL_FORMAT_RGB_565            = 4,      HAL_PIXEL_FORMAT_BGRA_8888          = 5, -    /* -     * sRGB color pixel formats: -     * -     * The red, green and blue components are stored in sRGB space, and converted -     * to linear space when read, using the standard sRGB to linear equation: -     * -     * Clinear = Csrgb / 12.92                  for Csrgb <= 0.04045 -     *         = (Csrgb + 0.055 / 1.055)^2.4    for Csrgb >  0.04045 -     * -     * When written the inverse transformation is performed: -     * -     * Csrgb = 12.92 * Clinear                  for Clinear <= 0.0031308 -     *       = 1.055 * Clinear^(1/2.4) - 0.055  for Clinear >  0.0031308 -     * -     * -     *  The alpha component, if present, is always stored in linear space and -     *  is left unmodified when read or written. -     * -     */ +    // Deprecated sRGB formats for source code compatibility +    // Not for use in new code      HAL_PIXEL_FORMAT_sRGB_A_8888        = 0xC,      HAL_PIXEL_FORMAT_sRGB_X_8888        = 0xD, @@ -111,6 +97,8 @@ enum {       *   cr_offset = y_size       *   cb_offset = y_size + c_size       * +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer.       */      HAL_PIXEL_FORMAT_YV12   = 0x32315659, // YCrCb 4:2:0 Planar @@ -135,6 +123,8 @@ enum {       *       *   size = stride * height       * +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer.       */      HAL_PIXEL_FORMAT_Y8     = 0x20203859, @@ -159,6 +149,10 @@ enum {       *       *   size = stride * height * 2       * +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer, except that dataSpace field +     * HAL_DATASPACE_DEPTH indicates that this buffer contains a depth +     * image where each sample is a distance value measured by a depth camera.       */      HAL_PIXEL_FORMAT_Y16    = 0x20363159, @@ -167,7 +161,7 @@ enum {       *       * This format is exposed outside of the camera HAL to applications.       * -     * RAW_SENSOR is a single-channel, 16-bit, little endian  format, typically +     * RAW16 is a single-channel, 16-bit, little endian format, typically       * representing raw Bayer-pattern images from an image sensor, with minimal       * processing.       * @@ -193,9 +187,15 @@ enum {       *    - GRALLOC_USAGE_HW_CAMERA_*       *    - GRALLOC_USAGE_SW_*       *    - GRALLOC_USAGE_RENDERSCRIPT +     * +     * When used with ANativeWindow, the dataSpace should be +     * HAL_DATASPACE_ARBITRARY, as raw image sensor buffers require substantial +     * extra metadata to define.       */      HAL_PIXEL_FORMAT_RAW16 = 0x20, -    HAL_PIXEL_FORMAT_RAW_SENSOR = 0x20, // TODO(rubenbrunk): Remove RAW_SENSOR. + +    // Temporary alias for source code compatibility; do not use in new code +    HAL_PIXEL_FORMAT_RAW_SENSOR = HAL_PIXEL_FORMAT_RAW16,      /*       * Android RAW10 format: @@ -244,6 +244,10 @@ enum {       *    - GRALLOC_USAGE_HW_CAMERA_*       *    - GRALLOC_USAGE_SW_*       *    - GRALLOC_USAGE_RENDERSCRIPT +     * +     * When used with ANativeWindow, the dataSpace field should be +     * HAL_DATASPACE_ARBITRARY, as raw image sensor buffers require substantial +     * extra metadata to define.       */      HAL_PIXEL_FORMAT_RAW10 = 0x25, @@ -261,6 +265,10 @@ enum {       *    - GRALLOC_USAGE_HW_CAMERA_*       *    - GRALLOC_USAGE_SW_*       *    - GRALLOC_USAGE_RENDERSCRIPT +     * +     * When used with ANativeWindow, the dataSpace field should be +     * HAL_DATASPACE_ARBITRARY, as raw image sensor buffers require substantial +     * extra metadata to define.       */      HAL_PIXEL_FORMAT_RAW_OPAQUE = 0x24, @@ -276,6 +284,16 @@ enum {       *       * Buffers of this format must have a height of 1, and width equal to their       * size in bytes. +     * +     * When used with ANativeWindow, the mapping of the dataSpace field to +     * buffer contents for BLOB is as follows: +     * +     *  dataSpace value               | Buffer contents +     * -------------------------------+----------------------------------------- +     *  HAL_DATASPACE_JFIF            | An encoded JPEG image +     *  HAL_DATASPACE_DEPTH           | An android_depth_points buffer +     *  Other                         | Unsupported +     *       */      HAL_PIXEL_FORMAT_BLOB = 0x21, @@ -292,6 +310,8 @@ enum {       * framework will assume that sampling the texture will always return an       * alpha value of 1.0 (i.e. the buffer contains only opaque pixel values).       * +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer.       */      HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 0x22, @@ -311,6 +331,9 @@ enum {       *       * This format is locked for use by gralloc's (*lock_ycbcr) method, and       * locking with the (*lock) method will return an error. +     * +     * When used with ANativeWindow, the dataSpace field describes the color +     * space of the buffer.       */      HAL_PIXEL_FORMAT_YCbCr_420_888 = 0x23, @@ -355,6 +378,42 @@ struct android_ycbcr {  };  /** + * Structure used to define depth point clouds for format HAL_PIXEL_FORMAT_BLOB + * with dataSpace value of HAL_DATASPACE_DEPTH. + * When locking a native buffer of the above format and dataSpace value, + * the vaddr pointer can be cast to this structure. + * + * A variable-length list of (x,y,z) 3D points, as floats. + * + * @num_points is the number of points in the list + * + * @xyz_points is the flexible array of floating-point values. + *   It contains (num_points) * 3 floats. + * + *   For example: + *     android_depth_points d = get_depth_buffer(); + *     struct { + *       float x; float y; float z; + *     } firstPoint, lastPoint; + * + *     firstPoint.x = d.xyz_points[0]; + *     firstPoint.y = d.xyz_points[1]; + *     firstPoint.z = d.xyz_points[2]; + *     lastPoint.x = d.xyz_points[(d.num_points - 1) * 3 + 0]; + *     lastPoint.y = d.xyz_points[(d.num_points - 1) * 3 + 1]; + *     lastPoint.z = d.xyz_points[(d.num_points - 1) * 3 + 2]; + */ + +struct android_depth_points { +    uint32_t num_points; + +    /** reserved for future use, set to 0 by gralloc's (*lock)() */ +    uint32_t reserved[8]; + +    float xyz_points[]; +}; + +/**   * Transformation definitions   *   * IMPORTANT NOTE: @@ -378,19 +437,33 @@ enum {  };  /** - * Colorspace Definitions + * Dataspace Definitions   * ======================   * - * Colorspace is the definition of how pixel values should be interpreted. - * It includes primaries (including white point) and the transfer - * characteristic function, which describes both gamma curve and numeric - * range (within the bit depth). + * Dataspace is the definition of how pixel values should be interpreted. + * + * For many formats, this is the colorspace of the image data, which includes + * primaries (including white point) and the transfer characteristic function, + * which describes both gamma curve and numeric range (within the bit depth). + * + * Other dataspaces include depth measurement data from a depth camera.   */ -enum { +typedef enum android_dataspace { +    /* +     * Default-assumption data space, when not explicitly specified. +     * +     * It is safest to assume the buffer is an image with sRGB primaries and +     * encoding ranges, but the consumer and/or the producer of the data may +     * simply be using defaults. No automatic gamma transform should be +     * expected, except for a possible display gamma transform when drawn to a +     * screen. +     */ +    HAL_DATASPACE_UNKNOWN = 0x0, +      /* -     * Arbitrary colorspace with manually defined characteristics. -     * Colorspace definition must be communicated separately. +     * Arbitrary dataspace with manually defined characteristics.  Definition +     * for colorspaces or other meaning must be communicated separately.       *       * This is used when specifying primaries, transfer characteristics,       * etc. separately. @@ -399,7 +472,57 @@ enum {       * where a colorspace can have separately defined primaries, transfer       * characteristics, etc.       */ -    HAL_COLORSPACE_ARBITRARY = 0x1, +    HAL_DATASPACE_ARBITRARY = 0x1, + +    /* +     * RGB Colorspaces +     * ----------------- +     * +     * Primaries are given using (x,y) coordinates in the CIE 1931 definition +     * of x and y specified by ISO 11664-1. +     * +     * Transfer characteristics are the opto-electronic transfer characteristic +     * at the source as a function of linear optical intensity (luminance). +     */ + +    /* +     * sRGB linear encoding: +     * +     * The red, green, and blue components are stored in sRGB space, but +     * are linear, not gamma-encoded. +     * The RGB primaries and the white point are the same as BT.709. +     * +     * The values are encoded using the full range ([0,255] for 8-bit) for all +     * components. +     */ +    HAL_DATASPACE_SRGB_LINEAR = 0x200, + +    /* +     * sRGB gamma encoding: +     * +     * The red, green and blue components are stored in sRGB space, and +     * converted to linear space when read, using the standard sRGB to linear +     * equation: +     * +     * Clinear = Csrgb / 12.92                  for Csrgb <= 0.04045 +     *         = (Csrgb + 0.055 / 1.055)^2.4    for Csrgb >  0.04045 +     * +     * When written the inverse transformation is performed: +     * +     * Csrgb = 12.92 * Clinear                  for Clinear <= 0.0031308 +     *       = 1.055 * Clinear^(1/2.4) - 0.055  for Clinear >  0.0031308 +     * +     * +     * The alpha component, if present, is always stored in linear space and +     * is left unmodified when read or written. +     * +     * The RGB primaries and the white point are the same as BT.709. +     * +     * The values are encoded using the full range ([0,255] for 8-bit) for all +     * components. +     * +     */ +    HAL_DATASPACE_SRGB = 0x201,      /*       * YCbCr Colorspaces @@ -429,7 +552,7 @@ enum {       *  red             0.640   0.330       *  white (D65)     0.3127  0.3290       */ -    HAL_COLORSPACE_JFIF = 0x101, +    HAL_DATASPACE_JFIF = 0x101,      /*       * ITU-R Recommendation 601 (BT.601) - 625-line @@ -456,7 +579,7 @@ enum {       *  red             0.640   0.330       *  white (D65)     0.3127  0.3290       */ -    HAL_COLORSPACE_BT601_625 = 0x102, +    HAL_DATASPACE_BT601_625 = 0x102,      /*       * ITU-R Recommendation 601 (BT.601) - 525-line @@ -483,7 +606,7 @@ enum {       *  red             0.630   0.340       *  white (D65)     0.3127  0.3290       */ -    HAL_COLORSPACE_BT601_525 = 0x103, +    HAL_DATASPACE_BT601_525 = 0x103,      /*       * ITU-R Recommendation 709 (BT.709) @@ -504,8 +627,20 @@ enum {       *  red             0.640   0.330       *  white (D65)     0.3127  0.3290       */ -    HAL_COLORSPACE_BT709 = 0x104, -}; +    HAL_DATASPACE_BT709 = 0x104, + +    /* +     * The buffer contains depth ranging measurements from a depth camera. +     * This value is valid with formats: +     *    HAL_PIXEL_FORMAT_Y16: 16-bit single channel depth image. +     *    HAL_PIXEL_FORMAT_BLOB: A depth point cloud, as +     *       a variable-length float (x,y,z) coordinate point list. +     *       The point cloud will be represented with the android_depth_points +     *       structure. +     */ +    HAL_DATASPACE_DEPTH = 0x1000 + +} android_dataspace_t;  #ifdef __cplusplus  } | 
