/*
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @addtogroup image
* @{
*
* @brief Provides APIs for obtaining picture data and information.
*
* @Syscap SystemCapability.Multimedia.Image.Core
* @since 13
*/
/**
* @file picture_native.h
*
* @brief Declares the APIs that can access a picture.
*
* @library libpicture.so
* @kit ImageKit
* @Syscap SystemCapability.Multimedia.Image.Core
* @since 13
*/
#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PICTURE_NATIVE_H_
#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PICTURE_NATIVE_H_
#include "image_common.h"
#include "pixelmap_native.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Define a Picture struct type, used for picture pointer controls.
*
* @since 13
*/
struct OH_PictureNative;
/**
* @brief Define a Picture struct type, used for picture pointer controls.
*
* @since 13
*/
typedef struct OH_PictureNative OH_PictureNative;
/**
* @brief Define a AuxiliaryPicture struct type, used for auxiliary
* picture pointer controls.
*
* @since 13
*/
struct OH_AuxiliaryPictureNative;
/**
* @brief Define a AuxiliaryPicture struct type, used for auxiliary
* picture pointer controls.
*
* @since 13
*/
typedef struct OH_AuxiliaryPictureNative OH_AuxiliaryPictureNative;
/**
* @brief Define a AuxiliaryPictureInfo struct type, used for auxiliary
* picture info controls.
*
* @since 13
*/
struct OH_AuxiliaryPictureInfo;
/**
* @brief Define a AuxiliaryPictureInfo struct type, used for auxiliary
* picture info controls.
*
* @since 13
*/
typedef struct OH_AuxiliaryPictureInfo OH_AuxiliaryPictureInfo;
/**
* @brief Define a auxiliary picture type.
*
* @since 13
*/
typedef enum {
/*
* Gainmap
*/
AUXILIARY_PICTURE_TYPE_GAINMAP = 1,
/*
* Depth map
*/
AUXILIARY_PICTURE_TYPE_DEPTH_MAP = 2,
/*
* Unrefocus map
*/
AUXILIARY_PICTURE_TYPE_UNREFOCUS_MAP = 3,
/*
* Linear map
*/
AUXILIARY_PICTURE_TYPE_LINEAR_MAP = 4,
/*
* Fragment map
*/
AUXILIARY_PICTURE_TYPE_FRAGMENT_MAP = 5,
} Image_AuxiliaryPictureType;
/**
* @brief Create a Picture object.
*
* @param mainPixelmap The pixel map of the main image.
* @param picture Picture pointer for created.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} mainPixelmap is nullptr, or picture is nullptr.
* @since 13
*/
Image_ErrorCode OH_PictureNative_CreatePicture(OH_PixelmapNative *mainPixelmap, OH_PictureNative **picture);
/**
* @brief Obtains the pixel map of the main image.
*
* @param picture The Picture pointer will be operated.
* @param mainPixelmap Main pixel map pointer for obtained.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or mainPixelmap is nullptr.
* @since 13
*/
Image_ErrorCode OH_PictureNative_GetMainPixelmap(OH_PictureNative *picture, OH_PixelmapNative **mainPixelmap);
/**
* @brief Obtains the hdr pixel map.
*
* @param picture The Picture pointer will be operated.
* @param hdrPixelmap Hdr pixel map pointer for obtained.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or hdrPixelmap is nullptr.
* {@link IMAGE_UNSUPPORTED_OPERATION} Unsupported operation, e.g. the picture does not has a gainmap
* @since 13
*/
Image_ErrorCode OH_PictureNative_GetHdrComposedPixelmap(OH_PictureNative *picture, OH_PixelmapNative **hdrPixelmap);
/**
* @brief Obtains the gainmap pixel map.
*
* @param picture The Picture pointer will be operated.
* @param gainmapPixelmap Gainmap pointer for obtained.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or gainmapPixelmap is nullptr.
* @since 13
*/
Image_ErrorCode OH_PictureNative_GetGainmapPixelmap(OH_PictureNative *picture, OH_PixelmapNative **gainmapPixelmap);
/**
* @brief Set auxiliary picture.
*
* @param picture The Picture pointer will be operated.
* @param type The type of auxiliary picture.
* @param auxiliaryPicture AuxiliaryPicture object.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or auxiliaryPicture is nullptr, or the type is invalid.
* @since 13
*/
Image_ErrorCode OH_PictureNative_SetAuxiliaryPicture(OH_PictureNative *picture, Image_AuxiliaryPictureType type,
OH_AuxiliaryPictureNative *auxiliaryPicture);
/**
* @brief Obtains the auxiliary picture based on type.
*
* @param picture The Picture pointer will be operated.
* @param type The type of auxiliary picture.
* @param auxiliaryPicture AuxiliaryPicture pointer for obtained.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or auxiliaryPicture is nullptr, or the type is invalid.
* @since 13
*/
Image_ErrorCode OH_PictureNative_GetAuxiliaryPicture(OH_PictureNative *picture, Image_AuxiliaryPictureType type,
OH_AuxiliaryPictureNative **auxiliaryPicture);
/**
* @brief Obtains the metadata of main picture.
*
* @param picture The Picture pointer will be operated.
* @param metadataType The type of metadata.
* @param metadata The metadata of main picture.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or metadata is nullptr.
* {@link IMAGE_UNSUPPORTED_METADATA} unsupported metadata type.
* @since 13
*/
Image_ErrorCode OH_PictureNative_GetMetadata(OH_PictureNative *picture, Image_MetadataType metadataType,
OH_PictureMetadata **metadata);
/**
* @brief Set main picture metadata.
*
* @param picture The Picture pointer will be operated.
* @param metadataType The type of metadata.
* @param metadata The metadata will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr, or metadata is nullptr.
* {@link IMAGE_UNSUPPORTED_METADATA} unsupported metadata type.
* @since 13
*/
Image_ErrorCode OH_PictureNative_SetMetadata(OH_PictureNative *picture, Image_MetadataType metadataType,
OH_PictureMetadata *metadata);
/**
* @brief Releases this Picture object.
*
* @param picture The Picture pointer will be operated.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr.
* @since 13
*/
Image_ErrorCode OH_PictureNative_Release(OH_PictureNative *picture);
/**
* @brief Create a AuxiliaryPicture object.
*
* @param data The image data buffer.
* @param dataLength The length of data.
* @param size The size of auxiliary picture.
* @param type The type of auxiliary picture.
* @param auxiliaryPicture AuxiliaryPicture pointer for created.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} data is nullptr, or dataLength is invalid, or size is nullptr, or the type
* is invalid, or auxiliaryPicture is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_Create(uint8_t *data, size_t dataLength, Image_Size *size,
Image_AuxiliaryPictureType type, OH_AuxiliaryPictureNative **auxiliaryPicture);
/**
* @brief Write pixels to auxiliary picture.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param source The pixels will be written.
* @param bufferSize The size of pixels.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or source is nullptr, or the bufferSize is invalid.
* {@link IMAGE_ALLOC_FAILED} memory alloc failed.
* {@link IMAGE_COPY_FAILED} memory copy failed.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_WritePixels(OH_AuxiliaryPictureNative *auxiliaryPicture, uint8_t *source,
size_t bufferSize);
/**
* @brief Read pixels from auxiliary picture.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param destination The pixels will be read.
* @param bufferSize The size of pixels for reading.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or destination is nullptr,
* or the bufferSize is invalid.
* {@link IMAGE_ALLOC_FAILED} memory alloc failed.
* {@link IMAGE_COPY_FAILED} memory copy failed.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_ReadPixels(OH_AuxiliaryPictureNative *auxiliaryPicture, uint8_t *destination,
size_t *bufferSize);
/**
* @brief Obtains the type of auxiliary picture.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param type The type of auxiliary picture.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or type is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_GetType(OH_AuxiliaryPictureNative *auxiliaryPicture,
Image_AuxiliaryPictureType *type);
/**
* @brief Obtains the info of auxiliary picture.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param info The info of auxiliary picture.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or info is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_GetInfo(OH_AuxiliaryPictureNative *auxiliaryPicture,
OH_AuxiliaryPictureInfo **info);
/**
* @brief Set auxiliary picture info.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param info The info will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or info is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_SetInfo(OH_AuxiliaryPictureNative *auxiliaryPicture,
OH_AuxiliaryPictureInfo *info);
/**
* @brief Obtains the metadata of auxiliary picture.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param metadataType The type of metadata.
* @param metadata The metadata of auxiliary picture.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or metadata is nullptr.
* {@link IMAGE_UNSUPPORTED_METADATA} unsupported metadata type, or the metadata type does not match the
* auxiliary picture type.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_GetMetadata(OH_AuxiliaryPictureNative *auxiliaryPicture,
Image_MetadataType metadataType, OH_PictureMetadata **metadata);
/**
* @brief Set auxiliary picture metadata.
*
* @param auxiliaryPicture The AuxiliaryPicture pointer will be operated.
* @param metadataType The type of metadata.
* @param metadata The metadata will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} auxiliaryPicture is nullptr, or metadata is nullptr.
* {@link IMAGE_UNSUPPORTED_METADATA} unsupported metadata type, or the metadata type does not match the
* auxiliary picture type.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_SetMetadata(OH_AuxiliaryPictureNative *auxiliaryPicture,
Image_MetadataType metadataType, OH_PictureMetadata *metadata);
/**
* @brief Releases this AuxiliaryPicture object.
*
* @param picture The Picture pointer will be operated.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} picture is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureNative_Release(OH_AuxiliaryPictureNative *picture);
/**
* @brief Create a AuxiliaryPictureInfo object.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_Create(OH_AuxiliaryPictureInfo **info);
/**
* @brief Obtains the type of auxiliary picture info.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param type The type of auxiliary picture info.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or type is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_GetType(OH_AuxiliaryPictureInfo *info, Image_AuxiliaryPictureType *type);
/**
* @brief Set auxiliary picture info type.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param type The type will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or type is invalid.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_SetType(OH_AuxiliaryPictureInfo *info, Image_AuxiliaryPictureType type);
/**
* @brief Obtains the size of auxiliary picture info.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param size The size of auxiliary picture info.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or size is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_GetSize(OH_AuxiliaryPictureInfo *info, Image_Size *size);
/**
* @brief Set auxiliary picture info size.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param size The size will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or size is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_SetSize(OH_AuxiliaryPictureInfo *info, Image_Size *size);
/**
* @brief Obtains the rowStride of auxiliary picture info.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param rowStride The rowStride of auxiliary picture info.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or rowStride is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_GetRowStride(OH_AuxiliaryPictureInfo *info, uint32_t *rowStride);
/**
* @brief Set auxiliary picture info rowStride.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param rowStride The rowStride will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or rowStride is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_SetRowStride(OH_AuxiliaryPictureInfo *info, uint32_t rowStride);
/**
* @brief Obtains the pixelFormat of auxiliary picture info.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param pixelFormat The pixelFormat will be get.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr, or pixelFormat is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_GetPixelFormat(OH_AuxiliaryPictureInfo *info, PIXEL_FORMAT *pixelFormat);
/**
* @brief Set auxiliary picture info pixelFormat.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @param pixelFormat The pixelFormat will be set.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_SetPixelFormat(OH_AuxiliaryPictureInfo *info, PIXEL_FORMAT pixelFormat);
/**
* @brief Releases this AuxiliaryPictureInfo object.
*
* @param info The AuxiliaryPictureInfo pointer will be operated.
* @return Image functions result code.
* {@link IMAGE_SUCCESS} if the execution is successful.
* {@link IMAGE_BAD_PARAMETER} info is nullptr.
* @since 13
*/
Image_ErrorCode OH_AuxiliaryPictureInfo_Release(OH_AuxiliaryPictureInfo *info);
#ifdef __cplusplus
};
#endif
/** @} */
#endif //INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PICTURE_NATIVE_H_