You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					820 lines
				
				27 KiB
			
		
		
			
		
	
	
					820 lines
				
				27 KiB
			| 
											6 years ago
										 | #ifndef __MEDIA_INFO_H__
 | ||
|  | #define __MEDIA_INFO_H__
 | ||
|  | 
 | ||
|  | #ifndef MSM_MEDIA_ALIGN
 | ||
|  | #define MSM_MEDIA_ALIGN(__sz, __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,
 | ||
|  | 	/* Venus NV12 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 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)
 | ||
|  | 	 */
 | ||
|  | 	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,
 | ||
|  | };
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_EXTRADATA_SIZE(int width, int height)
 | ||
|  | {
 | ||
|  | 	(void)height;
 | ||
|  | 	(void)width;
 | ||
|  | 
 | ||
|  | 	/*
 | ||
|  | 	 * In the future, calculate the size based on the w/h but just
 | ||
|  | 	 * hardcode it for now since 16K satisfies all current usecases.
 | ||
|  | 	 */
 | ||
|  | 	return 16 * 1024;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment, stride = 0;
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV21:
 | ||
|  | 	case COLOR_FMT_NV12:
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		alignment = 128;
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(width, alignment);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		alignment = 256;
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(width, 192);
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(stride * 4/3, alignment);
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		break;
 | ||
|  | 	}
 | ||
|  | invalid_input:
 | ||
|  | 	return stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment, stride = 0;
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV21:
 | ||
|  | 	case COLOR_FMT_NV12:
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		alignment = 128;
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(width, alignment);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		alignment = 256;
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(width, 192);
 | ||
|  | 		stride = MSM_MEDIA_ALIGN(stride * 4/3, alignment);
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		break;
 | ||
|  | 	}
 | ||
|  | invalid_input:
 | ||
|  | 	return stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment, sclines = 0;
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV21:
 | ||
|  | 	case COLOR_FMT_NV12:
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		alignment = 32;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		alignment = 16;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		return 0;
 | ||
|  | 	}
 | ||
|  | 	sclines = MSM_MEDIA_ALIGN(height, alignment);
 | ||
|  | invalid_input:
 | ||
|  | 	return sclines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment, sclines = 0;
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV21:
 | ||
|  | 	case COLOR_FMT_NV12:
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		alignment = 16;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		alignment = 32;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	sclines = MSM_MEDIA_ALIGN(height / 2, alignment);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return sclines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_Y_META_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	int y_tile_width = 0, y_meta_stride = 0;
 | ||
|  | 
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		y_tile_width = 32;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		y_tile_width = 48;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	y_meta_stride = MSM_MEDIA_ROUNDUP(width, y_tile_width);
 | ||
|  | 	y_meta_stride = MSM_MEDIA_ALIGN(y_meta_stride, 64);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return y_meta_stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_Y_META_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	int y_tile_height = 0, y_meta_scanlines = 0;
 | ||
|  | 
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		y_tile_height = 8;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		y_tile_height = 4;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	y_meta_scanlines = MSM_MEDIA_ROUNDUP(height, y_tile_height);
 | ||
|  | 	y_meta_scanlines = MSM_MEDIA_ALIGN(y_meta_scanlines, 16);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return y_meta_scanlines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_UV_META_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	int uv_tile_width = 0, uv_meta_stride = 0;
 | ||
|  | 
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		uv_tile_width = 16;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		uv_tile_width = 24;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	uv_meta_stride = MSM_MEDIA_ROUNDUP(width / 2, uv_tile_width);
 | ||
|  | 	uv_meta_stride = MSM_MEDIA_ALIGN(uv_meta_stride, 64);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return uv_meta_stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_UV_META_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	int uv_tile_height = 0, uv_meta_scanlines = 0;
 | ||
|  | 
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 		uv_tile_height = 8;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		uv_tile_height = 4;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	uv_meta_scanlines = MSM_MEDIA_ROUNDUP(height / 2, uv_tile_height);
 | ||
|  | 	uv_meta_scanlines = MSM_MEDIA_ALIGN(uv_meta_scanlines, 16);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return uv_meta_scanlines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_RGB_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment = 0, stride = 0;
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_RGBA8888:
 | ||
|  | 		alignment = 128;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_RGBA8888_UBWC:
 | ||
|  | 		alignment = 256;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	stride = MSM_MEDIA_ALIGN(width * 4, alignment);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_RGB_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	unsigned int alignment = 0, scanlines = 0;
 | ||
