1/*
2 * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
3 *
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
33#ifdef USE_COLOR_METADATA
34#include <color_metadata.h>
35#endif
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41enum ColorSpace_t{
42    ITU_R_601,
43    ITU_R_601_FR,
44    ITU_R_709,
45    ITU_R_2020,
46    ITU_R_2020_FR,
47};
48
49enum IGC_t {
50    IGC_NotSpecified,
51    IGC_sRGB,
52};
53
54struct HSICData_t {
55    int32_t hue;
56    float   saturation;
57    int32_t intensity;
58    float   contrast;
59};
60
61struct BufferDim_t {
62    int32_t sliceWidth;
63    int32_t sliceHeight;
64};
65
66struct S3DGpuComp_t {
67    int32_t displayId; /* on which display S3D is composed by client */
68    uint32_t s3dMode; /* the S3D format of this layer to be accessed by client */
69};
70
71struct MetaData_t {
72    int32_t operation;
73    int32_t interlaced;
74    struct BufferDim_t bufferDim;
75    float refreshrate;
76    enum ColorSpace_t colorSpace;
77    enum IGC_t igc;
78     /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from
79      * ION_SECURE. which should not be mapped. However, for GPU post proc
80      * feature, GFX needs to map this buffer, in the client context and in SF
81      * context, it should not. Hence to differentiate, add this metadata field
82      * for clients to set, and GPU will to read and know when to map the
83      * SECURE_BUFFER(ION) */
84    int32_t mapSecureBuffer;
85    /* The supported formats are defined in gralloc_priv.h to
86     * support legacy code*/
87    uint32_t s3dFormat;
88    /* VENUS output buffer is linear for UBWC Interlaced video */
89    uint32_t linearFormat;
90    /* Set by graphics to indicate that this buffer will be written to but not
91     * swapped out */
92    uint32_t isSingleBufferMode;
93    /* Indicate GPU to draw S3D layer on dedicate display device */
94    struct S3DGpuComp_t s3dComp;
95
96    /* Set by camera to program the VT Timestamp */
97    uint64_t vtTimeStamp;
98#ifdef USE_COLOR_METADATA
99    /* Color Aspects + HDR info */
100    ColorMetaData color;
101#endif
102};
103
104enum DispParamType {
105    SET_VT_TIMESTAMP         = 0x0001,
106    COLOR_METADATA           = 0x0002,
107    PP_PARAM_INTERLACED      = 0x0004,
108    UNUSED2                  = 0x0008,
109    UNUSED3                  = 0x0010,
110    UNUSED4                  = 0x0020,
111    UNUSED5                  = 0x0040,
112    UPDATE_BUFFER_GEOMETRY   = 0x0080,
113    UPDATE_REFRESH_RATE      = 0x0100,
114    UPDATE_COLOR_SPACE       = 0x0200,
115    MAP_SECURE_BUFFER        = 0x0400,
116    S3D_FORMAT               = 0x0800,
117    LINEAR_FORMAT            = 0x1000,
118    SET_IGC                  = 0x2000,
119    SET_SINGLE_BUFFER_MODE   = 0x4000,
120    SET_S3D_COMP             = 0x8000,
121};
122
123enum DispFetchParamType {
124    GET_VT_TIMESTAMP         = 0x0001,
125    GET_COLOR_METADATA       = 0x0002,
126    GET_PP_PARAM_INTERLACED  = 0x0004,
127    GET_BUFFER_GEOMETRY      = 0x0080,
128    GET_REFRESH_RATE         = 0x0100,
129    GET_COLOR_SPACE          = 0x0200,
130    GET_MAP_SECURE_BUFFER    = 0x0400,
131    GET_S3D_FORMAT           = 0x0800,
132    GET_LINEAR_FORMAT        = 0x1000,
133    GET_IGC                  = 0x2000,
134    GET_SINGLE_BUFFER_MODE   = 0x4000,
135    GET_S3D_COMP             = 0x8000,
136};
137
138struct private_handle_t;
139int setMetaData(struct private_handle_t *handle, enum DispParamType paramType,
140        void *param);
141
142int getMetaData(struct private_handle_t *handle, enum DispFetchParamType paramType,
143        void *param);
144
145int copyMetaData(struct private_handle_t *src, struct private_handle_t *dst);
146
147int clearMetaData(struct private_handle_t *handle, enum DispParamType paramType);
148
149#ifdef __cplusplus
150}
151#endif
152
153#endif /* _QDMETADATA_H */
154
155