blob: 65ab1b7cf61f2744069442444adccdf25caa7e18 [file] [log] [blame]
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -08001/*
Saurabh Dubey07eae572018-03-12 21:58:49 +05302 * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -08003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef _QDMETADATA_H
31#define _QDMETADATA_H
32
Arun Kumar K.Rb2771bf2016-10-03 21:38:23 -070033#include <color_metadata.h>
Arun Kumar K.Rb2771bf2016-10-03 21:38:23 -070034
Shuzhen Wangf3529c32014-01-28 17:15:45 -080035#ifdef __cplusplus
36extern "C" {
37#endif
38
Praneeth Paladugu3e3e8f82017-03-07 10:42:20 -080039#define MAX_UBWC_STATS_LENGTH 32
40
Shuzhen Wangf3529c32014-01-28 17:15:45 -080041enum ColorSpace_t{
Shuzhen Wang0d113482014-01-28 16:10:22 -080042 ITU_R_601,
43 ITU_R_601_FR,
44 ITU_R_709,
Arun Kumar K.Rc18263e2016-10-03 21:26:10 -070045 ITU_R_2020,
46 ITU_R_2020_FR,
Shuzhen Wangf3529c32014-01-28 17:15:45 -080047};
Shuzhen Wang0d113482014-01-28 16:10:22 -080048
Dileep Marchya1a7e1f12015-09-25 19:11:57 -070049enum IGC_t {
50 IGC_NotSpecified,
51 IGC_sRGB,
52};
53
Saurabh Shah5daeee52013-01-23 16:52:26 +080054struct HSICData_t {
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -080055 int32_t hue;
56 float saturation;
57 int32_t intensity;
58 float contrast;
Saurabh Shah5daeee52013-01-23 16:52:26 +080059};
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -080060
Ramkumar Radhakrishnan92f3abe2013-06-05 13:52:40 -070061struct BufferDim_t {
62 int32_t sliceWidth;
63 int32_t sliceHeight;
64};
65
Praneeth Paladugu3e3e8f82017-03-07 10:42:20 -080066enum UBWC_Version {
67 UBWC_UNUSED = 0,
68 UBWC_1_0 = 0x1,
69 UBWC_2_0 = 0x2,
70 UBWC_MAX_VERSION = 0xFF,
71};
72
73struct UBWC_2_0_Stats {
74 uint32_t nCRStatsTile32; /**< UBWC Stats info for 32 Byte Tile */
75 uint32_t nCRStatsTile64; /**< UBWC Stats info for 64 Byte Tile */
76 uint32_t nCRStatsTile96; /**< UBWC Stats info for 96 Byte Tile */
77 uint32_t nCRStatsTile128; /**< UBWC Stats info for 128 Byte Tile */
78 uint32_t nCRStatsTile160; /**< UBWC Stats info for 160 Byte Tile */
79 uint32_t nCRStatsTile192; /**< UBWC Stats info for 192 Byte Tile */
80 uint32_t nCRStatsTile256; /**< UBWC Stats info for 256 Byte Tile */
81};
82
83struct UBWCStats {
84 enum UBWC_Version version; /* Union depends on this version. */
85 uint8_t bDataValid; /* If [non-zero], CR Stats data is valid.
86 * Consumers may use stats data.
87 * If [zero], CR Stats data is invalid.
88 * Consumers *Shall* not use stats data */
89 union {
90 struct UBWC_2_0_Stats ubwc_stats;
91 uint32_t reserved[MAX_UBWC_STATS_LENGTH]; /* This is for future */
92 };
93};
94
Ray Zhang8ace84d2016-08-08 19:36:03 +080095struct S3DGpuComp_t {
96 int32_t displayId; /* on which display S3D is composed by client */
97 uint32_t s3dMode; /* the S3D format of this layer to be accessed by client */
98};
99
Saurabh Shah5daeee52013-01-23 16:52:26 +0800100struct MetaData_t {
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -0800101 int32_t operation;
102 int32_t interlaced;
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800103 struct BufferDim_t bufferDim;
feifanz9cc23032016-03-23 18:48:56 +0800104 float refreshrate;
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800105 enum ColorSpace_t colorSpace;
Dileep Marchya1a7e1f12015-09-25 19:11:57 -0700106 enum IGC_t igc;
Arun Kumar K.Rda2f69b2014-09-30 15:45:37 -0700107 /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from
108 * ION_SECURE. which should not be mapped. However, for GPU post proc
109 * feature, GFX needs to map this buffer, in the client context and in SF
110 * context, it should not. Hence to differentiate, add this metadata field
111 * for clients to set, and GPU will to read and know when to map the
112 * SECURE_BUFFER(ION) */
113 int32_t mapSecureBuffer;
Naseer Ahmed3324ff72015-01-21 17:14:44 -0500114 /* The supported formats are defined in gralloc_priv.h to
115 * support legacy code*/
116 uint32_t s3dFormat;
Sushil Chauhane7acc3c2015-06-23 16:22:30 -0700117 /* VENUS output buffer is linear for UBWC Interlaced video */
118 uint32_t linearFormat;
Saurabh Shah95f83682015-10-16 10:30:04 -0700119 /* Set by graphics to indicate that this buffer will be written to but not
120 * swapped out */
Saurabh Shahb8067a42015-11-06 16:52:02 -0800121 uint32_t isSingleBufferMode;
Ray Zhang8ace84d2016-08-08 19:36:03 +0800122 /* Indicate GPU to draw S3D layer on dedicate display device */
123 struct S3DGpuComp_t s3dComp;
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400124
125 /* Set by camera to program the VT Timestamp */
126 uint64_t vtTimeStamp;
Arun Kumar K.Rb2771bf2016-10-03 21:38:23 -0700127 /* Color Aspects + HDR info */
128 ColorMetaData color;
Praneeth Paladugu3e3e8f82017-03-07 10:42:20 -0800129 /* Consumer should read this data as follows based on
130 * Gralloc flag "interlaced" listed above.
131 * [0] : If it is progressive.
132 * [0] : Top field, if it is interlaced.
133 * [1] : Do not read, if it is progressive.
134 * [1] : Bottom field, if it is interlaced.
135 */
136 struct UBWCStats ubwcCRStats[2];
Ashwini Rao6e616962017-11-28 12:12:46 -0800137 /* Set by camera to indicate that this buffer will be used for a High
138 * Performance Video Usecase */
139 uint32_t isVideoPerfMode;
Saurabh Shah5daeee52013-01-23 16:52:26 +0800140};
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -0800141
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800142enum DispParamType {
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400143 SET_VT_TIMESTAMP = 0x0001,
Arun Kumar K.Rb2771bf2016-10-03 21:38:23 -0700144 COLOR_METADATA = 0x0002,
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400145 PP_PARAM_INTERLACED = 0x0004,
Ashwini Rao6e616962017-11-28 12:12:46 -0800146 SET_VIDEO_PERF_MODE = 0x0008,
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400147 UNUSED3 = 0x0010,
148 UNUSED4 = 0x0020,
Praneeth Paladugu3e3e8f82017-03-07 10:42:20 -0800149 SET_UBWC_CR_STATS_INFO = 0x0040,
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400150 UPDATE_BUFFER_GEOMETRY = 0x0080,
151 UPDATE_REFRESH_RATE = 0x0100,
152 UPDATE_COLOR_SPACE = 0x0200,
153 MAP_SECURE_BUFFER = 0x0400,
154 S3D_FORMAT = 0x0800,
155 LINEAR_FORMAT = 0x1000,
156 SET_IGC = 0x2000,
157 SET_SINGLE_BUFFER_MODE = 0x4000,
158 SET_S3D_COMP = 0x8000,
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800159};
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -0800160
feifanz9cc23032016-03-23 18:48:56 +0800161enum DispFetchParamType {
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400162 GET_VT_TIMESTAMP = 0x0001,
Arun Kumar K.Rb2771bf2016-10-03 21:38:23 -0700163 GET_COLOR_METADATA = 0x0002,
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400164 GET_PP_PARAM_INTERLACED = 0x0004,
Ashwini Rao6e616962017-11-28 12:12:46 -0800165 GET_VIDEO_PERF_MODE = 0x0008,
Praneeth Paladugu3e3e8f82017-03-07 10:42:20 -0800166 GET_UBWC_CR_STATS_INFO = 0x0040,
Naseer Ahmede8f254d2016-08-02 20:06:40 -0400167 GET_BUFFER_GEOMETRY = 0x0080,
168 GET_REFRESH_RATE = 0x0100,
169 GET_COLOR_SPACE = 0x0200,
170 GET_MAP_SECURE_BUFFER = 0x0400,
171 GET_S3D_FORMAT = 0x0800,
172 GET_LINEAR_FORMAT = 0x1000,
173 GET_IGC = 0x2000,
174 GET_SINGLE_BUFFER_MODE = 0x4000,
175 GET_S3D_COMP = 0x8000,
feifanz9cc23032016-03-23 18:48:56 +0800176};
177
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800178struct private_handle_t;
179int setMetaData(struct private_handle_t *handle, enum DispParamType paramType,
Naseer Ahmed2e6bee12017-04-13 22:45:54 -0400180 void *param);
181int setMetaDataVa(struct MetaData_t* data, enum DispParamType paramType,
182 void *param);
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800183
Naseer Ahmed2e6bee12017-04-13 22:45:54 -0400184int getMetaData(struct private_handle_t *handle,
185 enum DispFetchParamType paramType,
186 void *param);
187int getMetaDataVa(struct MetaData_t* data, enum DispFetchParamType paramType,
188 void *param);
feifanz9cc23032016-03-23 18:48:56 +0800189
190int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst);
Naseer Ahmed2e6bee12017-04-13 22:45:54 -0400191int copyMetaDataVaToHandle(struct MetaData_t *src, struct private_handle_t *dst);
192int copyMetaDataHandleToVa(struct private_handle_t* src, struct MetaData_t *dst);
193int copyMetaDataVaToVa(struct MetaData_t *src, struct MetaData_t *dst);
Ray Zhang8ace84d2016-08-08 19:36:03 +0800194
195int clearMetaData(struct private_handle_t *handle, enum DispParamType paramType);
Naseer Ahmed2e6bee12017-04-13 22:45:54 -0400196int clearMetaDataVa(struct MetaData_t *data, enum DispParamType paramType);
197
198unsigned long getMetaDataSize();
Ray Zhang8ace84d2016-08-08 19:36:03 +0800199
Shuzhen Wangf3529c32014-01-28 17:15:45 -0800200#ifdef __cplusplus
201}
202#endif
Ramkumar Radhakrishnan47573e22012-11-07 11:36:41 -0800203
204#endif /* _QDMETADATA_H */
205