1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef OHOS_HDI_DISPLAY_GRAPHIC_COMMON_V1_0_CMCOLORSPACE_H
17#define OHOS_HDI_DISPLAY_GRAPHIC_COMMON_V1_0_CMCOLORSPACE_H
18
19#include <cstdbool>
20#include <cstdint>
21
22#ifndef HDI_BUFF_MAX_SIZE
23#define HDI_BUFF_MAX_SIZE (1024 * 200)
24#endif
25
26#ifndef HDI_CHECK_VALUE_RETURN
27#define HDI_CHECK_VALUE_RETURN(lv, compare, rv, ret) do { \
28    if ((lv) compare (rv)) { \
29        return ret; \
30    } \
31} while (false)
32#endif
33
34#ifndef HDI_CHECK_VALUE_RET_GOTO
35#define HDI_CHECK_VALUE_RET_GOTO(lv, compare, rv, ret, value, table) do { \
36    if ((lv) compare (rv)) { \
37        ret = value; \
38        goto table; \
39    } \
40} while (false)
41#endif
42
43namespace OHOS {
44class MessageParcel;
45}
46
47namespace OHOS {
48namespace HDI {
49namespace Display {
50namespace Graphic {
51namespace Common {
52namespace V1_0 {
53
54using namespace OHOS;
55
56enum CM_ColorPrimaries : int32_t {
57    COLORPRIMARIES_BT709 = 1,
58    COLORPRIMARIES_SRGB = 1,
59    COLORPRIMARIES_BT601_P,
60    COLORPRIMARIES_BT601_N,
61    COLORPRIMARIES_BT2020 = 4,
62    COLORPRIMARIES_BT2100 = 4,
63    COLORPRIMARIES_P3_DCI,
64    COLORPRIMARIES_P3_D65,
65    COLORPRIMARIES_MONO,
66    COLORPRIMARIES_ADOBERGB = 23,
67};
68
69enum CM_TransFunc : int32_t {
70    TRANSFUNC_BT709 = 1,
71    TRANSFUNC_SRGB = 2,
72    TRANSFUNC_LINEAR = 3,
73    TRANSFUNC_PQ,
74    TRANSFUNC_HLG,
75    TRANSFUNC_ADOBERGB,
76    TRANSFUNC_GAMMA2_2,
77    TRANSFUNC_GAMMA2_4,
78};
79
80enum CM_Range : int32_t {
81    RANGE_UNKNOW = 0,
82    RANGE_FULL,
83    RANGE_LIMITED,
84    RANGE_EXTEND,
85};
86
87enum CM_Matrix : int32_t {
88    MATRIX_ADOBERGB = 0,
89    MATRIX_BT709 = 1,
90    MATRIX_BT601_P,
91    MATRIX_BT601_N = 3,
92    MATRIX_P3 = 3,
93    MATRIX_BT2020 = 4,
94    MATRIX_BT2100 = 4,
95    MATRIX_BT2100_ICTCP,
96};
97
98struct CM_ColorSpaceInfo {
99    OHOS::HDI::Display::Graphic::Common::V1_0::CM_ColorPrimaries primaries;
100    OHOS::HDI::Display::Graphic::Common::V1_0::CM_TransFunc transfunc;
101    OHOS::HDI::Display::Graphic::Common::V1_0::CM_Matrix matrix;
102    OHOS::HDI::Display::Graphic::Common::V1_0::CM_Range range;
103} __attribute__ ((aligned(8)));
104
105enum CM_ColorSpaceType : int32_t {
106    CM_COLORSPACE_NONE,
107    CM_BT601_EBU_FULL = 2 | (1 << 8) | (2 << 16) | (1 << 21),
108    CM_BT601_SMPTE_C_FULL = 3 | (1 << 8) | (3 << 16) | (1 << 21),
109    CM_BT709_FULL = 1 | (1 << 8) | (1 << 16) | (1 << 21),
110    CM_BT2020_HLG_FULL = 4 | (5 << 8) | (4 << 16) | (1 << 21),
111    CM_BT2020_PQ_FULL = 4 | (4 << 8) | (4 << 16) | (1 << 21),
112    CM_BT601_EBU_LIMIT = 2 | (1 << 8) | (2 << 16) | (2 << 21),
113    CM_BT601_SMPTE_C_LIMIT = 3 | (1 << 8) | (3 << 16) | (2 << 21),
114    CM_BT709_LIMIT = 1 | (1 << 8) | (1 << 16) | (2 << 21),
115    CM_BT2020_HLG_LIMIT = 4 | (5 << 8) | (4 << 16) | (2 << 21),
116    CM_BT2020_PQ_LIMIT = 4 | (4 << 8) | (4 << 16) | (2 << 21),
117    CM_SRGB_FULL = 1 | (2 << 8) | (3 << 16) | (1 << 21),
118    CM_P3_FULL = 6 | (2 << 8) | (3 << 16) | (1 << 21),
119    CM_P3_HLG_FULL = 6 | (5 << 8) | (3 << 16) | (1 << 21),
120    CM_P3_PQ_FULL = 6 | (4 << 8) | (3 << 16) | (1 << 21),
121    CM_ADOBERGB_FULL = 23 | (6 << 8) | (0 << 16) | (1 << 21),
122    CM_SRGB_LIMIT = 1 | (2 << 8) | (3 << 16) | (2 << 21),
123    CM_P3_LIMIT = 6 | (2 << 8) | (3 << 16) | (2 << 21),
124    CM_P3_HLG_LIMIT = 6 | (5 << 8) | (3 << 16) | (2 << 21),
125    CM_P3_PQ_LIMIT = 6 | (4 << 8) | (3 << 16) | (2 << 21),
126    CM_ADOBERGB_LIMIT = 23 | (6 << 8) | (0 << 16) | (2 << 21),
127    CM_LINEAR_SRGB = 1 | (3 << 8),
128    CM_LINEAR_BT709 = 1 | (3 << 8),
129    CM_LINEAR_P3 = 6 | (3 << 8),
130    CM_LINEAR_BT2020 = 4 | (3 << 8),
131    CM_DISPLAY_SRGB = 1 | (2 << 8) | (3 << 16) | (1 << 21),
132    CM_DISPLAY_P3_SRGB = 6 | (2 << 8) | (3 << 16) | (1 << 21),
133    CM_DISPLAY_P3_HLG = 6 | (5 << 8) | (3 << 16) | (1 << 21),
134    CM_DISPLAY_P3_PQ = 6 | (4 << 8) | (3 << 16) | (1 << 21),
135    CM_DISPLAY_BT2020_SRGB = 4 | (2 << 8) | (4 << 16) | (1 << 21),
136    CM_DISPLAY_BT2020_HLG = 4 | (5 << 8) | (4 << 16) | (1 << 21),
137    CM_DISPLAY_BT2020_PQ = 4 | (4 << 8) | (4 << 16) | (1 << 21),
138};
139
140enum CM_ColorSpaceMask : int32_t {
141    CM_PRIMARIES_MASK = 255,
142    CM_TRANSFUNC_MASK = 255 << 8,
143    CM_MATRIX_MASK = 31 << 16,
144    CM_RANGE_MASK = 7 << 21,
145};
146
147enum CM_HDR_Metadata_Type : int32_t {
148    CM_METADATA_NONE,
149    CM_VIDEO_HLG,
150    CM_VIDEO_HDR10,
151    CM_VIDEO_HDR_VIVID,
152    CM_IMAGE_HDR_VIVID_DUAL,
153    CM_IMAGE_HDR_VIVID_SINGLE,
154    CM_IMAGE_HDR_ISO_DUAL,
155    CM_IMAGE_HDR_ISO_SINGLE,
156};
157
158bool CM_ColorSpaceInfoBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& dataBlock);
159
160bool CM_ColorSpaceInfoBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& dataBlock);
161
162
163} // V1_0
164} // Common
165} // Graphic
166} // Display
167} // HDI
168} // OHOS
169
170#endif // OHOS_HDI_DISPLAY_GRAPHIC_COMMON_V1_0_CMCOLORSPACE_H
171
172