mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-23 06:59:44 -05:00
render/pixel-format: add support for block-based formats
Some formats like sub-sampled YCbCr use a block of bytes to store the color values for more than one pixel. Update our format table to be able to handle such formats.
This commit is contained in:
parent
78a1ac540e
commit
96f3f3c92e
9 changed files with 117 additions and 56 deletions
|
|
@ -7,6 +7,13 @@
|
|||
* Information about a pixel format.
|
||||
*
|
||||
* A pixel format is identified via its DRM four character code (see <drm_fourcc.h>).
|
||||
*
|
||||
* Simple formats have a block size of 1×1 pixels and bytes_per_block contains
|
||||
* the number of bytes per pixel (including padding).
|
||||
*
|
||||
* Tiled formats (e.g. sub-sampled YCbCr) are described with a block size
|
||||
* greater than 1×1 pixels. A block is a rectangle of pixels which are stored
|
||||
* next to each other in a byte-aligned memory region.
|
||||
*/
|
||||
struct wlr_pixel_format_info {
|
||||
uint32_t drm_format;
|
||||
|
|
@ -16,8 +23,10 @@ struct wlr_pixel_format_info {
|
|||
*/
|
||||
uint32_t opaque_substitute;
|
||||
|
||||
/* Bits per pixels */
|
||||
uint32_t bpp;
|
||||
/* Bytes per block (including padding) */
|
||||
uint32_t bytes_per_block;
|
||||
/* Size of a block in pixels (zero for 1×1) */
|
||||
uint32_t block_width, block_height;
|
||||
|
||||
/* True if the format has an alpha channel */
|
||||
bool has_alpha;
|
||||
|
|
@ -29,6 +38,14 @@ struct wlr_pixel_format_info {
|
|||
* NULL is returned if the pixel format is unknown.
|
||||
*/
|
||||
const struct wlr_pixel_format_info *drm_get_pixel_format_info(uint32_t fmt);
|
||||
/**
|
||||
* Get the number of pixels per block for a pixel format.
|
||||
*/
|
||||
uint32_t pixel_format_info_pixels_per_block(const struct wlr_pixel_format_info *info);
|
||||
/**
|
||||
* Get the minimum stride for a given pixel format and width.
|
||||
*/
|
||||
int32_t pixel_format_info_min_stride(const struct wlr_pixel_format_info *info, int32_t width);
|
||||
/**
|
||||
* Check whether a stride is large enough for a given pixel format and width.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue