/* * Copyright (C) 2023 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 ImageSourceNative * @{ * * @brief Provides APIs for access to the image interface. * * @since 12 */ /** * @file image_source_native.h * * @brief Declares APIs for decoding an image source into a pixel map. * * @library libimage_source.so * @kit ImageKit * @syscap SystemCapability.Multimedia.Image.ImageSource * @since 12 */ #ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_IMAGE_SOURCE_NATIVE_H_ #define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_IMAGE_SOURCE_NATIVE_H_ #include "image_common.h" #include "pixelmap_native.h" #include "picture_native.h" #include "rawfile/raw_file.h" #ifdef __cplusplus extern "C" { #endif /** * @brief Defines an image source object for the image interface. * * @since 12 */ struct OH_ImageSourceNative; typedef struct OH_ImageSourceNative OH_ImageSourceNative; /** * @brief Defines image source infomation * {@link OH_ImageSourceInfo_Create}. * * @since 12 */ struct OH_ImageSource_Info; typedef struct OH_ImageSource_Info OH_ImageSource_Info; /** * @brief Defines decoding options for picture * {@link OH_DecodingOptionsForPicture_Create}. * * @since 13 */ struct OH_DecodingOptionsForPicture; /** * @brief Defines decoding options for picture * {@link OH_DecodingOptionsForPicture_Create}. * * @since 13 */ typedef struct OH_DecodingOptionsForPicture OH_DecodingOptionsForPicture; /** * @brief Enumerates decoding dynamic range.. * * @since 12 */ typedef enum { /* * Dynamic range depends on the image. */ IMAGE_DYNAMIC_RANGE_AUTO = 0, /* * Standard dynamic range. */ IMAGE_DYNAMIC_RANGE_SDR = 1, /* * High dynamic range. */ IMAGE_DYNAMIC_RANGE_HDR = 2, } IMAGE_DYNAMIC_RANGE; /** * @brief Type of allocator used to allocate memory of a PixelMap.. * * @since 15 */ typedef enum { /* * The system determines which memory to use to create the PixelMap. */ IMAGE_ALLOCATOR_TYPE_AUTO = 0, /* * Use DMA buffer to create the PixelMap. */ IMAGE_ALLOCATOR_TYPE_DMA = 1, /* * Use share memory to create the PixelMap. */ IMAGE_ALLOCATOR_TYPE_SHARE_MEMORY = 2, } IMAGE_ALLOCATOR_TYPE; /** * @brief The strategy for executing the two operations when both desiredSize and desiredRegion * are specified. * * @since 18 */ typedef enum { /** * Scale first, then crop. */ IMAGE_CROP_AND_SCALE_STRATEGY_SCALE_FIRST = 1, /** * Crop first, then scale. */ IMAGE_CROP_AND_SCALE_STRATEGY_CROP_FIRST = 2, } Image_CropAndScaleStrategy; /** * @brief Create a pointer for OH_ImageSource_Info struct. * * @param info The OH_ImageSource_Info pointer will be operated. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceInfo_Create(OH_ImageSource_Info **info); /** * @brief Get width number for OH_ImageSource_Info struct. * * @param info The OH_ImageSource_Info pointer will be operated. * @param width the number of image width. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceInfo_GetWidth(OH_ImageSource_Info *info, uint32_t *width); /** * @brief Get height number for OH_ImageSource_Info struct. * * @param info The OH_ImageSource_Info pointer will be operated. * @param height the number of image height. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceInfo_GetHeight(OH_ImageSource_Info *info, uint32_t *height); /** * @brief Get isHdr for OH_ImageSource_Info struct. * * @param info The OH_ImageSource_Info pointer will be operated. Pointer connot be null. * @param isHdr Whether the image has a high dynamic range. * @return Returns {@link Image_ErrorCode} IMAGE_SUCCESS - The operation is successful. * returns {@link Image_ErrorCode} IMAGE_BAD_PARAMETER - Parameter error.Possible causes:Parameter verification failed. * @since 12 */ Image_ErrorCode OH_ImageSourceInfo_GetDynamicRange(OH_ImageSource_Info *info, bool *isHdr); /** * @brief delete OH_ImageSource_Info pointer. * * @param info The OH_ImageSource_Info pointer will be operated. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceInfo_Release(OH_ImageSource_Info *info); /** * @brief Defines the options for decoding the image source. * It is used in {@link OH_ImageSourceNative_CreatePixelmap}. * * @since 12 */ struct OH_DecodingOptions; typedef struct OH_DecodingOptions OH_DecodingOptions; /** * @brief Create a pointer for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_Create(OH_DecodingOptions **options); /** * @brief Get pixelFormat number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param pixelFormat the number of image pixelFormat. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetPixelFormat(OH_DecodingOptions *options, int32_t *pixelFormat); /** * @brief Set pixelFormat number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param pixelFormat the number of image pixelFormat. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetPixelFormat(OH_DecodingOptions *options, int32_t pixelFormat); /** * @brief Get index number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param index the number of image index. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetIndex(OH_DecodingOptions *options, uint32_t *index); /** * @brief Set index number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param index the number of image index. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetIndex(OH_DecodingOptions *options, uint32_t index); /** * @brief Get rotate number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param rotate the number of image rotate. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetRotate(OH_DecodingOptions *options, float *rotate); /** * @brief Set rotate number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param rotate the number of image rotate. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetRotate(OH_DecodingOptions *options, float rotate); /** * @brief Get desiredSize number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param desiredSize the number of image desiredSize. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetDesiredSize(OH_DecodingOptions *options, Image_Size *desiredSize); /** * @brief Set desiredSize number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param desiredSize the number of image desiredSize. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetDesiredSize(OH_DecodingOptions *options, Image_Size *desiredSize); /** * @brief Set desiredRegion number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param desiredRegion the number of image desiredRegion. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetDesiredRegion(OH_DecodingOptions *options, Image_Region *desiredRegion); /** * @brief Set desiredRegion number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. * @param desiredRegion the number of image desiredRegion. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetDesiredRegion(OH_DecodingOptions *options, Image_Region *desiredRegion); /** * @brief Set desiredDynamicRange number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. Pointer connot be null. * @param desiredDynamicRange the number of desired dynamic range {@link IMAGE_DYNAMIC_RANGE}. Pointer connot be null. * @return Returns {@link Image_ErrorCode} IMAGE_SUCCESS - The operation is successful. * returns {@link Image_ErrorCode} IMAGE_BAD_PARAMETER - Parameter error.Possible causes:Parameter verification failed. * @since 12 */ Image_ErrorCode OH_DecodingOptions_GetDesiredDynamicRange(OH_DecodingOptions *options, int32_t *desiredDynamicRange); /** * @brief Sets a cropping and scaling strategy for decoding options. * * @param options Pointer to the decoding options. * @param cropAndScaleStrategy Strategy for executing the cropping and scaling operations when both desiredSize and * desiredRegion are specified. * @return Returns one of the following result codes: * {@link IMAGE_SUCCESS}: The execution is successful. * {@link IMAGE_BAD_PARAMETER}: options is a null pointer or cropAndScaleStrategy is not in the range of * Image_CropAndScaleStrategy. * @since 18 */ Image_ErrorCode OH_DecodingOptions_SetCropAndScaleStrategy(OH_DecodingOptions *options, int32_t cropAndScaleStrategy); /** * @brief Obtains the cropping and scaling strategy of decoding options. * * @param options Pointer to the decoding options. * @param cropAndScaleStrategy Pointer to the strategy for executing the cropping and scaling operations when both * desiredSize and desiredRegion are specified. * @return Returns one of the following result codes: * {@link IMAGE_SUCCESS}: The execution is successful. * {@link IMAGE_BAD_PARAMETER}: options or cropAndScaleStrategy is a null pointer. * @since 18 */ Image_ErrorCode OH_DecodingOptions_GetCropAndScaleStrategy(OH_DecodingOptions *options, int32_t *cropAndScaleStrategy); /** * @brief Set desiredDynamicRange number for OH_DecodingOptions struct. * * @param options The OH_DecodingOptions pointer will be operated. Pointer connot be null. * @param desiredDynamicRange the number of desired dynamic range {@link IMAGE_DYNAMIC_RANGE}. * @return Returns {@link Image_ErrorCode} IMAGE_SUCCESS - The operation is successful. * returns {@link Image_ErrorCode} IMAGE_BAD_PARAMETER - Parameter error.Possible causes:Parameter verification failed. * @since 12 */ Image_ErrorCode OH_DecodingOptions_SetDesiredDynamicRange(OH_DecodingOptions *options, int32_t desiredDynamicRange); /** * @brief delete OH_DecodingOptions pointer. * * @param options The OH_DecodingOptions pointer will be operated. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_DecodingOptions_Release(OH_DecodingOptions *options); /** * @brief Creates an ImageSource pointer. * * @param uri Indicates a pointer to the image source URI. Only a file URI or Base64 URI is accepted. * @param uriSize Indicates the length of the image source URI. * @param res Indicates a pointer to the ImageSource object created at the C++ native layer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreateFromUri(char *uri, size_t uriSize, OH_ImageSourceNative **res); /** * @brief Creates an void pointer * * @param fd Indicates the image source file descriptor. * @param res Indicates a void pointer to the ImageSource object created at the C++ native layer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreateFromFd(int32_t fd, OH_ImageSourceNative **res); /** * @brief Creates an void pointer * * @param data Indicates a pointer to the image source data. Only a formatted packet data or Base64 data is accepted. * @param dataSize Indicates the size of the image source data. * @param res Indicates a void pointer to the ImageSource object created at the C++ native layer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreateFromData(uint8_t *data, size_t dataSize, OH_ImageSourceNative **res); /** * @brief Creates an void pointer * * @param rawFile Indicates the raw file's file descriptor. * @param res Indicates a void pointer to the ImageSource object created at the C++ native layer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreateFromRawFile(RawFileDescriptor *rawFile, OH_ImageSourceNative **res); /** * @brief Decodes an void pointer * based on the specified {@link OH_DecodingOptions} struct. * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param options Indicates a pointer to the options for decoding the image source. * For details, see {@link OH_DecodingOptions}. * @param pixelmap Indicates a void pointer to the Pixelmap object obtained at the C++ native layer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreatePixelmap(OH_ImageSourceNative *source, OH_DecodingOptions *options, OH_PixelmapNative **pixelmap); /** * @brief Creates a PixelMap based on decoding parameters {@link OH_DecodingOptions}, the memory type used by the * PixelMap can be specified by allocatorType {@link IMAGE_ALLOCATOR_TYPE}. By default, the system selects the memory * type based on the image type, image size, platform capability, etc. When processing the PixelMap returned by this * interface, please always consider the impact of stride. * * @param source Image Source. * @param options Decoding parameters, such as the size, pixel format, and color space of the pixelMap. * For details, see {@link OH_DecodingOptions}. * @param allocator Indicate which memory type will be used by the returned PixelMap. * @param pixelmap Decoded Pixelmap object. * @return Error code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} source is nullptr, or picture is nullptr. * {@link IMAGE_BAD_SOURCE} data source exception. * {@link IMAGE_SOURCE_UNSUPPORTED_MIMETYPE} unsupported mime type. * {@link IMAGE_SOURCE_TOO_LARGE} image to large. * {@link IMAGE_SOURCE_UNSUPPORTED_ALLOCATOR_TYPE} unsupported allocator type, * e.g., use share memory to decode a HDR image as only DMA supported hdr metadata. * {@link IMAGE_SOURCE_UNSUPPORTED_OPTIONS} unsupported options, * e.g, cannot convert image into desired pixel format. * {@link IMAGE_DECODE_FAILED} decode failed. * {@link IMAGE_SOURCE_ALLOC_FAILED} memory allocation failed. * @since 15 */ Image_ErrorCode OH_ImageSourceNative_CreatePixelmapUsingAllocator(OH_ImageSourceNative *source, OH_DecodingOptions *options, IMAGE_ALLOCATOR_TYPE allocator, OH_PixelmapNative **pixelmap); /** * @brief Decodes an void pointer * the Pixelmap objects at the C++ native layer * based on the specified {@link OH_DecodingOptions} struct. * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param options Indicates a pointer to the options for decoding the image source. * For details, see {@link OH_DecodingOptions}. * @param resVecPixMap Indicates a pointer array to the Pixelmap objects obtained at the C++ native layer. * It cannot be a null pointer. * @param size Indicates a size of resVecPixMap. User can get size from {@link OH_ImageSourceNative_GetFrameCount}. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_CreatePixelmapList(OH_ImageSourceNative *source, OH_DecodingOptions *options, OH_PixelmapNative *resVecPixMap[], size_t size); /** * @brief Create Picture pointer from ImageSource * based on the specified {@link OH_DecodingOptionsForPicture} struct. * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param options Indicates a pointer to the options for decoding the image source. * For details, see {@link OH_DecodingOptionsForPicture}. * @param picture Indicates a void pointer to the Picture object obtained at the C++ native layer. * @return Image functions result code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} source is nullptr, or picture is nullptr. * {@link IMAGE_DECODE_FAILED} decode failed. * @since 13 */ Image_ErrorCode OH_ImageSourceNative_CreatePicture(OH_ImageSourceNative *source, OH_DecodingOptionsForPicture *options, OH_PictureNative **picture); /** * @brief Obtains the delay time list from some ImageSource objects (such as GIF image sources). * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param delayTimeList Indicates a pointer to the delay time list obtained. It cannot be a null pointer. * @param size Indicates a size of delayTimeList. User can get size from {@link OH_ImageSourceNative_GetFrameCount}. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_GetDelayTimeList(OH_ImageSourceNative *source, int32_t *delayTimeList, size_t size); /** * @brief Obtains image source information from an ImageSource object by index. * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param index Indicates the index of the frame. * @param info Indicates a pointer to the image source information obtained. * For details, see {@link OH_ImageSource_Info}. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_GetImageInfo(OH_ImageSourceNative *source, int32_t index, OH_ImageSource_Info *info); /** * @brief Obtains the value of an image property from an ImageSource object. * * @param source Indicates a void pointer(from ImageSource pointer convert). * @param key Indicates a pointer to the property. For details, see {@link Image_String}., key is an exif constant. * Release after use ImageSource, see {@link OH_ImageSourceNative_Release}. * @param value Indicates a pointer to the value obtained.The user can pass in a null pointer and zero size, * we will allocate memory, but user must free memory after use. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_GetImageProperty(OH_ImageSourceNative *source, Image_String *key, Image_String *value); /** * @brief Modifies the value of an image property of an ImageSource object. * @param source Indicates a void pointer(from ImageSource pointer convert). * @param key Indicates a pointer to the property. For details, see {@link Image_String}., key is an exif constant. * Release after use ImageSource, see {@link OH_ImageSourceNative_Release}. * @param value Indicates a pointer to the new value of the property. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_ModifyImageProperty(OH_ImageSourceNative *source, Image_String *key, Image_String *value); /** * @brief Obtains the number of frames from an ImageSource object. * * @param source Indicates a pointer to the {@link OH_ImageSource} object at the C++ native layer. * @param frameCount The number of image frameCount. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_GetFrameCount(OH_ImageSourceNative *source, uint32_t *frameCount); /** * @brief Releases an ImageSourc object. * * @param source Indicates a ImageSource pointer. * @return Returns {@link Image_ErrorCode} * @since 12 */ Image_ErrorCode OH_ImageSourceNative_Release(OH_ImageSourceNative *source); /** * @brief Create a pointer for OH_DecodingOptionsForPicture struct. * * @param options The OH_DecodingOptionsForPicture pointer will be operated. * @return Image functions result code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} options is nullptr. * @since 13 */ Image_ErrorCode OH_DecodingOptionsForPicture_Create(OH_DecodingOptionsForPicture **options); /** * @brief Obtains the desired auxiliary pictures of decoding options. * * @param options The OH_DecodingOptionsForPicture pointer will be operated. * @param desiredAuxiliaryPictures The desired auxiliary pictures in DecodingOptionsForPicture. * @param length The length of desired auxiliary pictures. * @return Image functions result code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} options is nullptr, desiredAuxiliaryPictures is nullptr, * or length is invalid. * @since 13 */ Image_ErrorCode OH_DecodingOptionsForPicture_GetDesiredAuxiliaryPictures(OH_DecodingOptionsForPicture *options, Image_AuxiliaryPictureType **desiredAuxiliaryPictures, size_t *length); /** * @brief Set decoding options desired auxiliary pictures. * * @param options The OH_DecodingOptionsForPicture pointer will be operated. * @param desiredAuxiliaryPictures The desired auxiliary pictures will be set. * @param length The length of desired auxiliary pictures. * @return Image functions result code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} options is nullptr, desiredAuxiliaryPictures is nullptr, * or length is invalid. * @since 13 */ Image_ErrorCode OH_DecodingOptionsForPicture_SetDesiredAuxiliaryPictures(OH_DecodingOptionsForPicture *options, Image_AuxiliaryPictureType *desiredAuxiliaryPictures, size_t length); /** * @brief Releases an DecodingOptionsForPicture object. * * @param options Indicates a DecodingOptionsForPicture pointer. * @return Image functions result code. * {@link IMAGE_SUCCESS} if the execution is successful. * {@link IMAGE_BAD_PARAMETER} options is nullptr. * @since 13 */ Image_ErrorCode OH_DecodingOptionsForPicture_Release(OH_DecodingOptionsForPicture *options); #ifdef __cplusplus }; #endif /** @} */ #endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_IMAGE_SOURCE_NATIVE_H_