Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca87790c authored by Dan Stoza's avatar Dan Stoza Committed by Gerrit Code Review
Browse files

Merge "DO NOT MERGE Add ANativeWindow dataSpace; update graphics formats, color spaces"

parents b721e8f4 b93343d1
Loading
Loading
Loading
Loading
+173 −38
Original line number Original line Diff line number Diff line
@@ -45,9 +45,12 @@ enum {
    /*
    /*
     * "linear" color pixel formats:
     * "linear" color pixel formats:
     *
     *
     * The pixel formats below contain sRGB data but are otherwise treated
     * When used with ANativeWindow, the dataSpace field describes the color
     * as linear formats, i.e.: no special operation is performed when
     * space of the buffer.
     * reading or writing into a buffer in one of these formats
     *
     * 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_RGBA_8888          = 1,
    HAL_PIXEL_FORMAT_RGBX_8888          = 2,
    HAL_PIXEL_FORMAT_RGBX_8888          = 2,
@@ -55,25 +58,8 @@ enum {
    HAL_PIXEL_FORMAT_RGB_565            = 4,
    HAL_PIXEL_FORMAT_RGB_565            = 4,
    HAL_PIXEL_FORMAT_BGRA_8888          = 5,
    HAL_PIXEL_FORMAT_BGRA_8888          = 5,


    /*
    // Deprecated sRGB formats for source code compatibility
     * sRGB color pixel formats:
    // Not for use in new code
     *
     * 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.
     *
     */
    HAL_PIXEL_FORMAT_sRGB_A_8888        = 0xC,
    HAL_PIXEL_FORMAT_sRGB_A_8888        = 0xC,
    HAL_PIXEL_FORMAT_sRGB_X_8888        = 0xD,
    HAL_PIXEL_FORMAT_sRGB_X_8888        = 0xD,


@@ -111,6 +97,8 @@ enum {
     *   cr_offset = y_size
     *   cr_offset = y_size
     *   cb_offset = y_size + c_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
    HAL_PIXEL_FORMAT_YV12   = 0x32315659, // YCrCb 4:2:0 Planar


@@ -135,6 +123,8 @@ enum {
     *
     *
     *   size = stride * height
     *   size = stride * height
     *
     *
     * When used with ANativeWindow, the dataSpace field describes the color
     * space of the buffer.
     */
     */
    HAL_PIXEL_FORMAT_Y8     = 0x20203859,
    HAL_PIXEL_FORMAT_Y8     = 0x20203859,


@@ -159,6 +149,10 @@ enum {
     *
     *
     *   size = stride * height * 2
     *   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,
    HAL_PIXEL_FORMAT_Y16    = 0x20363159,


@@ -167,7 +161,7 @@ enum {
     *
     *
     * This format is exposed outside of the camera HAL to applications.
     * 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
     * representing raw Bayer-pattern images from an image sensor, with minimal
     * processing.
     * processing.
     *
     *
@@ -193,9 +187,15 @@ enum {
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_RENDERSCRIPT
     *    - 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_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:
     * Android RAW10 format:
@@ -244,6 +244,10 @@ enum {
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_RENDERSCRIPT
     *    - 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,
    HAL_PIXEL_FORMAT_RAW10 = 0x25,


@@ -261,6 +265,10 @@ enum {
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_HW_CAMERA_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_SW_*
     *    - GRALLOC_USAGE_RENDERSCRIPT
     *    - 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,
    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
     * Buffers of this format must have a height of 1, and width equal to their
     * size in bytes.
     * 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,
    HAL_PIXEL_FORMAT_BLOB = 0x21,


@@ -292,6 +310,8 @@ enum {
     * framework will assume that sampling the texture will always return an
     * 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).
     * 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,
    HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 0x22,


@@ -311,6 +331,9 @@ enum {
     *
     *
     * This format is locked for use by gralloc's (*lock_ycbcr) method, and
     * This format is locked for use by gralloc's (*lock_ycbcr) method, and
     * locking with the (*lock) method will return an error.
     * 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,
    HAL_PIXEL_FORMAT_YCbCr_420_888 = 0x23,


@@ -354,6 +377,42 @@ struct android_ycbcr {
    uint32_t reserved[8];
    uint32_t reserved[8];
};
};


/**
 * 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
 * Transformation definitions
 *
 *
@@ -378,19 +437,33 @@ enum {
};
};


/**
/**
 * Colorspace Definitions
 * Dataspace Definitions
 * ======================
 * ======================
 *
 *
 * Colorspace is the definition of how pixel values should be interpreted.
 * Dataspace 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
 * For many formats, this is the colorspace of the image data, which includes
 * range (within the bit depth).
 * 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.
     * Arbitrary dataspace with manually defined characteristics.  Definition
     * Colorspace definition must be communicated separately.
     * for colorspaces or other meaning must be communicated separately.
     *
     *
     * This is used when specifying primaries, transfer characteristics,
     * This is used when specifying primaries, transfer characteristics,
     * etc. separately.
     * etc. separately.
@@ -399,7 +472,57 @@ enum {
     * where a colorspace can have separately defined primaries, transfer
     * where a colorspace can have separately defined primaries, transfer
     * characteristics, etc.
     * 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
     * YCbCr Colorspaces
@@ -429,7 +552,7 @@ enum {
     *  red             0.640   0.330
     *  red             0.640   0.330
     *  white (D65)     0.3127  0.3290
     *  white (D65)     0.3127  0.3290
     */
     */
    HAL_COLORSPACE_JFIF = 0x101,
    HAL_DATASPACE_JFIF = 0x101,


    /*
    /*
     * ITU-R Recommendation 601 (BT.601) - 625-line
     * ITU-R Recommendation 601 (BT.601) - 625-line
@@ -456,7 +579,7 @@ enum {
     *  red             0.640   0.330
     *  red             0.640   0.330
     *  white (D65)     0.3127  0.3290
     *  white (D65)     0.3127  0.3290
     */
     */
    HAL_COLORSPACE_BT601_625 = 0x102,
    HAL_DATASPACE_BT601_625 = 0x102,


    /*
    /*
     * ITU-R Recommendation 601 (BT.601) - 525-line
     * ITU-R Recommendation 601 (BT.601) - 525-line
@@ -483,7 +606,7 @@ enum {
     *  red             0.630   0.340
     *  red             0.630   0.340
     *  white (D65)     0.3127  0.3290
     *  white (D65)     0.3127  0.3290
     */
     */
    HAL_COLORSPACE_BT601_525 = 0x103,
    HAL_DATASPACE_BT601_525 = 0x103,


    /*
    /*
     * ITU-R Recommendation 709 (BT.709)
     * ITU-R Recommendation 709 (BT.709)
@@ -504,8 +627,20 @@ enum {
     *  red             0.640   0.330
     *  red             0.640   0.330
     *  white (D65)     0.3127  0.3290
     *  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
#ifdef __cplusplus
}
}
+28 −0
Original line number Original line Diff line number Diff line
@@ -262,6 +262,12 @@ enum {
     * the aspect ratio of the buffers produced.
     * the aspect ratio of the buffers produced.
     */
     */
    NATIVE_WINDOW_STICKY_TRANSFORM = 11,
    NATIVE_WINDOW_STICKY_TRANSFORM = 11,

    /**
     * The default data space for the buffers as set by the consumer.
     * The values are defined in graphics.h.
     */
    NATIVE_WINDOW_DEFAULT_DATASPACE = 12
};
};


/* Valid operations for the (*perform)() hook.
/* Valid operations for the (*perform)() hook.
@@ -294,6 +300,7 @@ enum {
    NATIVE_WINDOW_SET_POST_TRANSFORM_CROP   = 16,   /* private */
    NATIVE_WINDOW_SET_POST_TRANSFORM_CROP   = 16,   /* private */
    NATIVE_WINDOW_SET_BUFFERS_STICKY_TRANSFORM = 17,/* private */
    NATIVE_WINDOW_SET_BUFFERS_STICKY_TRANSFORM = 17,/* private */
    NATIVE_WINDOW_SET_SIDEBAND_STREAM       = 18,
    NATIVE_WINDOW_SET_SIDEBAND_STREAM       = 18,
    NATIVE_WINDOW_SET_BUFFERS_DATASPACE     = 19
};
};


/* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */
/* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */
@@ -498,6 +505,7 @@ struct ANativeWindow
     *     NATIVE_WINDOW_SET_BUFFERS_GEOMETRY  (deprecated)
     *     NATIVE_WINDOW_SET_BUFFERS_GEOMETRY  (deprecated)
     *     NATIVE_WINDOW_SET_BUFFERS_TRANSFORM
     *     NATIVE_WINDOW_SET_BUFFERS_TRANSFORM
     *     NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP
     *     NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP
     *     NATIVE_WINDOW_SET_BUFFERS_DATASPACE
     *     NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS
     *     NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS
     *     NATIVE_WINDOW_SET_BUFFERS_FORMAT
     *     NATIVE_WINDOW_SET_BUFFERS_FORMAT
     *     NATIVE_WINDOW_SET_SCALING_MODE       (private)
     *     NATIVE_WINDOW_SET_SCALING_MODE       (private)
@@ -798,6 +806,26 @@ static inline int native_window_set_buffers_format(
    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_FORMAT, format);
    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_FORMAT, format);
}
}


/*
 * native_window_set_buffers_data_space(..., int dataSpace)
 * All buffers queued after this call will be associated with the dataSpace
 * parameter specified.
 *
 * dataSpace specifies additional information about the buffer that's dependent
 * on the buffer format and the endpoints. For example, it can be used to convey
 * the color space of the image data in the buffer, or it can be used to
 * indicate that the buffers contain depth measurement data instead of color
 * images.  The default dataSpace is 0, HAL_DATASPACE_UNKNOWN, unless it has been
 * overridden by the consumer.
 */
static inline int native_window_set_buffers_data_space(
        struct ANativeWindow* window,
        android_dataspace_t dataSpace)
{
    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_DATASPACE,
            dataSpace);
}

/*
/*
 * native_window_set_buffers_transform(..., int transform)
 * native_window_set_buffers_transform(..., int transform)
 * All buffers queued after this call will be displayed transformed according
 * All buffers queued after this call will be displayed transformed according