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 NDK_INCLUDE_BUFFER_COMMON_H_
17#define NDK_INCLUDE_BUFFER_COMMON_H_
18
19/**
20 * @addtogroup OH_NativeBuffer
21 * @{
22 *
23 * @brief Provides the common types for native buffer.
24 *
25 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
26 * @since 12
27 * @version 1.0
28 */
29
30/**
31 * @file native_buffer.h
32 *
33 * @brief Defines the common types for native buffer.
34 *
35 * @kit ArkGraphics2D
36 * @library libnative_buffer.so
37 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
38 * @since 12
39 * @version 1.0
40 */
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/**
47 * @brief Indicates the color space of a native buffer.
48 *
49 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
50 * @since 11
51 * @version 1.0
52 */
53/**
54 * @brief Indicates the color space of a native buffer.
55 * Move from native_buffer.h to native_common.h
56 *
57 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
58 * @since 12
59 * @version 1.0
60 */
61typedef enum OH_NativeBuffer_ColorSpace {
62    /** None color space */
63    OH_COLORSPACE_NONE,
64    /** COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21) */
65    OH_COLORSPACE_BT601_EBU_FULL,
66    /** COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21)*/
67    OH_COLORSPACE_BT601_SMPTE_C_FULL,
68    /** COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21) */
69    OH_COLORSPACE_BT709_FULL,
70    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
71    OH_COLORSPACE_BT2020_HLG_FULL,
72    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
73    OH_COLORSPACE_BT2020_PQ_FULL,
74    /** COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21) */
75    OH_COLORSPACE_BT601_EBU_LIMIT,
76    /** COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */
77    OH_COLORSPACE_BT601_SMPTE_C_LIMIT,
78    /** COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21) */
79    OH_COLORSPACE_BT709_LIMIT,
80    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */
81    OH_COLORSPACE_BT2020_HLG_LIMIT,
82    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */
83    OH_COLORSPACE_BT2020_PQ_LIMIT,
84    /** COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */
85    OH_COLORSPACE_SRGB_FULL,
86    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
87    OH_COLORSPACE_P3_FULL,
88    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
89    OH_COLORSPACE_P3_HLG_FULL,
90    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
91    OH_COLORSPACE_P3_PQ_FULL,
92    /** COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21) */
93    OH_COLORSPACE_ADOBERGB_FULL,
94    /** COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */
95    OH_COLORSPACE_SRGB_LIMIT,
96    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
97    OH_COLORSPACE_P3_LIMIT,
98    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
99    OH_COLORSPACE_P3_HLG_LIMIT,
100    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
101    OH_COLORSPACE_P3_PQ_LIMIT,
102    /** COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21) */
103    OH_COLORSPACE_ADOBERGB_LIMIT,
104    /** COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8) */
105    OH_COLORSPACE_LINEAR_SRGB,
106    /** equal to OH_COLORSPACE_LINEAR_SRGB */
107    OH_COLORSPACE_LINEAR_BT709,
108    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8) */
109    OH_COLORSPACE_LINEAR_P3,
110    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8) */
111    OH_COLORSPACE_LINEAR_BT2020,
112    /** equal to OH_COLORSPACE_SRGB_FULL */
113    OH_COLORSPACE_DISPLAY_SRGB,
114    /** equal to OH_COLORSPACE_P3_FULL */
115    OH_COLORSPACE_DISPLAY_P3_SRGB,
116    /** equal to OH_COLORSPACE_P3_HLG_FULL */
117    OH_COLORSPACE_DISPLAY_P3_HLG,
118    /** equal to OH_COLORSPACE_P3_PQ_FULL */
119    OH_COLORSPACE_DISPLAY_P3_PQ,
120    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
121    OH_COLORSPACE_DISPLAY_BT2020_SRGB,
122    /** equal to OH_COLORSPACE_BT2020_HLG_FULL */
123    OH_COLORSPACE_DISPLAY_BT2020_HLG,
124    /** equal to OH_COLORSPACE_BT2020_PQ_FULL */
125    OH_COLORSPACE_DISPLAY_BT2020_PQ,
126} OH_NativeBuffer_ColorSpace;
127
128/**
129 * @brief Indicates the HDR metadata type of a native buffer.
130 *
131 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
132 * @since 12
133 * @version 1.0
134 */
135typedef enum OH_NativeBuffer_MetadataType {
136    /** HLG */
137    OH_VIDEO_HDR_HLG,
138    /** HDR10 */
139    OH_VIDEO_HDR_HDR10,
140    /** HDR VIVID */
141    OH_VIDEO_HDR_VIVID,
142    /**
143     * NONE Metadata
144     * @since 13
145     */
146    OH_VIDEO_NONE = -1
147} OH_NativeBuffer_MetadataType;
148
149/**
150 * @brief Indicates the color x and y.
151 *
152 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
153 * @since 12
154 * @version 1.0
155 */
156typedef struct OH_NativeBuffer_ColorXY {
157    /** color X */
158    float x;
159    /** color Y */
160    float y;
161} OH_NativeBuffer_ColorXY;
162
163/**
164 * @brief Indicates the smpte2086 metadata.
165 *
166 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
167 * @since 12
168 * @version 1.0
169 */
170typedef struct OH_NativeBuffer_Smpte2086 {
171    /** primary red */
172    OH_NativeBuffer_ColorXY displayPrimaryRed;
173    /** primary green */
174    OH_NativeBuffer_ColorXY displayPrimaryGreen;
175    /** primary blue */
176    OH_NativeBuffer_ColorXY displayPrimaryBlue;
177    /** white point */
178    OH_NativeBuffer_ColorXY whitePoint;
179    /** max luminance */
180    float maxLuminance;
181    /** min luminance */
182    float minLuminance;
183} OH_NativeBuffer_Smpte2086;
184
185/**
186 * @brief Indicates the cta861.3 metadata.
187 *
188 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
189 * @since 12
190 * @version 1.0
191 */
192typedef struct OH_NativeBuffer_Cta861 {
193    /** max content lightLevel */
194    float maxContentLightLevel;
195    /** max frame average light level */
196    float maxFrameAverageLightLevel;
197} OH_NativeBuffer_Cta861;
198
199/**
200 * @brief Indicates the HDR static metadata.
201 *
202 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
203 * @since 12
204 * @version 1.0
205 */
206typedef struct OH_NativeBuffer_StaticMetadata {
207    /** smpte 2086 metadata*/
208    OH_NativeBuffer_Smpte2086 smpte2086;
209    /** CTA-861.3 metadata*/
210    OH_NativeBuffer_Cta861 cta861;
211} OH_NativeBuffer_StaticMetadata;
212
213/**
214 * @brief Indicates the HDR metadata key of a native buffer.
215 *
216 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
217 * @since 12
218 * @version 1.0
219 */
220typedef enum OH_NativeBuffer_MetadataKey {
221    /** value: OH_NativeBuffer_MetadataType*/
222    OH_HDR_METADATA_TYPE,
223    /** value: OH_NativeBuffer_StaticMetadata*/
224    OH_HDR_STATIC_METADATA,
225    /** byte stream of SEI in video stream*/
226    OH_HDR_DYNAMIC_METADATA
227} OH_NativeBuffer_MetadataKey;
228
229#ifdef __cplusplus
230}
231#endif
232
233/** @} */
234#endif