mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-07-19 11:52:12 +08:00
dragonpilot v2022.08.14
version: dragonpilot v0.8.16 release date: 2022-08-14T16:03:36 dp-dev(priv) master commit: 9a40536565e6da64122ef8c30d7e97523fde518e
This commit is contained in:
+78
@@ -0,0 +1,78 @@
|
||||
/****************************************************************************
|
||||
****************************************************************************
|
||||
***
|
||||
*** This header was automatically generated from a Linux kernel header
|
||||
*** of the same name, to make information necessary for userspace to
|
||||
*** call into the kernel available to libc. It contains only constants,
|
||||
*** structures, and macros generated from the original header, and thus,
|
||||
*** contains no copyrightable information.
|
||||
***
|
||||
*** To edit the content of this header, modify the corresponding
|
||||
*** source file (e.g. under external/kernel-headers/original/) then
|
||||
*** run bionic/libc/kernel/tools/update_all.py
|
||||
***
|
||||
*** Any manual change here will be lost the next time this script will
|
||||
*** be run. You've been warned!
|
||||
***
|
||||
****************************************************************************
|
||||
****************************************************************************/
|
||||
#ifndef _UAPI_LINUX_ION_H
|
||||
#define _UAPI_LINUX_ION_H
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/types.h>
|
||||
typedef int ion_user_handle_t;
|
||||
enum ion_heap_type {
|
||||
ION_HEAP_TYPE_SYSTEM,
|
||||
ION_HEAP_TYPE_SYSTEM_CONTIG,
|
||||
ION_HEAP_TYPE_CARVEOUT,
|
||||
ION_HEAP_TYPE_CHUNK,
|
||||
ION_HEAP_TYPE_DMA,
|
||||
ION_HEAP_TYPE_CUSTOM,
|
||||
};
|
||||
#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8)
|
||||
#define ION_FLAG_CACHED 1
|
||||
#define ION_FLAG_CACHED_NEEDS_SYNC 2
|
||||
struct ion_allocation_data {
|
||||
size_t len;
|
||||
size_t align;
|
||||
unsigned int heap_id_mask;
|
||||
unsigned int flags;
|
||||
ion_user_handle_t handle;
|
||||
};
|
||||
struct ion_fd_data {
|
||||
ion_user_handle_t handle;
|
||||
int fd;
|
||||
};
|
||||
struct ion_handle_data {
|
||||
ion_user_handle_t handle;
|
||||
};
|
||||
struct ion_custom_data {
|
||||
unsigned int cmd;
|
||||
unsigned long arg;
|
||||
};
|
||||
#define MAX_HEAP_NAME 32
|
||||
struct ion_heap_data {
|
||||
char name[MAX_HEAP_NAME];
|
||||
__u32 type;
|
||||
__u32 heap_id;
|
||||
__u32 reserved0;
|
||||
__u32 reserved1;
|
||||
__u32 reserved2;
|
||||
};
|
||||
struct ion_heap_query {
|
||||
__u32 cnt;
|
||||
__u32 reserved0;
|
||||
__u64 heaps;
|
||||
__u32 reserved1;
|
||||
__u32 reserved2;
|
||||
};
|
||||
#define ION_IOC_MAGIC 'I'
|
||||
#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_allocation_data)
|
||||
#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data)
|
||||
#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data)
|
||||
#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data)
|
||||
#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data)
|
||||
#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data)
|
||||
#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
|
||||
#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query)
|
||||
#endif
|
||||
Vendored
+211
@@ -0,0 +1,211 @@
|
||||
#ifndef _UAPI_MSM_ION_H
|
||||
#define _UAPI_MSM_ION_H
|
||||
|
||||
#include <linux/ion.h>
|
||||
|
||||
enum msm_ion_heap_types {
|
||||
ION_HEAP_TYPE_MSM_START = ION_HEAP_TYPE_CUSTOM + 1,
|
||||
ION_HEAP_TYPE_SECURE_DMA = ION_HEAP_TYPE_MSM_START,
|
||||
ION_HEAP_TYPE_SYSTEM_SECURE,
|
||||
ION_HEAP_TYPE_HYP_CMA,
|
||||
/*
|
||||
* if you add a heap type here you should also add it to
|
||||
* heap_types_info[] in msm_ion.c
|
||||
*/
|
||||
};
|
||||
|
||||
/**
|
||||
* These are the only ids that should be used for Ion heap ids.
|
||||
* The ids listed are the order in which allocation will be attempted
|
||||
* if specified. Don't swap the order of heap ids unless you know what
|
||||
* you are doing!
|
||||
* Id's are spaced by purpose to allow new Id's to be inserted in-between (for
|
||||
* possible fallbacks)
|
||||
*/
|
||||
|
||||
enum ion_heap_ids {
|
||||
INVALID_HEAP_ID = -1,
|
||||
ION_CP_MM_HEAP_ID = 8,
|
||||
ION_SECURE_HEAP_ID = 9,
|
||||
ION_SECURE_DISPLAY_HEAP_ID = 10,
|
||||
ION_CP_MFC_HEAP_ID = 12,
|
||||
ION_CP_WB_HEAP_ID = 16, /* 8660 only */
|
||||
ION_CAMERA_HEAP_ID = 20, /* 8660 only */
|
||||
ION_SYSTEM_CONTIG_HEAP_ID = 21,
|
||||
ION_ADSP_HEAP_ID = 22,
|
||||
ION_PIL1_HEAP_ID = 23, /* Currently used for other PIL images */
|
||||
ION_SF_HEAP_ID = 24,
|
||||
ION_SYSTEM_HEAP_ID = 25,
|
||||
ION_PIL2_HEAP_ID = 26, /* Currently used for modem firmware images */
|
||||
ION_QSECOM_HEAP_ID = 27,
|
||||
ION_AUDIO_HEAP_ID = 28,
|
||||
|
||||
ION_MM_FIRMWARE_HEAP_ID = 29,
|
||||
|
||||
ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_FLAG_SECURE flag */
|
||||
};
|
||||
|
||||
/*
|
||||
* The IOMMU heap is deprecated! Here are some aliases for backwards
|
||||
* compatibility:
|
||||
*/
|
||||
#define ION_IOMMU_HEAP_ID ION_SYSTEM_HEAP_ID
|
||||
#define ION_HEAP_TYPE_IOMMU ION_HEAP_TYPE_SYSTEM
|
||||
|
||||
enum ion_fixed_position {
|
||||
NOT_FIXED,
|
||||
FIXED_LOW,
|
||||
FIXED_MIDDLE,
|
||||
FIXED_HIGH,
|
||||
};
|
||||
|
||||
enum cp_mem_usage {
|
||||
VIDEO_BITSTREAM = 0x1,
|
||||
VIDEO_PIXEL = 0x2,
|
||||
VIDEO_NONPIXEL = 0x3,
|
||||
DISPLAY_SECURE_CP_USAGE = 0x4,
|
||||
CAMERA_SECURE_CP_USAGE = 0x5,
|
||||
MAX_USAGE = 0x6,
|
||||
UNKNOWN = 0x7FFFFFFF,
|
||||
};
|
||||
|
||||
/**
|
||||
* Flags to be used when allocating from the secure heap for
|
||||
* content protection
|
||||
*/
|
||||
#define ION_FLAG_CP_TOUCH (1 << 17)
|
||||
#define ION_FLAG_CP_BITSTREAM (1 << 18)
|
||||
#define ION_FLAG_CP_PIXEL (1 << 19)
|
||||
#define ION_FLAG_CP_NON_PIXEL (1 << 20)
|
||||
#define ION_FLAG_CP_CAMERA (1 << 21)
|
||||
#define ION_FLAG_CP_HLOS (1 << 22)
|
||||
#define ION_FLAG_CP_HLOS_FREE (1 << 23)
|
||||
#define ION_FLAG_CP_SEC_DISPLAY (1 << 25)
|
||||
#define ION_FLAG_CP_APP (1 << 26)
|
||||
|
||||
/**
|
||||
* Flag to allow non continguous allocation of memory from secure
|
||||
* heap
|
||||
*/
|
||||
#define ION_FLAG_ALLOW_NON_CONTIG (1 << 24)
|
||||
|
||||
/**
|
||||
* Flag to use when allocating to indicate that a heap is secure.
|
||||
*/
|
||||
#define ION_FLAG_SECURE (1 << ION_HEAP_ID_RESERVED)
|
||||
|
||||
/**
|
||||
* Flag for clients to force contiguous memort allocation
|
||||
*
|
||||
* Use of this flag is carefully monitored!
|
||||
*/
|
||||
#define ION_FLAG_FORCE_CONTIGUOUS (1 << 30)
|
||||
|
||||
/*
|
||||
* Used in conjunction with heap which pool memory to force an allocation
|
||||
* to come from the page allocator directly instead of from the pool allocation
|
||||
*/
|
||||
#define ION_FLAG_POOL_FORCE_ALLOC (1 << 16)
|
||||
|
||||
|
||||
#define ION_FLAG_POOL_PREFETCH (1 << 27)
|
||||
|
||||
/**
|
||||
* Deprecated! Please use the corresponding ION_FLAG_*
|
||||
*/
|
||||
#define ION_SECURE ION_FLAG_SECURE
|
||||
#define ION_FORCE_CONTIGUOUS ION_FLAG_FORCE_CONTIGUOUS
|
||||
|
||||
/**
|
||||
* Macro should be used with ion_heap_ids defined above.
|
||||
*/
|
||||
#define ION_HEAP(bit) (1 << (bit))
|
||||
|
||||
#define ION_ADSP_HEAP_NAME "adsp"
|
||||
#define ION_SYSTEM_HEAP_NAME "system"
|
||||
#define ION_VMALLOC_HEAP_NAME ION_SYSTEM_HEAP_NAME
|
||||
#define ION_KMALLOC_HEAP_NAME "kmalloc"
|
||||
#define ION_AUDIO_HEAP_NAME "audio"
|
||||
#define ION_SF_HEAP_NAME "sf"
|
||||
#define ION_MM_HEAP_NAME "mm"
|
||||
#define ION_CAMERA_HEAP_NAME "camera_preview"
|
||||
#define ION_IOMMU_HEAP_NAME "iommu"
|
||||
#define ION_MFC_HEAP_NAME "mfc"
|
||||
#define ION_WB_HEAP_NAME "wb"
|
||||
#define ION_MM_FIRMWARE_HEAP_NAME "mm_fw"
|
||||
#define ION_PIL1_HEAP_NAME "pil_1"
|
||||
#define ION_PIL2_HEAP_NAME "pil_2"
|
||||
#define ION_QSECOM_HEAP_NAME "qsecom"
|
||||
#define ION_SECURE_HEAP_NAME "secure_heap"
|
||||
#define ION_SECURE_DISPLAY_HEAP_NAME "secure_display"
|
||||
|
||||
#define ION_SET_CACHED(__cache) (__cache | ION_FLAG_CACHED)
|
||||
#define ION_SET_UNCACHED(__cache) (__cache & ~ION_FLAG_CACHED)
|
||||
|
||||
#define ION_IS_CACHED(__flags) ((__flags) & ION_FLAG_CACHED)
|
||||
|
||||
/* struct ion_flush_data - data passed to ion for flushing caches
|
||||
*
|
||||
* @handle: handle with data to flush
|
||||
* @fd: fd to flush
|
||||
* @vaddr: userspace virtual address mapped with mmap
|
||||
* @offset: offset into the handle to flush
|
||||
* @length: length of handle to flush
|
||||
*
|
||||
* Performs cache operations on the handle. If p is the start address
|
||||
* of the handle, p + offset through p + offset + length will have
|
||||
* the cache operations performed
|
||||
*/
|
||||
struct ion_flush_data {
|
||||
ion_user_handle_t handle;
|
||||
int fd;
|
||||
void *vaddr;
|
||||
unsigned int offset;
|
||||
unsigned int length;
|
||||
};
|
||||
|
||||
struct ion_prefetch_regions {
|
||||
unsigned int vmid;
|
||||
size_t *sizes;
|
||||
unsigned int nr_sizes;
|
||||
};
|
||||
|
||||
struct ion_prefetch_data {
|
||||
int heap_id;
|
||||
unsigned long len;
|
||||
/* Is unsigned long bad? 32bit compiler vs 64 bit compiler*/
|
||||
struct ion_prefetch_regions *regions;
|
||||
unsigned int nr_regions;
|
||||
};
|
||||
|
||||
#define ION_IOC_MSM_MAGIC 'M'
|
||||
|
||||
/**
|
||||
* DOC: ION_IOC_CLEAN_CACHES - clean the caches
|
||||
*
|
||||
* Clean the caches of the handle specified.
|
||||
*/
|
||||
#define ION_IOC_CLEAN_CACHES _IOWR(ION_IOC_MSM_MAGIC, 0, \
|
||||
struct ion_flush_data)
|
||||
/**
|
||||
* DOC: ION_IOC_INV_CACHES - invalidate the caches
|
||||
*
|
||||
* Invalidate the caches of the handle specified.
|
||||
*/
|
||||
#define ION_IOC_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 1, \
|
||||
struct ion_flush_data)
|
||||
/**
|
||||
* DOC: ION_IOC_CLEAN_INV_CACHES - clean and invalidate the caches
|
||||
*
|
||||
* Clean and invalidate the caches of the handle specified.
|
||||
*/
|
||||
#define ION_IOC_CLEAN_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 2, \
|
||||
struct ion_flush_data)
|
||||
|
||||
#define ION_IOC_PREFETCH _IOWR(ION_IOC_MSM_MAGIC, 3, \
|
||||
struct ion_prefetch_data)
|
||||
|
||||
#define ION_IOC_DRAIN _IOWR(ION_IOC_MSM_MAGIC, 4, \
|
||||
struct ion_prefetch_data)
|
||||
|
||||
#endif
|
||||
+819
@@ -0,0 +1,819 @@
|
||||
#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
|
||||
+1696
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user