|  | 
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_RGBA8888:
 | ||
|  | 		alignment = 32;
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_RGBA8888_UBWC:
 | ||
|  | 		alignment = 16;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	scanlines = MSM_MEDIA_ALIGN(height, alignment);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return scanlines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_RGB_META_STRIDE(int color_fmt, int width)
 | ||
|  | {
 | ||
|  | 	int rgb_tile_width = 0, rgb_meta_stride = 0;
 | ||
|  | 
 | ||
|  | 	if (!width)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_RGBA8888_UBWC:
 | ||
|  | 		rgb_tile_width = 16;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	rgb_meta_stride = MSM_MEDIA_ROUNDUP(width, rgb_tile_width);
 | ||
|  | 	rgb_meta_stride = MSM_MEDIA_ALIGN(rgb_meta_stride, 64);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return rgb_meta_stride;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_RGB_META_SCANLINES(int color_fmt, int height)
 | ||
|  | {
 | ||
|  | 	int rgb_tile_height = 0, rgb_meta_scanlines = 0;
 | ||
|  | 
 | ||
|  | 	if (!height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_RGBA8888_UBWC:
 | ||
|  | 		rgb_tile_height = 4;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		goto invalid_input;
 | ||
|  | 	}
 | ||
|  | 
 | ||
|  | 	rgb_meta_scanlines = MSM_MEDIA_ROUNDUP(height, rgb_tile_height);
 | ||
|  | 	rgb_meta_scanlines = MSM_MEDIA_ALIGN(rgb_meta_scanlines, 16);
 | ||
|  | 
 | ||
|  | invalid_input:
 | ||
|  | 	return rgb_meta_scanlines;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_BUFFER_SIZE(
 | ||
|  | 	int color_fmt, int width, int height)
 | ||
|  | {
 | ||
|  | 	const unsigned int extra_size = VENUS_EXTRADATA_SIZE(width, height);
 | ||
|  | 	unsigned int uv_alignment = 0, size = 0;
 | ||
|  | 	unsigned int y_plane, uv_plane, y_stride,
 | ||
|  | 		uv_stride, y_sclines, uv_sclines;
 | ||
|  | 	unsigned int y_ubwc_plane = 0, uv_ubwc_plane = 0;
 | ||
|  | 	unsigned int y_meta_stride = 0, y_meta_scanlines = 0;
 | ||
|  | 	unsigned int uv_meta_stride = 0, uv_meta_scanlines = 0;
 | ||
|  | 	unsigned int y_meta_plane = 0, uv_meta_plane = 0;
 | ||
|  | 	unsigned int rgb_stride = 0, rgb_scanlines = 0;
 | ||
|  | 	unsigned int rgb_plane = 0, rgb_ubwc_plane = 0, rgb_meta_plane = 0;
 | ||
|  | 	unsigned int rgb_meta_stride = 0, rgb_meta_scanlines = 0;
 | ||
|  | 
 | ||
|  | 	if (!width || !height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	y_stride = VENUS_Y_STRIDE(color_fmt, width);
 | ||
|  | 	uv_stride = VENUS_UV_STRIDE(color_fmt, width);
 | ||
|  | 	y_sclines = VENUS_Y_SCANLINES(color_fmt, height);
 | ||
|  | 	uv_sclines = VENUS_UV_SCANLINES(color_fmt, height);
 | ||
|  | 	rgb_stride = VENUS_RGB_STRIDE(color_fmt, width);
 | ||
|  | 	rgb_scanlines = VENUS_RGB_SCANLINES(color_fmt, height);
 | ||
|  | 
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV21:
 | ||
|  | 	case COLOR_FMT_NV12:
 | ||
|  | 		uv_alignment = 4096;
 | ||
|  | 		y_plane = y_stride * y_sclines;
 | ||
|  | 		uv_plane = uv_stride * uv_sclines + uv_alignment;
 | ||
|  | 		size = y_plane + uv_plane +
 | ||
|  | 				MSM_MEDIA_MAX(extra_size, 8 * y_stride);
 | ||
|  | 		size = MSM_MEDIA_ALIGN(size, 4096);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 		uv_alignment = 4096;
 | ||
|  | 		y_plane = y_stride * y_sclines;
 | ||
|  | 		uv_plane = uv_stride * uv_sclines + uv_alignment;
 | ||
|  | 		size = y_plane + uv_plane;
 | ||
|  | 		size = 2 * size + extra_size;
 | ||
|  | 		size = MSM_MEDIA_ALIGN(size, 4096);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_NV12_UBWC:
 | ||
|  | 	case COLOR_FMT_NV12_BPP10_UBWC:
 | ||
|  | 		y_ubwc_plane = MSM_MEDIA_ALIGN(y_stride * y_sclines, 4096);
 | ||
|  | 		uv_ubwc_plane = MSM_MEDIA_ALIGN(uv_stride * uv_sclines, 4096);
 | ||
|  | 		y_meta_stride = VENUS_Y_META_STRIDE(color_fmt, width);
 | ||
|  | 		y_meta_scanlines = VENUS_Y_META_SCANLINES(color_fmt, height);
 | ||
|  | 		y_meta_plane = MSM_MEDIA_ALIGN(
 | ||
|  | 				y_meta_stride * y_meta_scanlines, 4096);
 | ||
|  | 		uv_meta_stride = VENUS_UV_META_STRIDE(color_fmt, width);
 | ||
|  | 		uv_meta_scanlines = VENUS_UV_META_SCANLINES(color_fmt, height);
 | ||
|  | 		uv_meta_plane = MSM_MEDIA_ALIGN(uv_meta_stride *
 | ||
|  | 					uv_meta_scanlines, 4096);
 | ||
|  | 
 | ||
|  | 		size = y_ubwc_plane + uv_ubwc_plane + y_meta_plane +
 | ||
|  | 			uv_meta_plane +
 | ||
|  | 			MSM_MEDIA_MAX(extra_size + 8192, 48 * y_stride);
 | ||
|  | 		size = MSM_MEDIA_ALIGN(size, 4096);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_RGBA8888:
 | ||
|  | 		rgb_plane = MSM_MEDIA_ALIGN(rgb_stride  * rgb_scanlines, 4096);
 | ||
|  | 		size = rgb_plane;
 | ||
|  | 		size =  MSM_MEDIA_ALIGN(size, 4096);
 | ||
|  | 		break;
 | ||
|  | 	case COLOR_FMT_RGBA8888_UBWC:
 | ||
|  | 		rgb_ubwc_plane = MSM_MEDIA_ALIGN(rgb_stride * rgb_scanlines,
 | ||
|  | 							4096);
 | ||
|  | 		rgb_meta_stride = VENUS_RGB_META_STRIDE(color_fmt, width);
 | ||
|  | 		rgb_meta_scanlines = VENUS_RGB_META_SCANLINES(color_fmt,
 | ||
|  | 					height);
 | ||
|  | 		rgb_meta_plane = MSM_MEDIA_ALIGN(rgb_meta_stride *
 | ||
|  | 					rgb_meta_scanlines, 4096);
 | ||
|  | 		size = rgb_ubwc_plane + rgb_meta_plane;
 | ||
|  | 		size = MSM_MEDIA_ALIGN(size, 4096);
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		break;
 | ||
|  | 	}
 | ||
|  | invalid_input:
 | ||
|  | 	return size;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | static inline unsigned int VENUS_VIEW2_OFFSET(
 | ||
|  | 	int color_fmt, int width, int height)
 | ||
|  | {
 | ||
|  | 	unsigned int offset = 0;
 | ||
|  | 	unsigned int y_plane, uv_plane, y_stride,
 | ||
|  | 		uv_stride, y_sclines, uv_sclines;
 | ||
|  | 	if (!width || !height)
 | ||
|  | 		goto invalid_input;
 | ||
|  | 
 | ||
|  | 	y_stride = VENUS_Y_STRIDE(color_fmt, width);
 | ||
|  | 	uv_stride = VENUS_UV_STRIDE(color_fmt, width);
 | ||
|  | 	y_sclines = VENUS_Y_SCANLINES(color_fmt, height);
 | ||
|  | 	uv_sclines = VENUS_UV_SCANLINES(color_fmt, height);
 | ||
|  | 	switch (color_fmt) {
 | ||
|  | 	case COLOR_FMT_NV12_MVTB:
 | ||
|  | 		y_plane = y_stride * y_sclines;
 | ||
|  | 		uv_plane = uv_stride * uv_sclines;
 | ||
|  | 		offset = y_plane + uv_plane;
 | ||
|  | 		break;
 | ||
|  | 	default:
 | ||
|  | 		break;
 | ||
|  | 	}
 | ||
|  | invalid_input:
 | ||
|  | 	return offset;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | #endif
 |