blob: bbbcf0991198af41020982b583cd6f9097252628 [file] [log] [blame]
/**
* Copyright (c) 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;
import android.hardware.graphics.common.PlaneLayoutComponent;
import android.hardware.graphics.common.Rect;
/**
* Used by IAllocator/IMapper (gralloc) to describe the plane layout of a buffer.
*
* PlaneLayout uses the following definitions:
*
* - Component - a component is one channel of a pixel. For example, an RGBA format has
* four components: R, G, B and A.
* - Sample - a sample is comprised of all the components in a given plane. For example,
* a buffer with one Y plane and one CbCr plane has one plane with a sample of Y
* and one plane with a sample of CbCr.
* - Pixel - a pixel is comprised of all the (non-metadata/raw) components in buffer across
* all planes. For example, a buffer with a plane of Y and a plane of CbCr has a pixel
* of YCbCr.
* @hide
*/
@VintfStability
parcelable PlaneLayout {
/**
* An list of plane layout components. This list of components should include
* every component in this plane. For example, a CbCr plane should return a
* vector of size two with one PlaneLayoutComponent for Cb and one for Cr.
*/
PlaneLayoutComponent[] components;
/**
* Offset to the first byte of the plane (in bytes), from the start of the allocation.
*/
long offsetInBytes;
/**
* Bits per sample increment (aka column increment): describes the distance
* in bits from one sample to the next sample (to the right) on the same row for the
* the component plane.
*
* The default value is 0. Return the default value if the increment is undefined, unknown,
* or variable.
*
* This can be negative. A negative increment indicates that the samples are read from
* right to left.
*/
long sampleIncrementInBits;
/**
* Horizontal stride: number of bytes between two vertically adjacent
* samples in given plane. This can be mathematically described by:
*
* strideInBytes = ALIGN(widthInSamples * bps / 8, alignment)
*
* where,
*
* bps: average bits per sample
* alignment (in bytes): dependent upon pixel format and usage
*
* strideInBytes can contain additional padding beyond the widthInSamples.
*
* The default value is 0. Return the default value if the stride is undefined, unknown,
* or variable.
*
* This can be negative. A negative stride indicates that the rows are read from
* bottom to top.
*/
long strideInBytes;
/**
* Dimensions of plane (in samples).
*
* This is the number of samples in the plane, even if subsampled.
*
* See 'strideInBytes' for relationship between strideInBytes and widthInSamples.
*/
long widthInSamples;
long heightInSamples;
/**
* Can be used to get the total size in bytes of any memory used by the plane
* including extra padding. This should not include any extra metadata used to describe the
* plane.
*/
long totalSizeInBytes;
/**
* Horizontal and vertical subsampling. Must be a positive power of 2. A value of 1
* indicates no subsampling.
*
* These fields indicate the number of horizontally or vertically adjacent pixels that use
* the same pixel data.
*/
long horizontalSubsampling;
long verticalSubsampling;
}