blob: 2985212ed559b3fa67b833b20fbe6f6454f97fd1 [file] [log] [blame]
/*
* Copyright 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.graphics.common;
/**
* Pixel formats for graphics buffers.
* @hide
*/
@VintfStability
@Backing(type="int")
enum PixelFormat {
/**
* This value may be used in an operation where the format is optional.
*/
UNSPECIFIED = 0,
/**
* 32-bit format that has 8-bit R, G, B, and A components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGBA_8888 = 0x1,
/**
* 32-bit format that has 8-bit R, G, B, and unused components, in that
* order, from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGBX_8888 = 0x2,
/**
* 24-bit format that has 8-bit R, G, and B components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGB_888 = 0x3,
/**
* 16-bit packed format that has 5-bit R, 6-bit G, and 5-bit B components,
* in that order, from the most-sigfinicant bits to the least-significant
* bits.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGB_565 = 0x4,
/**
* 32-bit format that has 8-bit B, G, R, and A components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
BGRA_8888 = 0x5,
/**
* Legacy formats deprecated in favor of YCBCR_420_888.
*/
YCBCR_422_SP = 0x10, // NV16
YCRCB_420_SP = 0x11, // NV21
YCBCR_422_I = 0x14, // YUY2
/**
* 64-bit format that has 16-bit R, G, B, and A components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are signed floats, whose interpretation is defined
* by the dataspace.
*/
RGBA_FP16 = 0x16,
/**
* RAW16 is a single-channel, 16-bit, little endian format, typically
* representing raw Bayer-pattern images from an image sensor, with minimal
* processing.
*
* The exact pixel layout of the data in the buffer is sensor-dependent, and
* needs to be queried from the camera device.
*
* Generally, not all 16 bits are used; more common values are 10 or 12
* bits. If not all bits are used, the lower-order bits are filled first.
* All parameters to interpret the raw data (black and white points,
* color space, etc) must be queried from the camera device.
*
* This format assumes
* - an even width
* - an even height
* - a horizontal stride multiple of 16 pixels
* - a vertical stride equal to the height
* - strides are specified in pixels, not in bytes
*
* size = stride * height * 2
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
* - BufferUsage::RENDERSCRIPT
*
* The mapping of the dataspace to buffer contents for RAW16 is as
* follows:
*
* Dataspace value | Buffer contents
* -------------------------------+-----------------------------------------
* Dataspace::ARBITRARY | Raw image sensor data, layout is as
* | defined above.
* Dataspace::DEPTH | Unprocessed implementation-dependent raw
* | depth measurements, opaque with 16 bit
* | samples.
* Other | Unsupported
*/
RAW16 = 0x20,
/**
* BLOB is used to carry task-specific data which does not have a standard
* image structure. The details of the format are left to the two
* endpoints.
*
* A typical use case is for transporting JPEG-compressed images from the
* Camera HAL to the framework or to applications.
*
* Buffers of this format must have a height of 1, and width equal to their
* size in bytes.
*
* The mapping of the dataspace to buffer contents for BLOB is as
* follows:
*
* Dataspace value | Buffer contents
* -------------------------------+-----------------------------------------
* Dataspace::JFIF | An encoded JPEG image
* Dataspace::DEPTH | An android_depth_points buffer
* Dataspace::SENSOR | Sensor event data.
* Other | Unsupported
*/
BLOB = 0x21,
/**
* A format indicating that the choice of format is entirely up to the
* allocator.
*
* The allocator should examine the usage bits passed in when allocating a
* buffer with this format, and it should derive the pixel format from
* those usage flags. This format must never be used with any of the
* BufferUsage::CPU_* usage flags.
*
* Even when the internally chosen format has an alpha component, the
* clients must assume the alpha vlaue to be 1.0.
*
* The interpretation of the component values is defined by the dataspace.
*/
IMPLEMENTATION_DEFINED = 0x22,
/**
* This format allows platforms to use an efficient YCbCr/YCrCb 4:2:0
* buffer layout, while still describing the general format in a
* layout-independent manner. While called YCbCr, it can be used to
* describe formats with either chromatic ordering, as well as
* whole planar or semiplanar layouts.
*
* This format must be accepted by the allocator when BufferUsage::CPU_*
* are set.
*
* Buffers with this format must be locked with IMapper::lockYCbCr.
* Locking with IMapper::lock must return an error.
*
* The interpretation of the component values is defined by the dataspace.
*/
YCBCR_420_888 = 0x23,
/**
* RAW_OPAQUE is a format for unprocessed raw image buffers coming from an
* image sensor. The actual structure of buffers of this format is
* implementation-dependent.
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
* - BufferUsage::RENDERSCRIPT
*
* The mapping of the dataspace to buffer contents for RAW_OPAQUE is as
* follows:
*
* Dataspace value | Buffer contents
* -------------------------------+-----------------------------------------
* Dataspace::ARBITRARY | Raw image sensor data.
* Other | Unsupported
*/
RAW_OPAQUE = 0x24,
/**
* RAW10 is a single-channel, 10-bit per pixel, densely packed in each row,
* unprocessed format, usually representing raw Bayer-pattern images coming from
* an image sensor.
*
* In an image buffer with this format, starting from the first pixel of each
* row, each 4 consecutive pixels are packed into 5 bytes (40 bits). Each one
* of the first 4 bytes contains the top 8 bits of each pixel, The fifth byte
* contains the 2 least significant bits of the 4 pixels, the exact layout data
* for each 4 consecutive pixels is illustrated below (Pi[j] stands for the jth
* bit of the ith pixel):
*
* bit 7 bit 0
* =====|=====|=====|=====|=====|=====|=====|=====|
* Byte 0: |P0[9]|P0[8]|P0[7]|P0[6]|P0[5]|P0[4]|P0[3]|P0[2]|
* |-----|-----|-----|-----|-----|-----|-----|-----|
* Byte 1: |P1[9]|P1[8]|P1[7]|P1[6]|P1[5]|P1[4]|P1[3]|P1[2]|
* |-----|-----|-----|-----|-----|-----|-----|-----|
* Byte 2: |P2[9]|P2[8]|P2[7]|P2[6]|P2[5]|P2[4]|P2[3]|P2[2]|
* |-----|-----|-----|-----|-----|-----|-----|-----|
* Byte 3: |P3[9]|P3[8]|P3[7]|P3[6]|P3[5]|P3[4]|P3[3]|P3[2]|
* |-----|-----|-----|-----|-----|-----|-----|-----|
* Byte 4: |P3[1]|P3[0]|P2[1]|P2[0]|P1[1]|P1[0]|P0[1]|P0[0]|
* ===============================================
*
* This format assumes
* - a width multiple of 4 pixels
* - an even height
* - a vertical stride equal to the height
* - strides are specified in bytes, not in pixels
*
* size = stride * height
*
* When stride is equal to width * (10 / 8), there will be no padding bytes at
* the end of each row, the entire image data is densely packed. When stride is
* larger than width * (10 / 8), padding bytes will be present at the end of each
* row (including the last row).
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
* - BufferUsage::RENDERSCRIPT
*
* The mapping of the dataspace to buffer contents for RAW10 is as
* follows:
*
* Dataspace value | Buffer contents
* -------------------------------+-----------------------------------------
* Dataspace::ARBITRARY | Raw image sensor data.
* Other | Unsupported
*/
RAW10 = 0x25,
/**
* RAW12 is a single-channel, 12-bit per pixel, densely packed in each row,
* unprocessed format, usually representing raw Bayer-pattern images coming from
* an image sensor.
*
* In an image buffer with this format, starting from the first pixel of each
* row, each two consecutive pixels are packed into 3 bytes (24 bits). The first
* and second byte contains the top 8 bits of first and second pixel. The third
* byte contains the 4 least significant bits of the two pixels, the exact layout
* data for each two consecutive pixels is illustrated below (Pi[j] stands for
* the jth bit of the ith pixel):
*
* bit 7 bit 0
* ======|======|======|======|======|======|======|======|
* Byte 0: |P0[11]|P0[10]|P0[ 9]|P0[ 8]|P0[ 7]|P0[ 6]|P0[ 5]|P0[ 4]|
* |------|------|------|------|------|------|------|------|
* Byte 1: |P1[11]|P1[10]|P1[ 9]|P1[ 8]|P1[ 7]|P1[ 6]|P1[ 5]|P1[ 4]|
* |------|------|------|------|------|------|------|------|
* Byte 2: |P1[ 3]|P1[ 2]|P1[ 1]|P1[ 0]|P0[ 3]|P0[ 2]|P0[ 1]|P0[ 0]|
* =======================================================
*
* This format assumes:
* - a width multiple of 4 pixels
* - an even height
* - a vertical stride equal to the height
* - strides are specified in bytes, not in pixels
*
* size = stride * height
*
* When stride is equal to width * (12 / 8), there will be no padding bytes at
* the end of each row, the entire image data is densely packed. When stride is
* larger than width * (12 / 8), padding bytes will be present at the end of
* each row (including the last row).
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
* - BufferUsage::RENDERSCRIPT
*
* The mapping of the dataspace to buffer contents for RAW12 is as
* follows:
*
* Dataspace value | Buffer contents
* -------------------------------+-----------------------------------------
* Dataspace::ARBITRARY | Raw image sensor data.
* Other | Unsupported
*/
RAW12 = 0x26,
/** 0x27 to 0x2A are reserved for flexible formats */
/**
* 32-bit packed format that has 2-bit A, 10-bit B, G, and R components,
* in that order, from the most-sigfinicant bits to the least-significant
* bits.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGBA_1010102 = 0x2B,
/**
* 0x100 - 0x1FF
*
* This range is reserved for vendor extensions. Formats in this range
* must support BufferUsage::GPU_TEXTURE. Clients must assume they do not
* have an alpha component.
*/
/**
* Y8 is a YUV planar format comprised of a WxH Y plane, with each pixel
* being represented by 8 bits. It is equivalent to just the Y plane from
* YV12.
*
* This format assumes
* - an even width
* - an even height
* - a horizontal stride multiple of 16 pixels
* - a vertical stride equal to the height
*
* size = stride * height
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
Y8 = 0x20203859,
/**
* Y16 is a YUV planar format comprised of a WxH Y plane, with each pixel
* being represented by 16 bits. It is just like Y8, but has double the
* bits per pixel (little endian).
*
* This format assumes
* - an even width
* - an even height
* - a horizontal stride multiple of 16 pixels
* - a vertical stride equal to the height
* - strides are specified in pixels, not in bytes
*
* size = stride * height * 2
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace. When the dataspace is
* Dataspace::DEPTH, each pixel is a distance value measured by a depth
* camera, plus an associated confidence value.
*/
Y16 = 0x20363159,
/**
* YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed
* by (W/2) x (H/2) Cr and Cb planes.
*
* This format assumes
* - an even width
* - an even height
* - a horizontal stride multiple of 16 pixels
* - a vertical stride equal to the height
*
* y_size = stride * height
* c_stride = ALIGN(stride/2, 16)
* c_size = c_stride * height/2
* size = y_size + c_size * 2
* cr_offset = y_size
* cb_offset = y_size + c_size
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::CAMERA_*
* - BufferUsage::CPU_*
* - BufferUsage::GPU_TEXTURE
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
YV12 = 0x32315659, // YCrCb 4:2:0 Planar
/**
* 16-bit format that has a single 16-bit depth component.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
DEPTH_16 = 0x30,
/**
* 32-bit format that has a single 24-bit depth component and, optionally,
* 8 bits that are unused.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
DEPTH_24 = 0x31,
/**
* 32-bit format that has a 24-bit depth component and an 8-bit stencil
* component packed into 32-bits.
*
* The depth component values are unsigned normalized to the range [0, 1],
* whose interpretation is defined by the dataspace. The stencil values are
* unsigned integers, whose interpretation is defined by the dataspace.
*/
DEPTH_24_STENCIL_8 = 0x32,
/**
* 32-bit format that has a single 32-bit depth component.
*
* The component values are signed floats, whose interpretation is defined
* by the dataspace.
*/
DEPTH_32F = 0x33,
/**
* Two-component format that has a 32-bit depth component, an 8-bit stencil
* component, and optionally 24-bits unused.
*
* The depth component values are signed floats, whose interpretation is
* defined by the dataspace. The stencil bits are unsigned integers, whose
* interpretation is defined by the dataspace.
*/
DEPTH_32F_STENCIL_8 = 0x34,
/**
* 8-bit format that has a single 8-bit stencil component.
*
* The component values are unsigned integers, whose interpretation is
* defined by the dataspace.
*/
STENCIL_8 = 0x35,
/**
* P010 is a 4:2:0 YCbCr semiplanar format comprised of a WxH Y plane
* followed by a Wx(H/2) CbCr plane. Each sample is represented by a 16-bit
* little-endian value, with the lower 6 bits set to zero.
*
* This format must be accepted by the allocator when used with the
* following usage flags:
*
* - BufferUsage::VIDEO_*
* - BufferUsage::CPU_*
* - BufferUsage::GPU_TEXTURE
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*
* This format is appropriate for 10bit video content.
*
* Buffers with this format must be locked with IMapper::lockYCbCr
* or with IMapper::lock.
*/
YCBCR_P010 = 0x36,
/**
* 24-bit format that has 8-bit H, S, and V components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
HSV_888 = 0x37,
/**
* 8 bit format with a single 8-bit component.
*
* The component values are unsigned normalized to the range [0, 1].
*/
R_8 = 0x38,
/**
* 16-bit format with a single 16-bit component
*
* The component values are unsigned integers, whose interpretation is
* defined by the dataspace.
*/
R_16_UINT = 0x39,
/**
* 32-bit format that has 16-bit R and G components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned integers, whose interpretation is
* defined by the dataspace.
*/
RG_1616_UINT = 0x3a,
/**
* 40-bit format that has 10-bit R, G, B, and A components, in that order,
* from the lowest memory address to the highest memory address.
*
* The component values are unsigned normalized to the range [0, 1], whose
* interpretation is defined by the dataspace.
*/
RGBA_10101010 = 0x3b,
}