/*
* 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 image
* @{
*
* @brief Provides APIs for access to the image interface.
*
* @Syscap SystemCapability.Multimedia.Image
* @since 10
* @version 2.0
*/
/**
* @file image_mdk.h
*
* @brief Declares functions that access the image rectangle, size, format, and component data.
* Need link libimagendk.z.so
*
* @since 10
* @version 2.0
*/
#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H
#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H
#include "napi/native_api.h"
#include "image_mdk_common.h"
#ifdef __cplusplus
extern "C" {
#endif
struct ImageNative_;
/**
* @brief Defines an image object at the native layer for the image interface.
*
* @since 10
* @version 2.0
*/
typedef struct ImageNative_ ImageNative;
/**
* @brief Enumerates the image formats.
*
* @since 10
* @version 2.0
*/
enum {
/** YCbCr422 semi-planar format. */
OHOS_IMAGE_FORMAT_YCBCR_422_SP = 1000,
/** JPEG encoding format. */
OHOS_IMAGE_FORMAT_JPEG = 2000
};
/**
* @brief Enumerates the image components.
*
* @since 10
* @version 2.0
*/
enum {
/** Luminance component. */
OHOS_IMAGE_COMPONENT_FORMAT_YUV_Y = 1,
/** Chrominance component - blue projection. */
OHOS_IMAGE_COMPONENT_FORMAT_YUV_U = 2,
/** Chrominance component - red projection. */
OHOS_IMAGE_COMPONENT_FORMAT_YUV_V = 3,
/** JPEG format. */
OHOS_IMAGE_COMPONENT_FORMAT_JPEG = 4,
};
/**
* @brief Defines the information about an image rectangle.
*
* @since 10
* @version 2.0
*/
struct OhosImageRect {
/** X coordinate of the rectangle. */
int32_t x;
/** Y coordinate of the rectangle. */
int32_t y;
/** Width of the rectangle, in pixels. */
int32_t width;
/** Height of the rectangle, in pixels. */
int32_t height;
};
/**
* @brief Defines the image composition information.
*
* @since 10
* @version 2.0
*/
struct OhosImageComponent {
/** Buffer that stores the pixel data. */
uint8_t* byteBuffer;
/** Size of the pixel data in the memory. */
size_t size;
/** Type of the pixel data. */
int32_t componentType;
/** Row stride of the pixel data. */
int32_t rowStride;
/** Pixel stride of the pixel data */
int32_t pixelStride;
};
/**
* @brief Parses an {@link ImageNative} object at the native layer from a JavaScript native API image object.
*
* @param env Indicates the pointer to the Java Native Interface (JNI) environment.
* @param source Indicates a JavaScript native API image object.
* @return Returns an {@link ImageNative} pointer object if the operation is successful
* returns a null pointer otherwise.
* @see ImageNative, OH_Image_Release
* @since 10
* @version 2.0
*/
ImageNative* OH_Image_InitImageNative(napi_env env, napi_value source);
/**
* @brief Obtains {@link OhosImageRect} of an {@link ImageNative} at the native layer.
*
* @param native Indicates the pointer to an {@link ImageNative} object at the native layer.
* @param rect Indicates the pointer to the {@link OhosImageRect} object obtained.
* @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful.
* returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment.
* returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter.
* returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface.
* returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter.
* @see ImageNative, OhosImageRect
* @since 10
* @version 2.0
*/
int32_t OH_Image_ClipRect(const ImageNative* native, struct OhosImageRect* rect);
/**
* @brief Obtains {@link OhosImageSize} of an {@link ImageNative} object at the native layer.
*
* @param native Indicates the pointer to an {@link ImageNative} object at the native layer.
* @param size Indicates the pointer to the {@link OhosImageSize} object obtained.
* @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful.
* returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment.
* returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter.
* returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface.
* returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter.
* @see ImageNative, OhosImageSize
* @since 10
* @version 2.0
*/
int32_t OH_Image_Size(const ImageNative* native, struct OhosImageSize* size);
/**
* @brief Obtains the image format of an {@link ImageNative} object at the native layer.
*
* @param native Indicates the pointer to an {@link ImageNative} object at the native layer.
* @param format Indicates the pointer to the image format obtained.
* @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful.
* returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment.
* returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter.
* returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface.
* returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter.
* @see ImageNative
* @since 10
* @version 2.0
*/
int32_t OH_Image_Format(const ImageNative* native, int32_t* format);
/**
* @brief Obtains {@link OhosImageComponent} of an {@link ImageNative} object at the native layer.
*
* @param native Indicates the pointer to an {@link ImageNative} object at the native layer.
* @param componentType Indicates the type of the required component.
* @param componentNative Indicates the pointer to the {@link OhosImageComponent} object obtained.
* @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful.
* returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment.
* returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter.
* returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface.
* returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter.
* @see ImageNative, OhosImageComponent
* @since 10
* @version 2.0
*/
int32_t OH_Image_GetComponent(const ImageNative* native,
int32_t componentType, struct OhosImageComponent* componentNative);
/**
* @brief Releases an {@link ImageNative} object at the native layer.
* Note: This API is not used to release a JavaScript native API Image object.
* It is used to release the object {@link ImageNative} at the native layer
* parsed by calling {@link OH_Image_InitImageNative}.
*
* @param native Indicates the pointer to an {@link ImageNative} object at the native layer.
* @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful.
* returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment.
* returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter.
* returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter.
* @see ImageNative, OH_Image_InitImageNative
* @since 10
* @version 2.0
*/
int32_t OH_Image_Release(ImageNative* native);
#ifdef __cplusplus
};
#endif
/** @} */
#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H