1/*
2 * Copyright (c) 2022 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_NATIVE_BUFFER_H_
17#define NDK_INCLUDE_NATIVE_BUFFER_H_
18
19/**
20 * @addtogroup OH_NativeBuffer
21 * @{
22 *
23 * @brief Provides the native buffer capability.
24 *
25 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
26 * @since 9
27 * @version 1.0
28 */
29
30/**
31 * @file native_buffer.h
32 *
33 * @brief Defines the functions for obtaining and using a native buffer.
34 *
35 * @library libnative_buffer.so
36 * @since 9
37 * @version 1.0
38 */
39
40#include <stdint.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46struct OH_NativeBuffer;
47typedef struct OH_NativeBuffer OH_NativeBuffer;
48typedef struct NativeWindowBuffer OHNativeWindowBuffer;
49
50/**
51 * @brief Indicates the usage of a native buffer.
52 *
53 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
54 * @since 10
55 * @version 1.0
56 */
57typedef enum OH_NativeBuffer_Usage {
58    NATIVEBUFFER_USAGE_CPU_READ = (1ULL << 0),        /// < CPU read buffer */
59    NATIVEBUFFER_USAGE_CPU_WRITE = (1ULL << 1),       /// < CPU write memory */
60    NATIVEBUFFER_USAGE_MEM_DMA = (1ULL << 3),         /// < Direct memory access (DMA) buffer */
61    NATIVEBUFFER_USAGE_HW_RENDER = (1ULL << 8),       /// < For GPU write case */
62    NATIVEBUFFER_USAGE_HW_TEXTURE = (1ULL << 9),      /// < For GPU read case */
63    NATIVEBUFFER_USAGE_CPU_READ_OFTEN = (1ULL << 16), /// < Often be mapped for direct CPU reads */
64    NATIVEBUFFER_USAGE_ALIGNMENT_512 = (1ULL << 18),  /// < 512 bytes alignment */
65} OH_NativeBuffer_Usage;
66
67/**
68 * @brief Indicates the format of a native buffer.
69 *
70 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
71 * @since 10
72 * @version 1.0
73 */
74typedef enum OH_NativeBuffer_Format {
75    /**
76     * CLUT8 format
77     * @since 12
78     */
79    NATIVEBUFFER_PIXEL_FMT_CLUT8 = 0,
80    /**
81     * CLUT1 format
82     * @since 12
83     */
84    NATIVEBUFFER_PIXEL_FMT_CLUT1,
85    /**
86     * CLUT4 format
87     * @since 12
88     */
89    NATIVEBUFFER_PIXEL_FMT_CLUT4,
90    NATIVEBUFFER_PIXEL_FMT_RGB_565 = 3,               /// < RGB565 format */
91    NATIVEBUFFER_PIXEL_FMT_RGBA_5658,                 /// < RGBA5658 format */
92    NATIVEBUFFER_PIXEL_FMT_RGBX_4444,                 /// < RGBX4444 format */
93    NATIVEBUFFER_PIXEL_FMT_RGBA_4444,                 /// < RGBA4444 format */
94    NATIVEBUFFER_PIXEL_FMT_RGB_444,                   /// < RGB444 format */
95    NATIVEBUFFER_PIXEL_FMT_RGBX_5551,                 /// < RGBX5551 format */
96    NATIVEBUFFER_PIXEL_FMT_RGBA_5551,                 /// < RGBA5551 format */
97    NATIVEBUFFER_PIXEL_FMT_RGB_555,                   /// < RGB555 format */
98    NATIVEBUFFER_PIXEL_FMT_RGBX_8888,                 /// < RGBX8888 format */
99    NATIVEBUFFER_PIXEL_FMT_RGBA_8888,                 /// < RGBA8888 format */
100    NATIVEBUFFER_PIXEL_FMT_RGB_888,                   /// < RGB888 format */
101    NATIVEBUFFER_PIXEL_FMT_BGR_565,                   /// < BGR565 format */
102    NATIVEBUFFER_PIXEL_FMT_BGRX_4444,                 /// < BGRX4444 format */
103    NATIVEBUFFER_PIXEL_FMT_BGRA_4444,                 /// < BGRA4444 format */
104    NATIVEBUFFER_PIXEL_FMT_BGRX_5551,                 /// < BGRX5551 format */
105    NATIVEBUFFER_PIXEL_FMT_BGRA_5551,                 /// < BGRA5551 format */
106    NATIVEBUFFER_PIXEL_FMT_BGRX_8888,                 /// < BGRX8888 format */
107    NATIVEBUFFER_PIXEL_FMT_BGRA_8888,                 /// < BGRA8888 format */
108    /**
109     * YUV422 interleaved format
110     * @since 12
111     */
112    NATIVEBUFFER_PIXEL_FMT_YUV_422_I,
113    /**
114     * YCBCR422 semi-plannar format
115     * @since 12
116     */
117    NATIVEBUFFER_PIXEL_FMT_YCBCR_422_SP,
118    /**
119     * YCRCB422 semi-plannar format
120     * @since 12
121     */
122    NATIVEBUFFER_PIXEL_FMT_YCRCB_422_SP,
123    /**
124     * YCBCR420 semi-plannar format
125     * @since 12
126     */
127    NATIVEBUFFER_PIXEL_FMT_YCBCR_420_SP,
128    /**
129     * YCRCB420 semi-plannar format
130     * @since 12
131     */
132    NATIVEBUFFER_PIXEL_FMT_YCRCB_420_SP,
133    /**
134     * YCBCR422 plannar format
135     * @since 12
136     */
137    NATIVEBUFFER_PIXEL_FMT_YCBCR_422_P,
138    /**
139     * YCRCB422 plannar format
140     * @since 12
141     */
142    NATIVEBUFFER_PIXEL_FMT_YCRCB_422_P,
143    /**
144     * YCBCR420 plannar format
145     * @since 12
146     */
147    NATIVEBUFFER_PIXEL_FMT_YCBCR_420_P,
148    /**
149     * YCRCB420 plannar format
150     * @since 12
151     */
152    NATIVEBUFFER_PIXEL_FMT_YCRCB_420_P,
153    /**
154     * YUYV422 packed format
155     * @since 12
156     */
157    NATIVEBUFFER_PIXEL_FMT_YUYV_422_PKG,
158    /**
159     * UYVY422 packed format
160     * @since 12
161     */
162    NATIVEBUFFER_PIXEL_FMT_UYVY_422_PKG,
163    /**
164     * YVYU422 packed format
165     * @since 12
166     */
167    NATIVEBUFFER_PIXEL_FMT_YVYU_422_PKG,
168    /**
169     * VYUY422 packed format
170     * @since 12
171     */
172    NATIVEBUFFER_PIXEL_FMT_VYUY_422_PKG,
173    /**
174     * RGBA_1010102 packed format
175     * @since 12
176     */
177    NATIVEBUFFER_PIXEL_FMT_RGBA_1010102,
178    /**
179     * YCBCR420 semi-planar 10bit packed format
180     * @since 12
181     */
182    NATIVEBUFFER_PIXEL_FMT_YCBCR_P010,
183    /**
184     * YCRCB420 semi-planar 10bit packed format
185     * @since 12
186     */
187    NATIVEBUFFER_PIXEL_FMT_YCRCB_P010,
188    /**
189     * Raw 10bit packed format
190     * @since 12
191     */
192    NATIVEBUFFER_PIXEL_FMT_RAW10,
193    /**
194     * vender mask format
195     * @since 12
196     */
197    NATIVEBUFFER_PIXEL_FMT_VENDER_MASK = 0X7FFF0000,
198    NATIVEBUFFER_PIXEL_FMT_BUTT = 0X7FFFFFFF          /// < Invalid pixel format */
199} OH_NativeBuffer_Format;
200
201/**
202 * @brief Indicates the color space of a native buffer.
203 *
204 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
205 * @since 11
206 * @version 1.0
207 */
208typedef enum OH_NativeBuffer_ColorSpace {
209    /** None color space */
210    OH_COLORSPACE_NONE,
211    /** COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21) */
212    OH_COLORSPACE_BT601_EBU_FULL,
213    /** COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21)*/
214    OH_COLORSPACE_BT601_SMPTE_C_FULL,
215    /** COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21) */
216    OH_COLORSPACE_BT709_FULL,
217    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
218    OH_COLORSPACE_BT2020_HLG_FULL,
219    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
220    OH_COLORSPACE_BT2020_PQ_FULL,
221    /** COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21) */
222    OH_COLORSPACE_BT601_EBU_LIMIT,
223    /** COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */
224    OH_COLORSPACE_BT601_SMPTE_C_LIMIT,
225    /** COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21) */
226    OH_COLORSPACE_BT709_LIMIT,
227    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */
228    OH_COLORSPACE_BT2020_HLG_LIMIT,
229    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */
230    OH_COLORSPACE_BT2020_PQ_LIMIT,
231    /** COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */
232    OH_COLORSPACE_SRGB_FULL,
233    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
234    OH_COLORSPACE_P3_FULL,
235    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
236    OH_COLORSPACE_P3_HLG_FULL,
237    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */
238    OH_COLORSPACE_P3_PQ_FULL,
239    /** COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21) */
240    OH_COLORSPACE_ADOBERGB_FULL,
241    /** COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */
242    OH_COLORSPACE_SRGB_LIMIT,
243    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
244    OH_COLORSPACE_P3_LIMIT,
245    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
246    OH_COLORSPACE_P3_HLG_LIMIT,
247    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */
248    OH_COLORSPACE_P3_PQ_LIMIT,
249    /** COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21) */
250    OH_COLORSPACE_ADOBERGB_LIMIT,
251    /** COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8) */
252    OH_COLORSPACE_LINEAR_SRGB,
253    /** equal to OH_COLORSPACE_LINEAR_SRGB */
254    OH_COLORSPACE_LINEAR_BT709,
255    /** COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8) */
256    OH_COLORSPACE_LINEAR_P3,
257    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8) */
258    OH_COLORSPACE_LINEAR_BT2020,
259    /** equal to OH_COLORSPACE_SRGB_FULL */
260    OH_COLORSPACE_DISPLAY_SRGB,
261    /** equal to OH_COLORSPACE_P3_FULL */
262    OH_COLORSPACE_DISPLAY_P3_SRGB,
263    /** equal to OH_COLORSPACE_P3_HLG_FULL */
264    OH_COLORSPACE_DISPLAY_P3_HLG,
265    /** equal to OH_COLORSPACE_P3_PQ_FULL */
266    OH_COLORSPACE_DISPLAY_P3_PQ,
267    /** COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */
268    OH_COLORSPACE_DISPLAY_BT2020_SRGB,
269    /** equal to OH_COLORSPACE_BT2020_HLG_FULL */
270    OH_COLORSPACE_DISPLAY_BT2020_HLG,
271    /** equal to OH_COLORSPACE_BT2020_PQ_FULL */
272    OH_COLORSPACE_DISPLAY_BT2020_PQ,
273} OH_NativeBuffer_ColorSpace;
274
275/**
276 * @brief Indicates the transform type of a native buffer.
277 *
278 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
279 * @since 12
280 * @version 1.0
281 */
282typedef enum OH_NativeBuffer_TransformType {
283    NATIVEBUFFER_ROTATE_NONE = 0,         /**< No rotation */
284    NATIVEBUFFER_ROTATE_90,               /**< Rotation by 90 degrees */
285    NATIVEBUFFER_ROTATE_180,              /**< Rotation by 180 degrees */
286    NATIVEBUFFER_ROTATE_270,              /**< Rotation by 270 degrees */
287    NATIVEBUFFER_FLIP_H,                  /**< Flip horizontally */
288    NATIVEBUFFER_FLIP_V,                  /**< Flip vertically */
289    NATIVEBUFFER_FLIP_H_ROT90,            /**< Flip horizontally and rotate 90 degrees */
290    NATIVEBUFFER_FLIP_V_ROT90,            /**< Flip vertically and rotate 90 degrees */
291    NATIVEBUFFER_FLIP_H_ROT180,           /**< Flip horizontally and rotate 180 degrees */
292    NATIVEBUFFER_FLIP_V_ROT180,           /**< Flip vertically and rotate 180 degrees */
293    NATIVEBUFFER_FLIP_H_ROT270,           /**< Flip horizontally and rotate 270 degrees */
294    NATIVEBUFFER_FLIP_V_ROT270,           /**< Flip vertically and rotate 270 degrees */
295} OH_NativeBuffer_TransformType;
296
297/**
298 * @brief Indicates the color gamut of a native buffer.
299 *
300 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
301 * @since 12
302 * @version 1.0
303 */
304typedef enum OH_NativeBuffer_ColorGamut {
305    NATIVEBUFFER_COLOR_GAMUT_NATIVE = 0,            /**< Native or default */
306    NATIVEBUFFER_COLOR_GAMUT_STANDARD_BT601 = 1,    /**< Standard BT601 */
307    NATIVEBUFFER_COLOR_GAMUT_STANDARD_BT709 = 2,    /**< Standard BT709 */
308    NATIVEBUFFER_COLOR_GAMUT_DCI_P3 = 3,            /**< DCI P3 */
309    NATIVEBUFFER_COLOR_GAMUT_SRGB = 4,              /**< SRGB */
310    NATIVEBUFFER_COLOR_GAMUT_ADOBE_RGB = 5,         /**< Adobe RGB */
311    NATIVEBUFFER_COLOR_GAMUT_DISPLAY_P3 = 6,        /**< Display P3 */
312    NATIVEBUFFER_COLOR_GAMUT_BT2020 = 7,            /**< BT2020 */
313    NATIVEBUFFER_COLOR_GAMUT_BT2100_PQ = 8,         /**< BT2100 PQ */
314    NATIVEBUFFER_COLOR_GAMUT_BT2100_HLG = 9,        /**< BT2100 HLG */
315    NATIVEBUFFER_COLOR_GAMUT_DISPLAY_BT2020 = 10,   /**< Display BT2020 */
316} OH_NativeBuffer_ColorGamut;
317
318/**
319 * @brief <b>OH_NativeBuffer</b> config. \n
320 * Used to allocating new <b>OH_NativeBuffer</b> andquery parameters if existing ones.
321 *
322 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
323 * @since 9
324 * @version 1.0
325 */
326typedef struct {
327    int32_t width;           ///< Width in pixels
328    int32_t height;          ///< Height in pixels
329    int32_t format;          ///< One of PixelFormat
330    int32_t usage;           ///< Combination of buffer usage
331    int32_t stride;          ///< the stride of memory in bytes
332} OH_NativeBuffer_Config;
333
334/**
335 * @brief Holds info for a single image plane. \n
336 *
337 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
338 * @since 12
339 * @version 1.0
340 */
341typedef struct {
342    /**
343     * Offset in bytes of plane.
344     */
345    uint64_t offset;
346    /**
347     * Distance in bytes from the first value of one row of the image to the first value of the next row.
348     */
349    uint32_t rowStride;
350    /**
351     * Distance in bytes from the first value of one column of the image to the first value of the next column.
352     */
353    uint32_t columnStride;
354} OH_NativeBuffer_Plane;
355
356/**
357 * @brief Holds all image plane. \n
358 *
359 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
360 * @since 12
361 * @version 1.0
362 */
363typedef struct {
364    uint32_t planeCount;              ///< Number of distinct planes.
365    OH_NativeBuffer_Plane planes[4];  ///< Array of image planes.
366} OH_NativeBuffer_Planes;
367
368/**
369 * @brief Indicates the HDR metadata type of a native buffer.
370 *
371 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
372 * @since 12
373 * @version 1.0
374 */
375typedef enum OH_NativeBuffer_MetadataType {
376    OH_VIDEO_HDR_HLG,      /**< HLG */
377    OH_VIDEO_HDR_HDR10,    /**< HDR10 */
378    OH_VIDEO_HDR_VIVID,     /**< HDR VIVID */
379    OH_VIDEO_NONE          /**< NONE Metadata */
380} OH_NativeBuffer_MetadataType;
381
382/**
383 * @brief Indicates the color x and y.
384 *
385 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
386 * @since 12
387 * @version 1.0
388 */
389typedef struct {
390    float x;              /**< color X */
391    float y;              /**< color Y */
392} OH_NativeBuffer_ColorXY;
393
394/**
395 * @brief Indicates the smpte2086 metadata.
396 *
397 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
398 * @since 12
399 * @version 1.0
400 */
401typedef struct {
402    OH_NativeBuffer_ColorXY displaPrimaryRed;    /**< primary red */
403    OH_NativeBuffer_ColorXY displaPrimaryGreen;  /**< primary green */
404    OH_NativeBuffer_ColorXY displaPrimaryBlue;   /**< primary blue */
405    OH_NativeBuffer_ColorXY whitePoint;          /**< white point */
406    float maxLuminance;                          /**< max luminance */
407    float minLuminance;                          /**< min luminance */
408} OH_NativeBuffer_Smpte2086;
409
410/**
411 * @brief Indicates the cta861.3 metadata.
412 *
413 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
414 * @since 12
415 * @version 1.0
416 */
417typedef struct {
418    float maxContentLightLevel;                  /**< max content lightLevel */
419    float maxFrameAverageLightLevel;             /**< max frame average light level */
420} OH_NativeBuffer_Cta861;
421
422/**
423 * @brief Indicates the HDR static metadata.
424 *
425 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
426 * @since 12
427 * @version 1.0
428 */
429typedef struct {
430    OH_NativeBuffer_Smpte2086 smpte2086;         /**< smpte 2086 metadata*/
431    OH_NativeBuffer_Cta861 cta861;               /**< CTA-861.3 metadata*/
432} OH_NativeBuffer_StaticMetadata;
433
434/**
435 * @brief Indicates the HDR metadata key of a native buffer.
436 *
437 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
438 * @since 12
439 * @version 1.0
440 */
441typedef enum OH_NativeBuffer_MetadataKey {
442    OH_HDR_METADATA_TYPE,            /**< value: OH_NativeBuffer_MetadataType*/
443    OH_HDR_STATIC_METADATA,          /**< value: OH_NativeBuffer_StaticMetadata*/
444    OH_HDR_DYNAMIC_METADATA          /**< byte stream of SEI in video stream*/
445} OH_NativeBuffer_MetadataKey;
446
447/**
448 * @brief Alloc a <b>OH_NativeBuffer</b> that matches the passed BufferRequestConfig. \n
449 * A new <b>OH_NativeBuffer</b> instance is created each time this function is called.
450 *
451 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
452 * @param config Indicates the pointer to a <b>BufferRequestConfig</b> instance.
453 * @return Returns the pointer to the <b>OH_NativeBuffer</b> instance created if the operation is successful, \n
454 * returns <b>NULL</b> otherwise.
455 * @since 9
456 * @version 1.0
457 */
458OH_NativeBuffer* OH_NativeBuffer_Alloc(const OH_NativeBuffer_Config* config);
459
460/**
461 * @brief Adds the reference count of a OH_NativeBuffer.
462 *
463 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
464 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
465 * @return Returns an error code, 0 is success, otherwise, failed.
466 * @since 9
467 * @version 1.0
468 */
469int32_t OH_NativeBuffer_Reference(OH_NativeBuffer *buffer);
470
471/**
472 * @brief Decreases the reference count of a OH_NativeBuffer and, when the reference count reaches 0, \n
473 * destroys this OH_NativeBuffer.
474 *
475 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
476 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
477 * @return Returns an error code, 0 is success, otherwise, failed.
478 * @since 9
479 * @version 1.0
480 */
481int32_t OH_NativeBuffer_Unreference(OH_NativeBuffer *buffer);
482
483/**
484 * @brief Return a config of the OH_NativeBuffer in the passed OHNativeBufferConfig struct.
485 *
486 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
487 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
488 * @param config Indicates the pointer to the <b>NativeBufferConfig</b> of the buffer.
489 * @return <b>void</b>
490 * @since 9
491 * @version 1.0
492 */
493void OH_NativeBuffer_GetConfig(OH_NativeBuffer *buffer, OH_NativeBuffer_Config* config);
494
495/**
496 * @brief Provide direct cpu access to the OH_NativeBuffer in the process's address space.
497 *
498 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
499 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
500 * @param virAddr Indicates the address of the <b>OH_NativeBuffer</b> in virtual memory.
501 * @return Returns an error code, 0 is success, otherwise, failed.
502 * @since 9
503 * @version 1.0
504 */
505
506int32_t OH_NativeBuffer_Map(OH_NativeBuffer *buffer, void **virAddr);
507
508/**
509 * @brief Remove direct cpu access ability of the OH_NativeBuffer in the process's address space.
510 *
511 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
512 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
513 * @return Returns an error code, 0 is success, otherwise, failed.
514 * @since 9
515 * @version 1.0
516 */
517int32_t OH_NativeBuffer_Unmap(OH_NativeBuffer *buffer);
518
519/**
520 * @brief Get the systen wide unique sequence number of the OH_NativeBuffer.
521 *
522 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
523 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
524 * @return Returns the sequence number, which is unique for each OH_NativeBuffer.
525 * @since 9
526 * @version 1.0
527 */
528uint32_t OH_NativeBuffer_GetSeqNum(OH_NativeBuffer *buffer);
529
530/**
531 * @brief Provide direct cpu access to the potentially multi-plannar OH_NativeBuffer in the process's address space.
532 *
533 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
534 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
535 * @param virAddr Indicates the address of the <b>OH_NativeBuffer</b> in virtual memory.
536 * @param outPlanes Indicates all image planes that contain the pixel data.
537 * @return Returns an error code, 0 is sucess, otherwise, failed.
538 * @since 12
539 * @version 1.0
540 */
541int32_t OH_NativeBuffer_MapPlanes(OH_NativeBuffer *buffer, void **virAddr, OH_NativeBuffer_Planes *outPlanes);
542
543/**
544 * @brief Converts an <b>OHNativeWindowBuffer</b> instance to an <b>OH_NativeBuffer</b>.
545 *
546 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
547 * @param nativeWindowBuffer Indicates the pointer to a <b>OHNativeWindowBuffer</b> instance.
548 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> pointer.
549 * @return Returns an error code, 0 is sucess, otherwise, failed.
550 * @since 12
551 * @version 1.0
552 */
553int32_t OH_NativeBuffer_FromNativeWindowBuffer(OHNativeWindowBuffer *nativeWindowBuffer, OH_NativeBuffer **buffer);
554
555/**
556 * @brief Set the color space of the OH_NativeBuffer.
557 *
558 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
559 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
560 * @param colorSpace Indicates the color space of native buffer, see <b>OH_NativeBuffer_ColorSpace</b>.
561 * @return Returns an error code, 0 is success, otherwise, failed.
562 * @since 11
563 * @version 1.0
564 */
565int32_t OH_NativeBuffer_SetColorSpace(OH_NativeBuffer *buffer, OH_NativeBuffer_ColorSpace colorSpace);
566
567/**
568 * @brief Get the color space of the OH_NativeBuffer.
569 *
570 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
571 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
572 * @param colorSpace Indicates the color space of native buffer, see <b>OH_NativeBuffer_ColorSpace</b>.
573 * @return {@link NATIVE_ERROR_OK} 0 - Success.
574 *     {@link NATIVE_ERROR_INVALID_ARGUMENTS} 40001000 - buffer is NULL.
575 *     {@link NATIVE_ERROR_BUFFER_STATE_INVALID} 41207000 - Incorrect colorSpace state.
576 * @since 12
577 * @version 1.0
578 */
579int32_t OH_NativeBuffer_GetColorSpace(OH_NativeBuffer *buffer, OH_NativeBuffer_ColorSpace *colorSpace);
580
581/**
582 * @brief Set the metadata type of the OH_NativeBuffer.
583 *
584 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
585 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
586 * @param metadataKey Indicates the metadata type of native buffer, see <b>OH_NativeBuffer_MetadataKey</b>.
587 * @param size Indicates the size of a uint8_t vector.
588 * @param metadata Indicates the pointer to a uint8_t vector.
589 * @return {@link NATIVE_ERROR_OK} 0 - Success.
590 *     {@link NATIVE_ERROR_INVALID_ARGUMENTS} 40001000 - buffer or metadata is NULL.
591 *     {@link NATIVE_ERROR_BUFFER_STATE_INVALID} 41207000 - Incorrect metadata state.
592 *     {@link NATIVE_ERROR_UNSUPPORTED} 50102000 - Unsupported metadata key.
593 * @since 12
594 * @version 1.0
595 */
596int32_t OH_NativeBuffer_SetMetadataValue(OH_NativeBuffer *buffer, OH_NativeBuffer_MetadataKey metadataKey,
597    int32_t size, uint8_t *metadata);
598
599/**
600 * @brief Set the metadata type of the OH_NativeBuffer.
601 *
602 * @syscap SystemCapability.Graphic.Graphic2D.NativeBuffer
603 * @param buffer Indicates the pointer to a <b>OH_NativeBuffer</b> instance.
604 * @param metadataKey Indicates the metadata type of native buffer, see <b>OH_NativeBuffer_MetadataKey</b>.
605 * @param size Indicates the size of a uint8_t vector.
606 * @param metadata Indicates the pointer to a uint8_t vector.
607 * @return {@link NATIVE_ERROR_OK} 0 - Success.
608 *     {@link NATIVE_ERROR_INVALID_ARGUMENTS} 40001000 - buffer, metadata, or size is NULL.
609 *     {@link NATIVE_ERROR_BUFFER_STATE_INVALID} 41207000 - Incorrect metadata state.
610 *     {@link NATIVE_ERROR_UNSUPPORTED} 50102000 - Unsupported metadata key.
611 * @since 12
612 * @version 1.0
613 */
614int32_t OH_NativeBuffer_GetMetadataValue(OH_NativeBuffer *buffer, OH_NativeBuffer_MetadataKey metadataKey,
615    int32_t *size, uint8_t **metadata);
616#ifdef __cplusplus
617}
618#endif
619
620/** @} */
621#endif