1 /*
2  * Copyright (c) 2024 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_OH_NATIVE_DISPLAY_MANAGER_INNER_H
17 #define OHOS_OH_NATIVE_DISPLAY_MANAGER_INNER_H
18 
19 #include <cstdint>
20 #include <map>
21 #include <set>
22 
23 #include "dm_common.h"
24 
25 namespace OHOS {
26 namespace Rosen {
27 enum class DM_DisplayStateMode : uint32_t {
28     STATE_UNKNOWN = 0,
29     STATE_OFF,
30     STATE_ON,
31     STATE_DOZE,
32     STATE_DOZE_SUSPEND,
33     STATE_VR,
34     STATE_ON_SUSPEND
35 };
36 
37 enum class DM_ColorSpace : uint32_t {
38     UNKNOWN = 0,
39     ADOBE_RGB = 1,
40     BT2020_HLG = 2,
41     BT2020_PQ = 3,
42     BT601_EBU = 4,
43     BT601_SMPTE_C = 5,
44     BT709 = 6,
45     P3_HLG = 7,
46     P3_PQ = 8,
47     DISPLAY_P3 = 9,
48     SRGB = 10,
49     LINEAR_SRGB = 11,
50     LINEAR_P3 = 12,
51     LINEAR_BT2020 = 13,
52 };
53 
54 enum class DM_HDRFormat : uint32_t {
55     NONE = 0,
56     VIDEO_HLG = 1,
57     VIDEO_HDR10 = 2,
58     VIDEO_HDR_VIVID = 3,
59     IMAGE_HDR_VIVID_DUAL = 4,
60     IMAGE_HDR_VIVID_SINGLE = 5,
61     IMAGE_HDR_ISO_DUAL = 6,
62     IMAGE_HDR_ISO_SINGLE = 7,
63 };
64 
65 const std::map<DisplayState, DM_DisplayStateMode> DM_NATIVE_TO_NDK_DISPLAY_STATE_MAP {
66     { DisplayState::UNKNOWN,      DM_DisplayStateMode::STATE_UNKNOWN      },
67     { DisplayState::OFF,          DM_DisplayStateMode::STATE_OFF          },
68     { DisplayState::ON,           DM_DisplayStateMode::STATE_ON           },
69     { DisplayState::DOZE,         DM_DisplayStateMode::STATE_DOZE         },
70     { DisplayState::DOZE_SUSPEND, DM_DisplayStateMode::STATE_DOZE_SUSPEND },
71     { DisplayState::VR,           DM_DisplayStateMode::STATE_VR           },
72     { DisplayState::ON_SUSPEND,   DM_DisplayStateMode::STATE_ON_SUSPEND   },
73 };
74 
75 enum class DM_GraphicCM_ColorSpaceType : uint32_t {
76     GRAPHIC_CM_COLORSPACE_NONE,
77 
78     // COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21)
79     GRAPHIC_CM_BT601_EBU_FULL = 2 | (1 << 8) | (2 << 16) | (1 << 21),
80 
81     // COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21)
82     GRAPHIC_CM_BT601_SMPTE_C_FULL = 3 | (1 << 8) | (3 << 16) | (1 << 21),
83 
84     // COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21)
85     GRAPHIC_CM_BT709_FULL = 1 | (1 << 8) | (1 << 16) | (1 << 21),
86 
87     // COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21)
88     GRAPHIC_CM_BT2020_HLG_FULL = 4 | (5 << 8) | (4 << 16) | (1 << 21),
89 
90     // COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21)
91     GRAPHIC_CM_BT2020_PQ_FULL = 4 | (4 << 8) | (4 << 16) | (1 << 21),
92 
93     // COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21)
94     GRAPHIC_CM_BT601_EBU_LIMIT = 2 | (1 << 8) | (2 << 16) | (2 << 21),
95 
96     // COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21)
97     GRAPHIC_CM_BT601_SMPTE_C_LIMIT = 3 | (1 << 8) | (3 << 16) | (2 << 21),
98 
99     // COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21)
100     GRAPHIC_CM_BT709_LIMIT = 1 | (1 << 8) | (1 << 16) | (2 << 21),
101 
102     // COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21)
103     GRAPHIC_CM_BT2020_HLG_LIMIT = 4 | (5 << 8) | (4 << 16) | (2 << 21),
104 
105     // COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21)
106     GRAPHIC_CM_BT2020_PQ_LIMIT = 4 | (4 << 8) | (4 << 16) | (2 << 21),
107 
108     // COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21)
109     GRAPHIC_CM_SRGB_FULL = 1 | (2 << 8) | (3 << 16) | (1 << 21),
110 
111     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21)
112     GRAPHIC_CM_P3_FULL = 6 | (2 << 8) | (3 << 16) | (1 << 21),
113 
114     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21)
115     GRAPHIC_CM_P3_HLG_FULL = 6 | (5 << 8) | (3 << 16) | (1 << 21),
116 
117     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21)
118     GRAPHIC_CM_P3_PQ_FULL = 6 | (4 << 8) | (3 << 16) | (1 << 21),
119 
120     // COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21)
121     GRAPHIC_CM_ADOBERGB_FULL = 23 | (6 << 8) | (0 << 16) | (1 << 21),
122 
123     // COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21)
124     GRAPHIC_CM_SRGB_LIMIT = 1 | (2 << 8) | (3 << 16) | (2 << 21),
125 
126     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21)
127     GRAPHIC_CM_P3_LIMIT = 6 | (2 << 8) | (3 << 16) | (2 << 21),
128 
129     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21)
130     GRAPHIC_CM_P3_HLG_LIMIT = 6 | (5 << 8) | (3 << 16) | (2 << 21),
131 
132     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21)
133     GRAPHIC_CM_P3_PQ_LIMIT = 6 | (4 << 8) | (3 << 16) | (2 << 21),
134 
135     // COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21)
136     GRAPHIC_CM_ADOBERGB_LIMIT = 23 | (6 << 8) | (0 << 16) | (2 << 21),
137 
138     // COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8)
139     GRAPHIC_CM_LINEAR_SRGB = 1 | (3 << 8),
140 
141     // equal to GRAPHIC_CM_LINEAR_SRGB
142     GRAPHIC_CM_LINEAR_BT709 = 1 | (3 << 8),
143 
144     // COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8)
145     GRAPHIC_CM_LINEAR_P3 = 6 | (3 << 8),
146 
147     // COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8)
148     GRAPHIC_CM_LINEAR_BT2020 = 4 | (3 << 8),
149 
150     // equal to GRAPHIC_CM_SRGB_FULL
151     GRAPHIC_CM_DISPLAY_SRGB = 1 | (2 << 8) | (3 << 16) | (1 << 21),
152 
153     // equal to GRAPHIC_CM_P3_FULL
154     GRAPHIC_CM_DISPLAY_P3_SRGB = 6 | (2 << 8) | (3 << 16) | (1 << 21),
155 
156     // equal to GRAPHIC_CM_P3_HLG_FULL
157     GRAPHIC_CM_DISPLAY_P3_HLG = 6 | (5 << 8) | (3 << 16) | (1 << 21),
158 
159     // equal to GRAPHIC_CM_P3_PQ_FULL
160     GRAPHIC_CM_DISPLAY_P3_PQ = 6 | (4 << 8) | (3 << 16) | (1 << 21),
161 
162     // COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21)
163     GRAPHIC_CM_DISPLAY_BT2020_SRGB = 4 | (2 << 8) | (4 << 16) | (1 << 21),
164 
165     // equal to GRAPHIC_CM_BT2020_HLG_FULL
166     GRAPHIC_CM_DISPLAY_BT2020_HLG = 4 | (5 << 8) | (4 << 16) | (1 << 21),
167 
168     // equal to GRAPHIC_CM_BT2020_PQ_FULL
169     GRAPHIC_CM_DISPLAY_BT2020_PQ = 4 | (4 << 8) | (4 << 16) | (1 << 21)
170 };
171 
172 enum class DM_ScreenHDRFormat : uint32_t {
173     NOT_SUPPORT_HDR = 0,
174     VIDEO_HLG,
175     VIDEO_HDR10,
176     VIDEO_HDR_VIVID,
177     IMAGE_HDR_VIVID_DUAL,
178     IMAGE_HDR_VIVID_SINGLE,
179     IMAGE_HDR_ISO_DUAL,
180     IMAGE_HDR_ISO_SINGLE,
181 };
182 
183 const std::map<DM_GraphicCM_ColorSpaceType, DM_ColorSpace> DM_NATIVE_TO_NDK_COLOR_SPACE_TYPE_MAP {
184     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_COLORSPACE_NONE,     DM_ColorSpace::UNKNOWN },
185     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_ADOBERGB_FULL,       DM_ColorSpace::ADOBE_RGB },
186     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_ADOBERGB_LIMIT,      DM_ColorSpace::ADOBE_RGB },
187     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT2020_HLG_FULL,     DM_ColorSpace::BT2020_HLG },
188     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT2020_HLG_LIMIT,    DM_ColorSpace::BT2020_HLG },
189     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_BT2020_HLG,  DM_ColorSpace::BT2020_HLG },
190     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT2020_PQ_FULL,      DM_ColorSpace::BT2020_PQ },
191     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT2020_PQ_LIMIT,     DM_ColorSpace::BT2020_PQ },
192     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_BT2020_PQ,   DM_ColorSpace::BT2020_PQ },
193     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT601_EBU_FULL,      DM_ColorSpace::BT601_EBU },
194     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT601_EBU_LIMIT,     DM_ColorSpace::BT601_EBU },
195     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT601_SMPTE_C_FULL,  DM_ColorSpace::BT601_SMPTE_C },
196     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT601_SMPTE_C_LIMIT, DM_ColorSpace::BT601_SMPTE_C },
197     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT709_FULL,          DM_ColorSpace::BT709 },
198     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_BT709_LIMIT,         DM_ColorSpace::BT709 },
199     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_HLG_FULL,         DM_ColorSpace::P3_HLG },
200     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_HLG_LIMIT,        DM_ColorSpace::P3_HLG },
201     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_P3_HLG,      DM_ColorSpace::P3_HLG },
202     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_PQ_FULL,          DM_ColorSpace::P3_PQ },
203     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_PQ_LIMIT,         DM_ColorSpace::P3_PQ },
204     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_P3_PQ,       DM_ColorSpace::P3_PQ },
205     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_FULL,             DM_ColorSpace::DISPLAY_P3 },
206     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_P3_LIMIT,            DM_ColorSpace::DISPLAY_P3 },
207     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_P3_SRGB,     DM_ColorSpace::DISPLAY_P3 },
208     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_SRGB_FULL,           DM_ColorSpace::SRGB },
209     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_SRGB_LIMIT,          DM_ColorSpace::SRGB },
210     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_DISPLAY_SRGB,        DM_ColorSpace::SRGB },
211     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_LINEAR_SRGB,         DM_ColorSpace::LINEAR_SRGB },
212     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_LINEAR_BT709,        DM_ColorSpace::LINEAR_SRGB },
213     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_LINEAR_P3,           DM_ColorSpace::LINEAR_P3 },
214     { DM_GraphicCM_ColorSpaceType::GRAPHIC_CM_LINEAR_BT2020,       DM_ColorSpace::LINEAR_BT2020 },
215 };
216 
217 const std::map<DM_ScreenHDRFormat, DM_HDRFormat> DM_NATIVE_TO_NDK_HDR_FORMAT_TYPE_MAP {
218     { DM_ScreenHDRFormat::NOT_SUPPORT_HDR,        DM_HDRFormat::NONE },
219     { DM_ScreenHDRFormat::VIDEO_HLG,              DM_HDRFormat::VIDEO_HLG },
220     { DM_ScreenHDRFormat::VIDEO_HDR10,            DM_HDRFormat::VIDEO_HDR10 },
221     { DM_ScreenHDRFormat::VIDEO_HDR_VIVID,        DM_HDRFormat::VIDEO_HDR_VIVID },
222     { DM_ScreenHDRFormat::IMAGE_HDR_VIVID_DUAL,   DM_HDRFormat::IMAGE_HDR_VIVID_DUAL },
223     { DM_ScreenHDRFormat::IMAGE_HDR_VIVID_SINGLE, DM_HDRFormat::IMAGE_HDR_VIVID_SINGLE },
224     { DM_ScreenHDRFormat::IMAGE_HDR_ISO_DUAL,     DM_HDRFormat::IMAGE_HDR_ISO_DUAL },
225     { DM_ScreenHDRFormat::IMAGE_HDR_ISO_SINGLE,   DM_HDRFormat::IMAGE_HDR_ISO_SINGLE },
226 };
227 
228 #define DISPLAY_MANAGER_FREE_MEMORY(ptr) \
229     do { \
230         if ((ptr)) { \
231             free((ptr)); \
232             (ptr) = NULL; \
233         } \
234     } while (0)
235 
236 }  // namespace Rosen
237 }  // namespace OHOS
238 #endif  // OHOS_OH_NATIVE_DISPLAY_MANAGER_INNER_H
239