1d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin/*
252af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
3d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *
4d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * Redistribution and use in source and binary forms, with or without
5d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * modification, are permitted provided that the following conditions are
6d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * met:
7d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *     * Redistributions of source code must retain the above copyright
8d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       notice, this list of conditions and the following disclaimer.
9d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *     * Redistributions in binary form must reproduce the above
10d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       copyright notice, this list of conditions and the following
11d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       disclaimer in the documentation and/or other materials provided
12d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       with the distribution.
13d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *     * Neither the name of The Linux Foundation nor the names of its
14d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       contributors may be used to endorse or promote products derived
15d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *       from this software without specific prior written permission.
16d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin *
17d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin */
29d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
30d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#ifndef _QDMETADATA_H
31d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#define _QDMETADATA_H
32d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
33d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#ifdef __cplusplus
34d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinextern "C" {
35d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#endif
36d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
37d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinenum ColorSpace_t{
38d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    ITU_R_601,
39d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    ITU_R_601_FR,
40d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    ITU_R_709,
41d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
42d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
43d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinenum IGC_t {
44d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    IGC_NotSpecified,
45d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    IGC_sRGB,
46d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
47d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
48d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct HSICData_t {
49d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t hue;
50d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    float   saturation;
51d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t intensity;
52d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    float   contrast;
53d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
54d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
55d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct BufferDim_t {
56d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t sliceWidth;
57d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t sliceHeight;
58d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
59d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
60d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct MetaData_t {
61d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t operation;
62d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t interlaced;
63d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    struct BufferDim_t bufferDim;
6452af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch    float refreshrate;
65d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    enum ColorSpace_t colorSpace;
66d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    enum IGC_t igc;
67d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin     /* Gralloc sets PRIV_SECURE_BUFFER flag to inform that the buffers are from
68d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin      * ION_SECURE. which should not be mapped. However, for GPU post proc
69d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin      * feature, GFX needs to map this buffer, in the client context and in SF
70d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin      * context, it should not. Hence to differentiate, add this metadata field
71d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin      * for clients to set, and GPU will to read and know when to map the
72d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin      * SECURE_BUFFER(ION) */
73d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    int32_t mapSecureBuffer;
74d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    /* The supported formats are defined in gralloc_priv.h to
75d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin     * support legacy code*/
76d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    uint32_t s3dFormat;
77d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    /* VENUS output buffer is linear for UBWC Interlaced video */
78d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    uint32_t linearFormat;
79d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    /* Set by graphics to indicate that this buffer will be written to but not
80d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin     * swapped out */
81d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    uint32_t isSingleBufferMode;
82860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    /* Set by camera to program the VT Timestamp */
83860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    uint64_t vtTimeStamp;
84d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
85d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
86d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinenum DispParamType {
87860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED0                = 0x0001,
88860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED1                = 0x0002,
89860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    PP_PARAM_INTERLACED    = 0x0004,
90860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED2                = 0x0008,
91860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED3                = 0x0010,
92860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED4                = 0x0020,
93860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UNUSED5                = 0x0040,
94d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    UPDATE_BUFFER_GEOMETRY = 0x0080,
95860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UPDATE_REFRESH_RATE    = 0x0100,
96860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    UPDATE_COLOR_SPACE     = 0x0200,
97860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    MAP_SECURE_BUFFER      = 0x0400,
98860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    S3D_FORMAT             = 0x0800,
99860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    LINEAR_FORMAT          = 0x1000,
100860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    SET_IGC                = 0x2000,
101d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin    SET_SINGLE_BUFFER_MODE = 0x4000,
102860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    SET_VT_TIMESTAMP       = 0x8000,
103d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin};
104d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
10552af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetschenum DispFetchParamType {
106860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_PP_PARAM_INTERLACED  = 0x0004,
107860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_BUFFER_GEOMETRY      = 0x0080,
108860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_REFRESH_RATE         = 0x0100,
109860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_COLOR_SPACE          = 0x0200,
110860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_MAP_SECURE_BUFFER    = 0x0400,
111860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_S3D_FORMAT           = 0x0800,
112860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_LINEAR_FORMAT        = 0x1000,
113860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_IGC                  = 0x2000,
114860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_SINGLE_BUFFER_MODE   = 0x4000,
115860d7f049aea6fd9c7b16da78d6a44a59d33415eRoopesh Rajashekharaiah Nataraja    GET_VT_TIMESTAMP         = 0x8000,
11652af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch};
11752af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch
118d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinstruct private_handle_t;
119d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjinint setMetaData(struct private_handle_t *handle, enum DispParamType paramType,
120d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin        void *param);
121d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
12252af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetschint getMetaData(struct private_handle_t *handle, enum DispFetchParamType paramType,
12352af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch        void *param);
12452af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetsch
12552af24f45972a8124cb33e97c740fa0bfc705df6Steve Pfetschint copyMetaData(struct private_handle_t *src, struct private_handle_t *dst);
126d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#ifdef __cplusplus
127d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin}
128d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#endif
129d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
130d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin#endif /* _QDMETADATA_H */
131d68a2e45260f864503d7bd6da93fd29589afd89ePatrick Tjin
132