diff options
Diffstat (limited to 'msm8909/libqdutils/qdMetaData.h')
-rw-r--r-- | msm8909/libqdutils/qdMetaData.h | 153 |
1 files changed, 120 insertions, 33 deletions
diff --git a/msm8909/libqdutils/qdMetaData.h b/msm8909/libqdutils/qdMetaData.h index 32d788e6..afe86d31 100644 --- a/msm8909/libqdutils/qdMetaData.h +++ b/msm8909/libqdutils/qdMetaData.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,16 +30,25 @@ #ifndef _QDMETADATA_H #define _QDMETADATA_H +#include <color_metadata.h> + #ifdef __cplusplus extern "C" { #endif -#define MAX_IGC_LUT_ENTRIES 256 +#define MAX_UBWC_STATS_LENGTH 32 enum ColorSpace_t{ ITU_R_601, ITU_R_601_FR, ITU_R_709, + ITU_R_2020, + ITU_R_2020_FR, +}; + +enum IGC_t { + IGC_NotSpecified, + IGC_sRGB, }; struct HSICData_t { @@ -49,36 +58,52 @@ struct HSICData_t { float contrast; }; -struct Sharp2Data_t { - int32_t strength; - uint32_t edge_thr; - uint32_t smooth_thr; - uint32_t noise_thr; +struct BufferDim_t { + int32_t sliceWidth; + int32_t sliceHeight; }; -struct IGCData_t{ - uint16_t c0[MAX_IGC_LUT_ENTRIES]; - uint16_t c1[MAX_IGC_LUT_ENTRIES]; - uint16_t c2[MAX_IGC_LUT_ENTRIES]; +enum UBWC_Version { + UBWC_UNUSED = 0, + UBWC_1_0 = 0x1, + UBWC_2_0 = 0x2, + UBWC_MAX_VERSION = 0xFF, }; -struct BufferDim_t { - int32_t sliceWidth; - int32_t sliceHeight; +struct UBWC_2_0_Stats { + uint32_t nCRStatsTile32; /**< UBWC Stats info for 32 Byte Tile */ + uint32_t nCRStatsTile64; /**< UBWC Stats info for 64 Byte Tile */ + uint32_t nCRStatsTile96; /**< UBWC Stats info for 96 Byte Tile */ + uint32_t nCRStatsTile128; /**< UBWC Stats info for 128 Byte Tile */ + uint32_t nCRStatsTile160; /**< UBWC Stats info for 160 Byte Tile */ + uint32_t nCRStatsTile192; /**< UBWC Stats info for 192 Byte Tile */ + uint32_t nCRStatsTile256; /**< UBWC Stats info for 256 Byte Tile */ +}; + +struct UBWCStats { + enum UBWC_Version version; /* Union depends on this version. */ + uint8_t bDataValid; /* If [non-zero], CR Stats data is valid. + * Consumers may use stats data. + * If [zero], CR Stats data is invalid. + * Consumers *Shall* not use stats data */ + union { + struct UBWC_2_0_Stats ubwc_stats; + uint32_t reserved[MAX_UBWC_STATS_LENGTH]; /* This is for future */ + }; +}; + +struct S3DGpuComp_t { + int32_t displayId; /* on which display S3D is composed by client */ + uint32_t s3dMode; /* the S3D format of this layer to be accessed by client */ }; struct MetaData_t { int32_t operation; int32_t interlaced; struct BufferDim_t bufferDim; - struct HSICData_t hsicData; - int32_t sharpness; - int32_t video_interface; - struct IGCData_t igcData; - struct Sharp2Data_t Sharp2Data; - int64_t timestamp; - uint32_t refreshrate; + float refreshrate; enum ColorSpace_t colorSpace; + enum IGC_t igc; /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from * ION_SECURE. which should not be mapped. However, for GPU post proc * feature, GFX needs to map this buffer, in the client context and in SF @@ -86,25 +111,87 @@ struct MetaData_t { * for clients to set, and GPU will to read and know when to map the * SECURE_BUFFER(ION) */ int32_t mapSecureBuffer; + /* The supported formats are defined in gralloc_priv.h to + * support legacy code*/ + uint32_t s3dFormat; + /* VENUS output buffer is linear for UBWC Interlaced video */ + uint32_t linearFormat; + /* Set by graphics to indicate that this buffer will be written to but not + * swapped out */ + uint32_t isSingleBufferMode; + /* Indicate GPU to draw S3D layer on dedicate display device */ + struct S3DGpuComp_t s3dComp; + + /* Set by camera to program the VT Timestamp */ + uint64_t vtTimeStamp; + /* Color Aspects + HDR info */ + ColorMetaData color; + /* Consumer should read this data as follows based on + * Gralloc flag "interlaced" listed above. + * [0] : If it is progressive. + * [0] : Top field, if it is interlaced. + * [1] : Do not read, if it is progressive. + * [1] : Bottom field, if it is interlaced. + */ + struct UBWCStats ubwcCRStats[2]; }; enum DispParamType { - PP_PARAM_HSIC = 0x0001, - PP_PARAM_SHARPNESS = 0x0002, - PP_PARAM_INTERLACED = 0x0004, - PP_PARAM_VID_INTFC = 0x0008, - PP_PARAM_IGC = 0x0010, - PP_PARAM_SHARP2 = 0x0020, - PP_PARAM_TIMESTAMP = 0x0040, - UPDATE_BUFFER_GEOMETRY = 0x0080, - UPDATE_REFRESH_RATE = 0x0100, - UPDATE_COLOR_SPACE = 0x0200, - MAP_SECURE_BUFFER = 0x400, + SET_VT_TIMESTAMP = 0x0001, + COLOR_METADATA = 0x0002, + PP_PARAM_INTERLACED = 0x0004, + UNUSED2 = 0x0008, + UNUSED3 = 0x0010, + UNUSED4 = 0x0020, + SET_UBWC_CR_STATS_INFO = 0x0040, + UPDATE_BUFFER_GEOMETRY = 0x0080, + UPDATE_REFRESH_RATE = 0x0100, + UPDATE_COLOR_SPACE = 0x0200, + MAP_SECURE_BUFFER = 0x0400, + S3D_FORMAT = 0x0800, + LINEAR_FORMAT = 0x1000, + SET_IGC = 0x2000, + SET_SINGLE_BUFFER_MODE = 0x4000, + SET_S3D_COMP = 0x8000, +}; + +enum DispFetchParamType { + GET_VT_TIMESTAMP = 0x0001, + GET_COLOR_METADATA = 0x0002, + GET_PP_PARAM_INTERLACED = 0x0004, + GET_UBWC_CR_STATS_INFO = 0x0040, + GET_BUFFER_GEOMETRY = 0x0080, + GET_REFRESH_RATE = 0x0100, + GET_COLOR_SPACE = 0x0200, + GET_MAP_SECURE_BUFFER = 0x0400, + GET_S3D_FORMAT = 0x0800, + GET_LINEAR_FORMAT = 0x1000, + GET_IGC = 0x2000, + GET_SINGLE_BUFFER_MODE = 0x4000, + GET_S3D_COMP = 0x8000, }; struct private_handle_t; int setMetaData(struct private_handle_t *handle, enum DispParamType paramType, - void *param); + void *param); +int setMetaDataVa(struct MetaData_t* data, enum DispParamType paramType, + void *param); + +int getMetaData(struct private_handle_t *handle, + enum DispFetchParamType paramType, + void *param); +int getMetaDataVa(struct MetaData_t* data, enum DispFetchParamType paramType, + void *param); + +int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst); +int copyMetaDataVaToHandle(struct MetaData_t *src, struct private_handle_t *dst); +int copyMetaDataHandleToVa(struct private_handle_t* src, struct MetaData_t *dst); +int copyMetaDataVaToVa(struct MetaData_t *src, struct MetaData_t *dst); + +int clearMetaData(struct private_handle_t *handle, enum DispParamType paramType); +int clearMetaDataVa(struct MetaData_t *data, enum DispParamType paramType); + +unsigned long getMetaDataSize(); #ifdef __cplusplus } |