#ifndef __MEDIA_INFO_H__
#define __MEDIA_INFO_H__
#ifndef MSM_MEDIA_ALIGN
#define MSM_MEDIA_ALIGN(__sz, __align) (((__align) & ((__align) - 1 )) ?\
((((__sz) + (__align) - 1 ) / (__align)) * (__align)) :\
(((__sz) + (__align) - 1 ) & (~((__align) - 1 ))))
#endif
#ifndef MSM_MEDIA_ROUNDUP
#define MSM_MEDIA_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1 )) / (__r))
#endif
#ifndef MSM_MEDIA_MAX
#define MSM_MEDIA_MAX(__a, __b) ((__a) > (__b)?(__a):(__b))
#endif
enum color_fmts {
/* Venus NV12:
* YUV 4 : 2 : 0 image with a plane of 8 bit Y samples followed
* by an interleaved U / V plane containing 8 bit 2 x2 subsampled
* colour difference samples .
*
* < - - - - - - - - Y / UV_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* U V U V U V U V U V U V . . . . ^
* U V U V U V U V U V U V . . . . |
* U V U V U V U V U V U V . . . . |
* U V U V U V U V U V U V . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - > Buffer size alignment
*
* Y_Stride : Width aligned to 128
* UV_Stride : Width aligned to 128
* Y_Scanlines : Height aligned to 32
* UV_Scanlines : Height / 2 aligned to 16
* Extradata : Arbitrary ( software - imposed ) padding
* Total size = align ( ( Y_Stride * Y_Scanlines
* + UV_Stride * UV_Scanlines
* + max ( Extradata , Y_Stride * 8 ) , 4096 )
*/
COLOR_FMT_NV12,
/* Venus NV21:
* YUV 4 : 2 : 0 image with a plane of 8 bit Y samples followed
* by an interleaved V / U plane containing 8 bit 2 x2 subsampled
* colour difference samples .
*
* < - - - - - - - - Y / UV_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* V U V U V U V U V U V U . . . . ^
* V U V U V U V U V U V U . . . . |
* V U V U V U V U V U V U . . . . |
* V U V U V U V U V U V U . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - > Padding & Buffer size alignment
*
* Y_Stride : Width aligned to 128
* UV_Stride : Width aligned to 128
* Y_Scanlines : Height aligned to 32
* UV_Scanlines : Height / 2 aligned to 16
* Extradata : Arbitrary ( software - imposed ) padding
* Total size = align ( ( Y_Stride * Y_Scanlines
* + UV_Stride * UV_Scanlines
* + max ( Extradata , Y_Stride * 8 ) , 4096 )
*/
COLOR_FMT_NV21,
/* Venus NV12_MVTB:
* Two YUV 4 : 2 : 0 images / views one after the other
* in a top - bottom layout , same as NV12
* with a plane of 8 bit Y samples followed
* by an interleaved U / V plane containing 8 bit 2 x2 subsampled
* colour difference samples .
*
*
* < - - - - - - - - Y / UV_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ ^
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | |
* . . . . . . . . . . . . . . . . | View_1
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . V |
* U V U V U V U V U V U V . . . . ^ |
* U V U V U V U V U V U V . . . . | |
* U V U V U V U V U V U V . . . . | |
* U V U V U V U V U V U V . . . . UV_Scanlines |
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . V V
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^ ^
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V | |
* . . . . . . . . . . . . . . . . | View_2
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . V |
* U V U V U V U V U V U V . . . . ^ |
* U V U V U V U V U V U V . . . . | |
* U V U V U V U V U V U V . . . . | |
* U V U V U V U V U V U V . . . . UV_Scanlines |
* . . . . . . . . . . . . . . . . | |
* . . . . . . . . . . . . . . . . V V
* . . . . . . . . . . . . . . . . - - > Buffer size alignment
*
* Y_Stride : Width aligned to 128
* UV_Stride : Width aligned to 128
* Y_Scanlines : Height aligned to 32
* UV_Scanlines : Height / 2 aligned to 16
* View_1 begin at : 0 ( zero )
* View_2 begin at : Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines
* Extradata : Arbitrary ( software - imposed ) padding
* Total size = align ( ( 2 * ( Y_Stride * Y_Scanlines )
* + 2 * ( UV_Stride * UV_Scanlines ) + Extradata ) , 4096 )
*/
COLOR_FMT_NV12_MVTB,
/*
* The buffer can be of 2 types :
* ( 1 ) Venus NV12 UBWC Progressive
* ( 2 ) Venus NV12 UBWC Interlaced
*
* ( 1 ) Venus NV12 UBWC Progressive Buffer Format :
* Compressed Macro - tile format for NV12 .
* Contains 4 planes in the following order -
* ( A ) Y_Meta_Plane
* ( B ) Y_UBWC_Plane
* ( C ) UV_Meta_Plane
* ( D ) UV_UBWC_Plane
*
* Y_Meta_Plane consists of meta information to decode compressed
* tile data in Y_UBWC_Plane .
* Y_UBWC_Plane consists of Y data in compressed macro - tile format .
* UBWC decoder block will use the Y_Meta_Plane data together with
* Y_UBWC_Plane data to produce loss - less uncompressed 8 bit Y samples .
*
* UV_Meta_Plane consists of meta information to decode compressed
* tile data in UV_UBWC_Plane .
* UV_UBWC_Plane consists of UV data in compressed macro - tile format .
* UBWC decoder block will use UV_Meta_Plane data together with
* UV_UBWC_Plane data to produce loss - less uncompressed 8 bit 2 x2
* subsampled color difference samples .
*
* Each tile in Y_UBWC_Plane / UV_UBWC_Plane is independently decodable
* and randomly accessible . There is no dependency between tiles .
*
* < - - - - - Y_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_Y_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - Compressed tile Y Stride - - - >
* < - - - - - - - Width - - - - - - - >
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . ^ ^
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . Height |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | Macro_tile_Y_Scanlines
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
* < - - - - - UV_Meta_Stride - - - - >
* M M M M M M M M M M M M . . ^
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . M_UV_Scanlines
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - - Compressed tile UV Stride - - - >
* U * V * U * V * U * V * U * V * . . . . ^
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
*
* Y_Stride = align ( Width , 128 )
* UV_Stride = align ( Width , 128 )
* Y_Scanlines = align ( Height , 32 )
* UV_Scanlines = align ( Height / 2 , 16 )
* Y_UBWC_Plane_size = align ( Y_Stride * Y_Scanlines , 4096 )
* UV_UBWC_Plane_size = align ( UV_Stride * UV_Scanlines , 4096 )
* Y_Meta_Stride = align ( roundup ( Width , Y_TileWidth ) , 64 )
* Y_Meta_Scanlines = align ( roundup ( Height , Y_TileHeight ) , 16 )
* Y_Meta_Plane_size = align ( Y_Meta_Stride * Y_Meta_Scanlines , 4096 )
* UV_Meta_Stride = align ( roundup ( Width , UV_TileWidth ) , 64 )
* UV_Meta_Scanlines = align ( roundup ( Height , UV_TileHeight ) , 16 )
* UV_Meta_Plane_size = align ( UV_Meta_Stride * UV_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( Y_UBWC_Plane_size + UV_UBWC_Plane_size +
* Y_Meta_Plane_size + UV_Meta_Plane_size
* + max ( Extradata , Y_Stride * 48 ) , 4096 )
*
*
* ( 2 ) Venus NV12 UBWC Interlaced Buffer Format :
* Compressed Macro - tile format for NV12 interlaced .
* Contains 8 planes in the following order -
* ( A ) Y_Meta_Top_Field_Plane
* ( B ) Y_UBWC_Top_Field_Plane
* ( C ) UV_Meta_Top_Field_Plane
* ( D ) UV_UBWC_Top_Field_Plane
* ( E ) Y_Meta_Bottom_Field_Plane
* ( F ) Y_UBWC_Bottom_Field_Plane
* ( G ) UV_Meta_Bottom_Field_Plane
* ( H ) UV_UBWC_Bottom_Field_Plane
* Y_Meta_Top_Field_Plane consists of meta information to decode
* compressed tile data for Y_UBWC_Top_Field_Plane .
* Y_UBWC_Top_Field_Plane consists of Y data in compressed macro - tile
* format for top field of an interlaced frame .
* UBWC decoder block will use the Y_Meta_Top_Field_Plane data together
* with Y_UBWC_Top_Field_Plane data to produce loss - less uncompressed
* 8 bit Y samples for top field of an interlaced frame .
*
* UV_Meta_Top_Field_Plane consists of meta information to decode
* compressed tile data in UV_UBWC_Top_Field_Plane .
* UV_UBWC_Top_Field_Plane consists of UV data in compressed macro - tile
* format for top field of an interlaced frame .
* UBWC decoder block will use UV_Meta_Top_Field_Plane data together
* with UV_UBWC_Top_Field_Plane data to produce loss - less uncompressed
* 8 bit subsampled color difference samples for top field of an
* interlaced frame .
*
* Each tile in Y_UBWC_Top_Field_Plane / UV_UBWC_Top_Field_Plane is
* independently decodable and randomly accessible . There is no
* dependency between tiles .
*
* Y_Meta_Bottom_Field_Plane consists of meta information to decode
* compressed tile data for Y_UBWC_Bottom_Field_Plane .
* Y_UBWC_Bottom_Field_Plane consists of Y data in compressed macro - tile
* format for bottom field of an interlaced frame .
* UBWC decoder block will use the Y_Meta_Bottom_Field_Plane data
* together with Y_UBWC_Bottom_Field_Plane data to produce loss - less
* uncompressed 8 bit Y samples for bottom field of an interlaced frame .
*
* UV_Meta_Bottom_Field_Plane consists of meta information to decode
* compressed tile data in UV_UBWC_Bottom_Field_Plane .
* UV_UBWC_Bottom_Field_Plane consists of UV data in compressed
* macro - tile format for bottom field of an interlaced frame .
* UBWC decoder block will use UV_Meta_Bottom_Field_Plane data together
* with UV_UBWC_Bottom_Field_Plane data to produce loss - less
* uncompressed 8 bit subsampled color difference samples for bottom
* field of an interlaced frame .
*
* Each tile in Y_UBWC_Bottom_Field_Plane / UV_UBWC_Bottom_Field_Plane is
* independently decodable and randomly accessible . There is no
* dependency between tiles .
*
* < - - - - - Y_TF_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Half_height |
* M M M M M M M M M M M M . . | Meta_Y_TF_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - Compressed tile Y_TF Stride - >
* < - - - - - - - Width - - - - - - - >
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . ^ ^
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . Half_height |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | Macro_tile_Y_TF_Scanlines
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
* < - - - - UV_TF_Meta_Stride - - - - >
* M M M M M M M M M M M M . . ^
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . M_UV_TF_Scanlines
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - Compressed tile UV_TF Stride - >
* U * V * U * V * U * V * U * V * . . . . ^
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . UV_TF_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - - - - - Y_BF_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Half_height |
* M M M M M M M M M M M M . . | Meta_Y_BF_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - Compressed tile Y_BF Stride - >
* < - - - - - - - Width - - - - - - - >
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . ^ ^
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . Half_height |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | Macro_tile_Y_BF_Scanlines
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
* < - - - - UV_BF_Meta_Stride - - - - >
* M M M M M M M M M M M M . . ^
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . M_UV_BF_Scanlines
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - Compressed tile UV_BF Stride - >
* U * V * U * V * U * V * U * V * . . . . ^
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . UV_BF_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
*
* Half_height = ( Height + 1 ) > > 1
* Y_TF_Stride = align ( Width , 128 )
* UV_TF_Stride = align ( Width , 128 )
* Y_TF_Scanlines = align ( Half_height , 32 )
* UV_TF_Scanlines = align ( ( Half_height + 1 ) / 2 , 32 )
* Y_UBWC_TF_Plane_size = align ( Y_TF_Stride * Y_TF_Scanlines , 4096 )
* UV_UBWC_TF_Plane_size = align ( UV_TF_Stride * UV_TF_Scanlines , 4096 )
* Y_TF_Meta_Stride = align ( roundup ( Width , Y_TileWidth ) , 64 )
* Y_TF_Meta_Scanlines = align ( roundup ( Half_height , Y_TileHeight ) , 16 )
* Y_TF_Meta_Plane_size =
* align ( Y_TF_Meta_Stride * Y_TF_Meta_Scanlines , 4096 )
* UV_TF_Meta_Stride = align ( roundup ( Width , UV_TileWidth ) , 64 )
* UV_TF_Meta_Scanlines = align ( roundup ( Half_height , UV_TileHeight ) , 16 )
* UV_TF_Meta_Plane_size =
* align ( UV_TF_Meta_Stride * UV_TF_Meta_Scanlines , 4096 )
* Y_BF_Stride = align ( Width , 128 )
* UV_BF_Stride = align ( Width , 128 )
* Y_BF_Scanlines = align ( Half_height , 32 )
* UV_BF_Scanlines = align ( ( Half_height + 1 ) / 2 , 32 )
* Y_UBWC_BF_Plane_size = align ( Y_BF_Stride * Y_BF_Scanlines , 4096 )
* UV_UBWC_BF_Plane_size = align ( UV_BF_Stride * UV_BF_Scanlines , 4096 )
* Y_BF_Meta_Stride = align ( roundup ( Width , Y_TileWidth ) , 64 )
* Y_BF_Meta_Scanlines = align ( roundup ( Half_height , Y_TileHeight ) , 16 )
* Y_BF_Meta_Plane_size =
* align ( Y_BF_Meta_Stride * Y_BF_Meta_Scanlines , 4096 )
* UV_BF_Meta_Stride = align ( roundup ( Width , UV_TileWidth ) , 64 )
* UV_BF_Meta_Scanlines = align ( roundup ( Half_height , UV_TileHeight ) , 16 )
* UV_BF_Meta_Plane_size =
* align ( UV_BF_Meta_Stride * UV_BF_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( Y_UBWC_TF_Plane_size + UV_UBWC_TF_Plane_size +
* Y_TF_Meta_Plane_size + UV_TF_Meta_Plane_size +
* Y_UBWC_BF_Plane_size + UV_UBWC_BF_Plane_size +
* Y_BF_Meta_Plane_size + UV_BF_Meta_Plane_size +
* + max ( Extradata , Y_TF_Stride * 48 ) , 4096 )
*/
COLOR_FMT_NV12_UBWC,
/* Venus NV12 10-bit UBWC:
* Compressed Macro - tile format for NV12 .
* Contains 4 planes in the following order -
* ( A ) Y_Meta_Plane
* ( B ) Y_UBWC_Plane
* ( C ) UV_Meta_Plane
* ( D ) UV_UBWC_Plane
*
* Y_Meta_Plane consists of meta information to decode compressed
* tile data in Y_UBWC_Plane .
* Y_UBWC_Plane consists of Y data in compressed macro - tile format .
* UBWC decoder block will use the Y_Meta_Plane data together with
* Y_UBWC_Plane data to produce loss - less uncompressed 10 bit Y samples .
*
* UV_Meta_Plane consists of meta information to decode compressed
* tile data in UV_UBWC_Plane .
* UV_UBWC_Plane consists of UV data in compressed macro - tile format .
* UBWC decoder block will use UV_Meta_Plane data together with
* UV_UBWC_Plane data to produce loss - less uncompressed 10 bit 2 x2
* subsampled color difference samples .
*
* Each tile in Y_UBWC_Plane / UV_UBWC_Plane is independently decodable
* and randomly accessible . There is no dependency between tiles .
*
* < - - - - - Y_Meta_Stride - - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_Y_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - Compressed tile Y Stride - - - >
* < - - - - - - - Width - - - - - - - >
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . ^ ^
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . Height |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | Macro_tile_Y_Scanlines
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
* < - - - - - UV_Meta_Stride - - - - >
* M M M M M M M M M M M M . . ^
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . M_UV_Scanlines
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - - Compressed tile UV Stride - - - >
* U * V * U * V * U * V * U * V * . . . . ^
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
*
*
* Y_Stride = align ( Width * 4 / 3 , 128 )
* UV_Stride = align ( Width * 4 / 3 , 128 )
* Y_Scanlines = align ( Height , 32 )
* UV_Scanlines = align ( Height / 2 , 16 )
* Y_UBWC_Plane_Size = align ( Y_Stride * Y_Scanlines , 4096 )
* UV_UBWC_Plane_Size = align ( UV_Stride * UV_Scanlines , 4096 )
* Y_Meta_Stride = align ( roundup ( Width , Y_TileWidth ) , 64 )
* Y_Meta_Scanlines = align ( roundup ( Height , Y_TileHeight ) , 16 )
* Y_Meta_Plane_size = align ( Y_Meta_Stride * Y_Meta_Scanlines , 4096 )
* UV_Meta_Stride = align ( roundup ( Width , UV_TileWidth ) , 64 )
* UV_Meta_Scanlines = align ( roundup ( Height , UV_TileHeight ) , 16 )
* UV_Meta_Plane_size = align ( UV_Meta_Stride * UV_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( Y_UBWC_Plane_size + UV_UBWC_Plane_size +
* Y_Meta_Plane_size + UV_Meta_Plane_size
* + max ( Extradata , Y_Stride * 48 ) , 4096 )
*/
COLOR_FMT_NV12_BPP10_UBWC,
/* Venus RGBA8888 format:
* Contains 1 plane in the following order -
* ( A ) RGBA plane
*
* < - - - - - - - - RGB_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* R R R R R R R R R R R R . . . . ^ ^
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . Height |
* R R R R R R R R R R R R . . . . | RGB_Scanlines
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
*
* RGB_Stride = align ( Width * 4 , 128 )
* RGB_Scanlines = align ( Height , 32 )
* RGB_Plane_size = align ( RGB_Stride * RGB_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( RGB_Plane_size + Extradata , 4096 )
*/
COLOR_FMT_RGBA8888,
/* Venus RGBA8888 UBWC format:
* Contains 2 planes in the following order -
* ( A ) Meta plane
* ( B ) RGBA plane
*
* < - - - RGB_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_RGB_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - - - - - - - RGB_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* R R R R R R R R R R R R . . . . ^ ^
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . Height |
* R R R R R R R R R R R R . . . . | RGB_Scanlines
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
*
* RGB_Stride = align ( Width * 4 , 128 )
* RGB_Scanlines = align ( Height , 32 )
* RGB_Plane_size = align ( RGB_Stride * RGB_Scanlines , 4096 )
* RGB_Meta_Stride = align ( roundup ( Width , RGB_TileWidth ) , 64 )
* RGB_Meta_Scanline = align ( roundup ( Height , RGB_TileHeight ) , 16 )
* RGB_Meta_Plane_size = align ( RGB_Meta_Stride *
* RGB_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( RGB_Meta_Plane_size + RGB_Plane_size +
* Extradata , 4096 )
*/
COLOR_FMT_RGBA8888_UBWC,
/* Venus RGBA1010102 UBWC format:
* Contains 2 planes in the following order -
* ( A ) Meta plane
* ( B ) RGBA plane
*
* < - - - RGB_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_RGB_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - - - - - - - RGB_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* R R R R R R R R R R R R . . . . ^ ^
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . Height |
* R R R R R R R R R R R R . . . . | RGB_Scanlines
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
*
* RGB_Stride = align ( Width * 4 , 256 )
* RGB_Scanlines = align ( Height , 16 )
* RGB_Plane_size = align ( RGB_Stride * RGB_Scanlines , 4096 )
* RGB_Meta_Stride = align ( roundup ( Width , RGB_TileWidth ) , 64 )
* RGB_Meta_Scanline = align ( roundup ( Height , RGB_TileHeight ) , 16 )
* RGB_Meta_Plane_size = align ( RGB_Meta_Stride *
* RGB_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( RGB_Meta_Plane_size + RGB_Plane_size +
* Extradata , 4096 )
*/
COLOR_FMT_RGBA1010102_UBWC,
/* Venus RGB565 UBWC format:
* Contains 2 planes in the following order -
* ( A ) Meta plane
* ( B ) RGB plane
*
* < - - - RGB_Meta_Stride - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_RGB_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - - - - - - - RGB_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* R R R R R R R R R R R R . . . . ^ ^
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . Height |
* R R R R R R R R R R R R . . . . | RGB_Scanlines
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . | |
* R R R R R R R R R R R R . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
*
* RGB_Stride = align ( Width * 2 , 128 )
* RGB_Scanlines = align ( Height , 16 )
* RGB_Plane_size = align ( RGB_Stride * RGB_Scanlines , 4096 )
* RGB_Meta_Stride = align ( roundup ( Width , RGB_TileWidth ) , 64 )
* RGB_Meta_Scanline = align ( roundup ( Height , RGB_TileHeight ) , 16 )
* RGB_Meta_Plane_size = align ( RGB_Meta_Stride *
* RGB_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( RGB_Meta_Plane_size + RGB_Plane_size +
* Extradata , 4096 )
*/
COLOR_FMT_RGB565_UBWC,
/* P010 UBWC:
* Compressed Macro - tile format for NV12 .
* Contains 4 planes in the following order -
* ( A ) Y_Meta_Plane
* ( B ) Y_UBWC_Plane
* ( C ) UV_Meta_Plane
* ( D ) UV_UBWC_Plane
*
* Y_Meta_Plane consists of meta information to decode compressed
* tile data in Y_UBWC_Plane .
* Y_UBWC_Plane consists of Y data in compressed macro - tile format .
* UBWC decoder block will use the Y_Meta_Plane data together with
* Y_UBWC_Plane data to produce loss - less uncompressed 10 bit Y samples .
*
* UV_Meta_Plane consists of meta information to decode compressed
* tile data in UV_UBWC_Plane .
* UV_UBWC_Plane consists of UV data in compressed macro - tile format .
* UBWC decoder block will use UV_Meta_Plane data together with
* UV_UBWC_Plane data to produce loss - less uncompressed 10 bit 2 x2
* subsampled color difference samples .
*
* Each tile in Y_UBWC_Plane / UV_UBWC_Plane is independently decodable
* and randomly accessible . There is no dependency between tiles .
*
* < - - - - - Y_Meta_Stride - - - - - >
* < - - - - - - - - Width - - - - - - >
* M M M M M M M M M M M M . . ^ ^
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . Height |
* M M M M M M M M M M M M . . | Meta_Y_Scanlines
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . | |
* M M M M M M M M M M M M . . V |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . V
* < - - Compressed tile Y Stride - - - >
* < - - - - - - - Width - - - - - - - >
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . ^ ^
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . Height |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | Macro_tile_Y_Scanlines
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . | |
* Y * Y * Y * Y * Y * Y * Y * Y * . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* . . . . . . . . . . . . . . . . V
* < - - - - - UV_Meta_Stride - - - - >
* M M M M M M M M M M M M . . ^
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . |
* M M M M M M M M M M M M . . M_UV_Scanlines
* . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
* < - - Compressed tile UV Stride - - - >
* U * V * U * V * U * V * U * V * . . . . ^
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . |
* U * V * U * V * U * V * U * V * . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - - - - - - > Buffer size aligned to 4 k
*
*
* Y_Stride = align ( Width * 2 , 256 )
* UV_Stride = align ( Width * 2 , 256 )
* Y_Scanlines = align ( Height , 16 )
* UV_Scanlines = align ( Height / 2 , 16 )
* Y_UBWC_Plane_Size = align ( Y_Stride * Y_Scanlines , 4096 )
* UV_UBWC_Plane_Size = align ( UV_Stride * UV_Scanlines , 4096 )
* Y_Meta_Stride = align ( roundup ( Width , Y_TileWidth ) , 64 )
* Y_Meta_Scanlines = align ( roundup ( Height , Y_TileHeight ) , 16 )
* Y_Meta_Plane_size = align ( Y_Meta_Stride * Y_Meta_Scanlines , 4096 )
* UV_Meta_Stride = align ( roundup ( Width , UV_TileWidth ) , 64 )
* UV_Meta_Scanlines = align ( roundup ( Height , UV_TileHeight ) , 16 )
* UV_Meta_Plane_size = align ( UV_Meta_Stride * UV_Meta_Scanlines , 4096 )
* Extradata = 8 k
*
* Total size = align ( Y_UBWC_Plane_size + UV_UBWC_Plane_size +
* Y_Meta_Plane_size + UV_Meta_Plane_size
* + max ( Extradata , Y_Stride * 48 ) , 4096 )
*/
COLOR_FMT_P010_UBWC,
/* Venus P010:
* YUV 4 : 2 : 0 image with a plane of 10 bit Y samples followed
* by an interleaved U / V plane containing 10 bit 2 x2 subsampled
* colour difference samples .
*
* < - - - - - - - - Y / UV_Stride - - - - - - - - >
* < - - - - - - - Width - - - - - - - >
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . ^ ^
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . Height |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | Y_Scanlines
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . | |
* Y Y Y Y Y Y Y Y Y Y Y Y . . . . V |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* U V U V U V U V U V U V . . . . ^
* U V U V U V U V U V U V . . . . |
* U V U V U V U V U V U V . . . . |
* U V U V U V U V U V U V . . . . UV_Scanlines
* . . . . . . . . . . . . . . . . |
* . . . . . . . . . . . . . . . . V
* . . . . . . . . . . . . . . . . - - > Buffer size alignment
*
* Y_Stride : Width * 2 aligned to 128
* UV_Stride : Width * 2 aligned to 128
* Y_Scanlines : Height aligned to 32
* UV_Scanlines : Height / 2 aligned to 16
* Extradata : Arbitrary ( software - imposed ) padding
* Total size = align ( ( Y_Stride * Y_Scanlines
* + UV_Stride * UV_Scanlines
* + max ( Extradata , Y_Stride * 8 ) , 4096 )
*/
COLOR_FMT_P010,
};
#define COLOR_FMT_RGBA1010102_UBWC COLOR_FMT_RGBA1010102_UBWC
#define COLOR_FMT_RGB565_UBWC COLOR_FMT_RGB565_UBWC
#define COLOR_FMT_P010_UBWC COLOR_FMT_P010_UBWC
#define COLOR_FMT_P010 COLOR_FMT_P010
/*
* Function arguments :
* @ color_fmt
* @ width
* Progressive : width
* Interlaced : width
*/
static unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
{
unsigned int stride = 0 ;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV21:
case COLOR_FMT_NV12:
case COLOR_FMT_NV12_MVTB:
case COLOR_FMT_NV12_UBWC:
stride = MSM_MEDIA_ALIGN(width, 128 );
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
stride = MSM_MEDIA_ALIGN(width, 192 );
stride = MSM_MEDIA_ALIGN(stride * 4 / 3 , 256 );
break ;
case COLOR_FMT_P010_UBWC:
stride = MSM_MEDIA_ALIGN(width * 2 , 256 );
break ;
case COLOR_FMT_P010:
stride = MSM_MEDIA_ALIGN(width * 2 , 128 );
break ;
}
return stride;
}
/*
* Function arguments :
* @ color_fmt
* @ width
* Progressive : width
* Interlaced : width
*/
static unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
{
unsigned int stride = 0 ;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV21:
case COLOR_FMT_NV12:
case COLOR_FMT_NV12_MVTB:
case COLOR_FMT_NV12_UBWC:
stride = MSM_MEDIA_ALIGN(width, 128 );
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
stride = MSM_MEDIA_ALIGN(width, 192 );
stride = MSM_MEDIA_ALIGN(stride * 4 / 3 , 256 );
break ;
case COLOR_FMT_P010_UBWC:
stride = MSM_MEDIA_ALIGN(width * 2 , 256 );
break ;
case COLOR_FMT_P010:
stride = MSM_MEDIA_ALIGN(width * 2 , 128 );
break ;
}
return stride;
}
/*
* Function arguments :
* @ color_fmt
* @ height
* Progressive : height
* Interlaced : ( height + 1 ) > > 1
*/
static unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
{
unsigned int sclines = 0 ;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV21:
case COLOR_FMT_NV12:
case COLOR_FMT_NV12_MVTB:
case COLOR_FMT_NV12_UBWC:
case COLOR_FMT_P010:
sclines = MSM_MEDIA_ALIGN(height, 32 );
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
case COLOR_FMT_P010_UBWC:
sclines = MSM_MEDIA_ALIGN(height, 16 );
break ;
}
return sclines;
}
/*
* Function arguments :
* @ color_fmt
* @ height
* Progressive : height
* Interlaced : ( height + 1 ) > > 1
*/
static unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
{
unsigned int sclines = 0 ;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV21:
case COLOR_FMT_NV12:
case COLOR_FMT_NV12_MVTB:
case COLOR_FMT_NV12_BPP10_UBWC:
case COLOR_FMT_P010_UBWC:
case COLOR_FMT_P010:
sclines = MSM_MEDIA_ALIGN((height + 1 ) >> 1 , 16 );
break ;
case COLOR_FMT_NV12_UBWC:
sclines = MSM_MEDIA_ALIGN((height + 1 ) >> 1 , 32 );
break ;
}
return sclines;
}
/*
* Function arguments :
* @ color_fmt
* @ width
* Progressive : width
* Interlaced : width
*/
static unsigned int VENUS_Y_META_STRIDE(int color_fmt, int width)
{
int y_tile_width = 0 , y_meta_stride;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV12_UBWC:
case COLOR_FMT_P010_UBWC:
y_tile_width = 32 ;
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
y_tile_width = 48 ;
break ;
default :
return 0 ;
}
y_meta_stride = MSM_MEDIA_ROUNDUP(width, y_tile_width);
return MSM_MEDIA_ALIGN(y_meta_stride, 64 );
}
/*
* Function arguments :
* @ color_fmt
* @ height
* Progressive : height
* Interlaced : ( height + 1 ) > > 1
*/
static unsigned int VENUS_Y_META_SCANLINES(int color_fmt, int height)
{
int y_tile_height = 0 , y_meta_scanlines;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV12_UBWC:
y_tile_height = 8 ;
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
case COLOR_FMT_P010_UBWC:
y_tile_height = 4 ;
break ;
default :
return 0 ;
}
y_meta_scanlines = MSM_MEDIA_ROUNDUP(height, y_tile_height);
return MSM_MEDIA_ALIGN(y_meta_scanlines, 16 );
}
/*
* Function arguments :
* @ color_fmt
* @ width
* Progressive : width
* Interlaced : width
*/
static unsigned int VENUS_UV_META_STRIDE(int color_fmt, int width)
{
int uv_tile_width = 0 , uv_meta_stride;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV12_UBWC:
case COLOR_FMT_P010_UBWC:
uv_tile_width = 16 ;
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
uv_tile_width = 24 ;
break ;
default :
return 0 ;
}
uv_meta_stride = MSM_MEDIA_ROUNDUP((width+1 )>>1 , uv_tile_width);
return MSM_MEDIA_ALIGN(uv_meta_stride, 64 );
}
/*
* Function arguments :
* @ color_fmt
* @ height
* Progressive : height
* Interlaced : ( height + 1 ) > > 1
*/
static unsigned int VENUS_UV_META_SCANLINES(int color_fmt, int height)
{
int uv_tile_height = 0 , uv_meta_scanlines;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_NV12_UBWC:
uv_tile_height = 8 ;
break ;
case COLOR_FMT_NV12_BPP10_UBWC:
case COLOR_FMT_P010_UBWC:
uv_tile_height = 4 ;
break ;
default :
return 0 ;
}
uv_meta_scanlines = MSM_MEDIA_ROUNDUP((height+1 )>>1 , uv_tile_height);
return MSM_MEDIA_ALIGN(uv_meta_scanlines, 16 );
}
static unsigned int VENUS_RGB_STRIDE(int color_fmt, int width)
{
unsigned int alignment = 0 , bpp = 4 ;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_RGBA8888:
alignment = 128 ;
break ;
case COLOR_FMT_RGB565_UBWC:
alignment = 256 ;
bpp = 2 ;
break ;
case COLOR_FMT_RGBA8888_UBWC:
case COLOR_FMT_RGBA1010102_UBWC:
alignment = 256 ;
break ;
default :
return 0 ;
}
return MSM_MEDIA_ALIGN(width * bpp, alignment);
}
static unsigned int VENUS_RGB_SCANLINES(int color_fmt, int height)
{
unsigned int alignment = 0 ;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_RGBA8888:
alignment = 32 ;
break ;
case COLOR_FMT_RGBA8888_UBWC:
case COLOR_FMT_RGBA1010102_UBWC:
case COLOR_FMT_RGB565_UBWC:
alignment = 16 ;
break ;
default :
return 0 ;
}
return MSM_MEDIA_ALIGN(height, alignment);
}
static unsigned int VENUS_RGB_META_STRIDE(int color_fmt, int width)
{
int rgb_meta_stride;
if (!width)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_RGBA8888_UBWC:
case COLOR_FMT_RGBA1010102_UBWC:
case COLOR_FMT_RGB565_UBWC:
rgb_meta_stride = MSM_MEDIA_ROUNDUP(width, 16 );
return MSM_MEDIA_ALIGN(rgb_meta_stride, 64 );
}
return 0 ;
}
static unsigned int VENUS_RGB_META_SCANLINES(int color_fmt, int height)
{
int rgb_meta_scanlines;
if (!height)
return 0 ;
switch (color_fmt) {
case COLOR_FMT_RGBA8888_UBWC:
case COLOR_FMT_RGBA1010102_UBWC:
case COLOR_FMT_RGB565_UBWC:
rgb_meta_scanlines = MSM_MEDIA_ROUNDUP(height, 4 );
return MSM_MEDIA_ALIGN(rgb_meta_scanlines, 16 );
}
return 0 ;
}
#endif
Messung V0.5 in Prozent C=99 H=100 G=99
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.67Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-05)
¤
*Eine klare Vorstellung vom Zielzustand