Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  msm_media_info.h   Sprache: C

 
#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 2x2 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 2x2 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 2x2 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 2x2
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 4k
 * <--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 4k
 *
 * 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 = 8k
 *
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 4k
 * <-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 4k
 * <-----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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 4k
 * <-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 4k
 *
 * 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 = 8k
 *
 * 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 2x2
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 4k
 * <--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 4k
 *
 *
 * 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 = 8k
 *
 * 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 = 8k
 *
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 = 8k
 *
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 = 8k
 *
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 = 8k
 *
 * 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 2x2
 * 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 4k
 * . . . . . . . . . . . . . .                  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 4k
 * . . . . . . . . . . . . . . . .              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 4k
 * <--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 4k
 *
 *
 * 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 = 8k
 *
 * 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 2x2 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
C=96 H=93 G=94

¤ Dauer der Verarbeitung: 0.12 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge