1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the 'License');
4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License.
5f6603c60Sopenharmony_ci * You may obtain a copy of the License at
6f6603c60Sopenharmony_ci *
7f6603c60Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f6603c60Sopenharmony_ci *
9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f6603c60Sopenharmony_ci * distributed under the License is distributed on an 'AS IS' BASIS,
11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and
13f6603c60Sopenharmony_ci * limitations under the License.
14f6603c60Sopenharmony_ci */
15f6603c60Sopenharmony_ci
16f6603c60Sopenharmony_ci#include <dlfcn.h>
17f6603c60Sopenharmony_ci#include <fcntl.h>
18f6603c60Sopenharmony_ci#include <iostream>
19f6603c60Sopenharmony_ci#include <linux/kd.h>
20f6603c60Sopenharmony_ci
21f6603c60Sopenharmony_ci#include <multimedia/image_framework/image/pixelmap_native.h>
22f6603c60Sopenharmony_ci#include <multimedia/image_framework/image/image_packer_native.h>
23f6603c60Sopenharmony_ci#include <multimedia/image_framework/image/image_source_native.h>
24f6603c60Sopenharmony_ci#include "multimedia/image_framework/image_pixel_map_mdk.h"
25f6603c60Sopenharmony_ci#include "napi/native_api.h"
26f6603c60Sopenharmony_ci
27f6603c60Sopenharmony_ci#include <string>
28f6603c60Sopenharmony_ci#include <sys/types.h>
29f6603c60Sopenharmony_ci#include <sys/stat.h>
30f6603c60Sopenharmony_ci#include <unistd.h>
31f6603c60Sopenharmony_ci
32f6603c60Sopenharmony_ci#undef LOG_DOMAIN
33f6603c60Sopenharmony_ci#undef LOG_TAG
34f6603c60Sopenharmony_ci#define LOG_DOMAIN 0x3200
35f6603c60Sopenharmony_ci#define LOG_TAG "MY_TAG"
36f6603c60Sopenharmony_ci
37f6603c60Sopenharmony_cinamespace {
38f6603c60Sopenharmony_ci    const uint32_t NUM_0 = 0;
39f6603c60Sopenharmony_ci    const uint32_t NUM_1 = 1;
40f6603c60Sopenharmony_ci    const uint32_t NUM_2 = 2;
41f6603c60Sopenharmony_ci    const uint32_t NUM_3 = 3;
42f6603c60Sopenharmony_ci    const uint32_t NUM_4 = 4;
43f6603c60Sopenharmony_ci    const uint32_t NUM_5 = 5;
44f6603c60Sopenharmony_ci    const uint32_t NUM_6 = 6;
45f6603c60Sopenharmony_ci    const uint32_t MAX_BUFFER_SIZE = 512;
46f6603c60Sopenharmony_ci    const uint32_t MAX_COLOR_SIZE = 96;
47f6603c60Sopenharmony_ci    const uint32_t MAX_QUALITY_SIZE = 98;
48f6603c60Sopenharmony_ci    constexpr int8_t ARGB_8888_BYTES = 4;
49f6603c60Sopenharmony_ci}
50f6603c60Sopenharmony_ci
51f6603c60Sopenharmony_ciconst char *LOG_APP = "ImageNDK";
52f6603c60Sopenharmony_ciconst char* VPE_SO_NAME = "/sys_prod/lib64/VideoProcessingEngine/libaihdr_engine.so";
53f6603c60Sopenharmony_ci
54f6603c60Sopenharmony_cistatic void OHLog(const char *module, const char *format, ...)
55f6603c60Sopenharmony_ci{
56f6603c60Sopenharmony_ci
57f6603c60Sopenharmony_ci    char buffer[MAX_BUFFER_SIZE];
58f6603c60Sopenharmony_ci    va_list args;
59f6603c60Sopenharmony_ci    va_start(args, format);
60f6603c60Sopenharmony_ci    vsnprintf(buffer, sizeof(buffer), format, args);
61f6603c60Sopenharmony_ci    va_end(args);
62f6603c60Sopenharmony_ci
63f6603c60Sopenharmony_ci    printf("[%s] %s\n", module, buffer);
64f6603c60Sopenharmony_ci}
65f6603c60Sopenharmony_ci
66f6603c60Sopenharmony_ci#define OH_LOG_ERROR(module, format, ...)                                                                              \
67f6603c60Sopenharmony_ci    do {                                                                                                               \
68f6603c60Sopenharmony_ci        OHLog(module, format, ##__VA_ARGS__);                                                                          \
69f6603c60Sopenharmony_ci    } while (false)
70f6603c60Sopenharmony_ci
71f6603c60Sopenharmony_ci
72f6603c60Sopenharmony_ci#define OH_LOG_INFO(module, format, ...)                                                                               \
73f6603c60Sopenharmony_ci    do {                                                                                                               \
74f6603c60Sopenharmony_ci        OHLog(module, format, ##__VA_ARGS__);                                                                          \
75f6603c60Sopenharmony_ci    } while (false)
76f6603c60Sopenharmony_ci
77f6603c60Sopenharmony_cistatic napi_value getJsResult(napi_env env, int result)
78f6603c60Sopenharmony_ci{
79f6603c60Sopenharmony_ci    napi_value resultNapi = nullptr;
80f6603c60Sopenharmony_ci    napi_create_int32(env, result, &resultNapi);
81f6603c60Sopenharmony_ci    return resultNapi;
82f6603c60Sopenharmony_ci}
83f6603c60Sopenharmony_ci
84f6603c60Sopenharmony_cistatic napi_value TestInitializationOptionsSetRowStrideNormal(napi_env env, napi_callback_info info)
85f6603c60Sopenharmony_ci{
86f6603c60Sopenharmony_ci    napi_value argValue[NUM_1] = {0};
87f6603c60Sopenharmony_ci    size_t argCount = NUM_1;
88f6603c60Sopenharmony_ci    if (napi_get_cb_info(env, info, &argCount, argValue, nullptr, nullptr) != napi_ok || argCount < NUM_1 ||
89f6603c60Sopenharmony_ci        argValue[NUM_0] == nullptr) {
90f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "napi_get_cb_info failed, argCount: %{public}zu.", argCount);
91f6603c60Sopenharmony_ci        return getJsResult(env, IMAGE_BAD_PARAMETER);
92f6603c60Sopenharmony_ci    }
93f6603c60Sopenharmony_ci    int32_t rowStride = 0;
94f6603c60Sopenharmony_ci    napi_get_value_int32(env, argValue[0], &rowStride);
95f6603c60Sopenharmony_ci    OH_Pixelmap_InitializationOptions *opts = nullptr;
96f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapInitializationOptions_Create(&opts);
97f6603c60Sopenharmony_ci    if (errCode != IMAGE_SUCCESS) {
98f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapInitializationOptions_Create failed, errCode: %{public}d.", errCode);
99f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
100f6603c60Sopenharmony_ci    }
101f6603c60Sopenharmony_ci    errCode = OH_PixelmapInitializationOptions_SetRowStride(opts, rowStride);
102f6603c60Sopenharmony_ci    if (errCode != IMAGE_SUCCESS) {
103f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
104f6603c60Sopenharmony_ci    }
105f6603c60Sopenharmony_ci    int32_t getStride = 0;
106f6603c60Sopenharmony_ci    errCode = OH_PixelmapInitializationOptions_GetRowStride(opts, &getStride);
107f6603c60Sopenharmony_ci    if (errCode != IMAGE_SUCCESS) {
108f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
109f6603c60Sopenharmony_ci    }
110f6603c60Sopenharmony_ci    if (getStride != rowStride) {
111f6603c60Sopenharmony_ci        return getJsResult(env, IMAGE_UNKNOWN_ERROR);
112f6603c60Sopenharmony_ci    }
113f6603c60Sopenharmony_ci    errCode = OH_PixelmapInitializationOptions_Release(opts);
114f6603c60Sopenharmony_ci    if (errCode != IMAGE_SUCCESS) {
115f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapInitializationOptions_Release failed, errCode: %{public}d.", errCode);
116f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
117f6603c60Sopenharmony_ci    }
118f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestInitializationOptionsSetRowStrideNormal success.");
119f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
120f6603c60Sopenharmony_ci}
121f6603c60Sopenharmony_ci
122f6603c60Sopenharmony_cistatic napi_value TestCreatePixelMapWithStrideAbnormal(napi_env env, napi_callback_info info)
123f6603c60Sopenharmony_ci{
124f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest Test OH_Pixelmap_CreatePixelMapWithStride will call.");
125f6603c60Sopenharmony_ci    void* buffer = nullptr;
126f6603c60Sopenharmony_ci    size_t bufferSize = 0;
127f6603c60Sopenharmony_ci    struct OhosPixelMapCreateOps createOps;
128f6603c60Sopenharmony_ci    napi_value pixelmap = nullptr;
129f6603c60Sopenharmony_ci    size_t rowStride = -1; // set a error row stride
130f6603c60Sopenharmony_ci    std::cout << "cout: ImagePixelmapNativeCTest Test will call OH_Pixelmap_CreatePixelMapWithStride." << std::endl;
131f6603c60Sopenharmony_ci    int32_t res = OH_PixelMap_CreatePixelMapWithStride(env, createOps, buffer, bufferSize, rowStride, &pixelmap);
132f6603c60Sopenharmony_ci    std::cout << "cout: ImagePixelmapNativeCTest Test OH_Pixelmap_CreatePixelMapWithStride." << std::endl;
133f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest Test OH_Pixelmap_CreatePixelMapWithStride, res: %{public}zu.", res);
134f6603c60Sopenharmony_ci    if (res != IMAGE_RESULT_GET_DATA_ABNORMAL) {
135f6603c60Sopenharmony_ci        return getJsResult(env, res);
136f6603c60Sopenharmony_ci    }
137f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestCreatePixelMapWithStrideAbnormal success.");
138f6603c60Sopenharmony_ci    return getJsResult(env, 0);
139f6603c60Sopenharmony_ci}
140f6603c60Sopenharmony_ci
141f6603c60Sopenharmony_cistatic napi_value TestNativeScaleWithAntiAliasingAbnormal(napi_env env, napi_callback_info info)
142f6603c60Sopenharmony_ci{
143f6603c60Sopenharmony_ci    float x = 1.5;
144f6603c60Sopenharmony_ci    float y = 1.5;
145f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmapNative = nullptr;
146f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_ScaleWithAntiAliasing(pixelmapNative, x, y,
147f6603c60Sopenharmony_ci        OH_PixelmapNative_AntiAliasing_HIGH);
148f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
149f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_ScaleWithAntiAliasing failed, errCode: %{public}d.", errCode);
150f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
151f6603c60Sopenharmony_ci    }
152f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeScaleWithAntiAliasingNormal success.");
153f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
154f6603c60Sopenharmony_ci}
155f6603c60Sopenharmony_ci
156f6603c60Sopenharmony_cistatic napi_value TestScaleWithAntiAliasingAbnormal(napi_env env, napi_callback_info info)
157f6603c60Sopenharmony_ci{
158f6603c60Sopenharmony_ci    napi_value result = nullptr;
159f6603c60Sopenharmony_ci    napi_value thisVar = nullptr;
160f6603c60Sopenharmony_ci    napi_value argValue[NUM_2] = {0};
161f6603c60Sopenharmony_ci    size_t argCount = NUM_2;
162f6603c60Sopenharmony_ci
163f6603c60Sopenharmony_ci    napi_get_undefined(env, &result);
164f6603c60Sopenharmony_ci    if (napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr) != napi_ok ||
165f6603c60Sopenharmony_ci        argCount < NUM_2 || argValue[NUM_0] == nullptr || argValue[NUM_1] == nullptr) {
166f6603c60Sopenharmony_ci        return result;
167f6603c60Sopenharmony_ci    }
168f6603c60Sopenharmony_ci    NativePixelMap* native = nullptr;
169f6603c60Sopenharmony_ci    double x = 0;
170f6603c60Sopenharmony_ci    double y = 0;
171f6603c60Sopenharmony_ci    if (napi_get_value_double(env, argValue[NUM_0], &x) != napi_ok ||
172f6603c60Sopenharmony_ci        napi_get_value_double(env, argValue[NUM_1], &y) != napi_ok) {
173f6603c60Sopenharmony_ci        return result;
174f6603c60Sopenharmony_ci    }
175f6603c60Sopenharmony_ci
176f6603c60Sopenharmony_ci    int32_t errCode = OH_PixelMap_ScaleWithAntiAliasing(
177f6603c60Sopenharmony_ci        native, static_cast<float>(x), static_cast<float>(y), OH_PixelMap_AntiAliasing_HIGH);
178f6603c60Sopenharmony_ci    if (errCode != IMAGE_RESULT_BAD_PARAMETER) {
179f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_Pixelmap_ScaleWithAntiAliasing failed, errCode: %{public}d.", errCode);
180f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
181f6603c60Sopenharmony_ci    }
182f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_RESULT_SUCCESS);
183f6603c60Sopenharmony_ci}
184f6603c60Sopenharmony_ci
185f6603c60Sopenharmony_cistatic napi_value TestNativeGetNativeBufferAbnormal(napi_env env, napi_callback_info info)
186f6603c60Sopenharmony_ci{
187f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmapNative = nullptr;
188f6603c60Sopenharmony_ci    OH_NativeBuffer **nativeBUffer = nullptr;
189f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_GetNativeBuffer(pixelmapNative, nativeBUffer);
190f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
191f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_GetNativeBuffer failed, errCode: %{public}d.", errCode);
192f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
193f6603c60Sopenharmony_ci    }
194f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeGetNativeBufferAbnormal success.");
195f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
196f6603c60Sopenharmony_ci}
197f6603c60Sopenharmony_ci
198f6603c60Sopenharmony_cistatic napi_value TestNativeSetMetaDataNull(napi_env env, napi_callback_info info)
199f6603c60Sopenharmony_ci{
200f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmapNative = nullptr;
201f6603c60Sopenharmony_ci    OH_Pixelmap_HdrMetadataValue *value = nullptr;
202f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_SetMetadata(pixelmapNative, HDR_METADATA_TYPE, value);
203f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
204f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_SetMetadata failed, errCode: %{public}d.", errCode);
205f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
206f6603c60Sopenharmony_ci    }
207f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeSetMetaDataNull success.");
208f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
209f6603c60Sopenharmony_ci}
210f6603c60Sopenharmony_ci
211f6603c60Sopenharmony_cistatic napi_value TestNativeGetMetaDataNull(napi_env env, napi_callback_info info)
212f6603c60Sopenharmony_ci{
213f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmapNative = nullptr;
214f6603c60Sopenharmony_ci    OH_Pixelmap_HdrMetadataValue **value = nullptr;
215f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_GetMetadata(pixelmapNative, HDR_METADATA_TYPE, value);
216f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
217f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_GetMetadata failed, errCode: %{public}d.", errCode);
218f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
219f6603c60Sopenharmony_ci    }
220f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeGetMetaDataNull success.");
221f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
222f6603c60Sopenharmony_ci}
223f6603c60Sopenharmony_ci
224f6603c60Sopenharmony_cistatic napi_value TestNativeSetMemoryName(napi_env env, napi_callback_info info)
225f6603c60Sopenharmony_ci{
226f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmap = nullptr;
227f6603c60Sopenharmony_ci    char name[] = "testName";
228f6603c60Sopenharmony_ci    size_t len = strlen(name);
229f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_SetMemoryName(pixelmap, name, &len);
230f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
231f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_SetMemoryName failed, errCode: %{public}d.", errCode);
232f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
233f6603c60Sopenharmony_ci    }
234f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeSetMemoryName success.");
235f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
236f6603c60Sopenharmony_ci}
237f6603c60Sopenharmony_ci
238f6603c60Sopenharmony_cistatic napi_value TestNativeGetArgbPixels(napi_env env, napi_callback_info info)
239f6603c60Sopenharmony_ci{
240f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelMap = nullptr;
241f6603c60Sopenharmony_ci    size_t dataSize = ARGB_8888_BYTES;
242f6603c60Sopenharmony_ci    uint8_t result[ARGB_8888_BYTES];
243f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_GetArgbPixels(pixelMap, result, &dataSize);
244f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
245f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_GetArgbPixels failed, errCode: %{public}d.", errCode);
246f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
247f6603c60Sopenharmony_ci    }
248f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeGetArgbPixels success.");
249f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
250f6603c60Sopenharmony_ci}
251f6603c60Sopenharmony_ci
252f6603c60Sopenharmony_cistatic napi_value TestNativeGetColorSpaceNative(napi_env env, napi_callback_info info)
253f6603c60Sopenharmony_ci{
254f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmap = nullptr;
255f6603c60Sopenharmony_ci    OH_NativeColorSpaceManager *getColorSpaceNative = nullptr;
256f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_GetColorSpaceNative(pixelmap, &getColorSpaceNative);
257f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
258f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_GetColorSpaceNative failed, errCode: %{public}d.", errCode);
259f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
260f6603c60Sopenharmony_ci    }
261f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeGetColorSpaceNative success.");
262f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
263f6603c60Sopenharmony_ci}
264f6603c60Sopenharmony_ci
265f6603c60Sopenharmony_cistatic napi_value TestNativeSetColorSpaceNative(napi_env env, napi_callback_info info)
266f6603c60Sopenharmony_ci{
267f6603c60Sopenharmony_ci    OH_PixelmapNative *pixelmap = nullptr;
268f6603c60Sopenharmony_ci    OH_NativeColorSpaceManager *setColorSpaceNative = nullptr;
269f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_SetColorSpaceNative(pixelmap, setColorSpaceNative);
270f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
271f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_SetColorSpaceNative failed, errCode: %{public}d.", errCode);
272f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
273f6603c60Sopenharmony_ci    }
274f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeSetColorSpaceNative success.");
275f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
276f6603c60Sopenharmony_ci}
277f6603c60Sopenharmony_ci
278f6603c60Sopenharmony_cistatic napi_value TestNativeSetGetSrcPixelFormat(napi_env env, napi_callback_info info)
279f6603c60Sopenharmony_ci{
280f6603c60Sopenharmony_ci    OH_Pixelmap_InitializationOptions *ops = nullptr;
281f6603c60Sopenharmony_ci    OH_PixelmapInitializationOptions_Create(&ops);
282f6603c60Sopenharmony_ci    int32_t srcpixelFormat = 0;
283f6603c60Sopenharmony_ci    OH_PixelmapInitializationOptions_SetSrcPixelFormat(ops, 1);
284f6603c60Sopenharmony_ci    OH_PixelmapInitializationOptions_GetSrcPixelFormat(ops, &srcpixelFormat);
285f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapInitializationOptions_Release(ops);
286f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
287f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_SetGetSrcPixelFormat failed, errCode: %{public}d.", errCode);
288f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
289f6603c60Sopenharmony_ci    }
290f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeSetGetSrcPixelFormat success.");
291f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
292f6603c60Sopenharmony_ci}
293f6603c60Sopenharmony_ci
294f6603c60Sopenharmony_cistatic napi_value TestNativeCreateEmptyPixelmap(napi_env env, napi_callback_info info)
295f6603c60Sopenharmony_ci{
296f6603c60Sopenharmony_ci    OH_Pixelmap_InitializationOptions *options = nullptr;
297f6603c60Sopenharmony_ci    OH_PixelmapNative **pixelmap = nullptr;
298f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_CreateEmptyPixelmap(options, pixelmap);
299f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
300f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_CreateEmptyPixelmap failed, errCode: %{public}d.", errCode);
301f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
302f6603c60Sopenharmony_ci    }
303f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeCreateEmptyPixelmap success.");
304f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
305f6603c60Sopenharmony_ci}
306f6603c60Sopenharmony_ci
307f6603c60Sopenharmony_cistatic napi_value TestNativeConvertAlphaFormat(napi_env env, napi_callback_info info)
308f6603c60Sopenharmony_ci{
309f6603c60Sopenharmony_ci    OH_PixelmapNative* srcpixelmap = nullptr;
310f6603c60Sopenharmony_ci    OH_PixelmapNative* dstpixelmap = nullptr;
311f6603c60Sopenharmony_ci    const bool isPremul = false;
312f6603c60Sopenharmony_ci    Image_ErrorCode errCode = OH_PixelmapNative_ConvertAlphaFormat(srcpixelmap, dstpixelmap, isPremul);
313f6603c60Sopenharmony_ci    if (errCode != IMAGE_BAD_PARAMETER) {
314f6603c60Sopenharmony_ci        OH_LOG_ERROR(LOG_APP, "OH_PixelmapNative_ConvertAlphaFormat failed, errCode: %{public}d.", errCode);
315f6603c60Sopenharmony_ci        return getJsResult(env, errCode);
316f6603c60Sopenharmony_ci    }
317f6603c60Sopenharmony_ci    OH_LOG_INFO(LOG_APP, "ImagePixelmapNativeCTest TestNativeConvertAlphaFormat success.");
318f6603c60Sopenharmony_ci    return getJsResult(env, IMAGE_SUCCESS);
319f6603c60Sopenharmony_ci}
320f6603c60Sopenharmony_ci
321f6603c60Sopenharmony_cistatic void setInt32NamedProperty(napi_env env, napi_value object, const char *utf8name, uint32_t value)
322f6603c60Sopenharmony_ci{
323f6603c60Sopenharmony_ci    napi_value tmp;
324f6603c60Sopenharmony_ci    napi_create_int32(env, value, &tmp);
325f6603c60Sopenharmony_ci    napi_set_named_property(env, object, utf8name, tmp);
326f6603c60Sopenharmony_ci}
327f6603c60Sopenharmony_ci
328f6603c60Sopenharmony_cistatic bool CheckVpe()
329f6603c60Sopenharmony_ci{
330f6603c60Sopenharmony_ci    void* handle = dlopen(VPE_SO_NAME, RTLD_LAZY);
331f6603c60Sopenharmony_ci    if (handle == nullptr) {
332f6603c60Sopenharmony_ci        OH_LOG_INFO(LOG_APP, "CheckVpe failed");
333f6603c60Sopenharmony_ci        return false;
334f6603c60Sopenharmony_ci    }
335f6603c60Sopenharmony_ci    dlclose(handle);
336f6603c60Sopenharmony_ci    handle = nullptr;
337f6603c60Sopenharmony_ci    return true;
338f6603c60Sopenharmony_ci}
339f6603c60Sopenharmony_ci
340f6603c60Sopenharmony_ciEXTERN_C_START
341f6603c60Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports)
342f6603c60Sopenharmony_ci{
343f6603c60Sopenharmony_ci    napi_property_descriptor desc[] = {
344f6603c60Sopenharmony_ci        {"testCreatePixelMapWithStrideAbnormal", nullptr, TestCreatePixelMapWithStrideAbnormal, nullptr, nullptr,
345f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
346f6603c60Sopenharmony_ci        {"testInitializationOptionsSetRowStrideNormal", nullptr, TestInitializationOptionsSetRowStrideNormal, nullptr,
347f6603c60Sopenharmony_ci         nullptr, nullptr, napi_default, nullptr},
348f6603c60Sopenharmony_ci        {"testNativeScaleWithAntiAliasingAbnormal", nullptr, TestNativeScaleWithAntiAliasingAbnormal, nullptr, nullptr,
349f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
350f6603c60Sopenharmony_ci        {"testScaleWithAntiAliasingAbnormal", nullptr, TestScaleWithAntiAliasingAbnormal, nullptr, nullptr,
351f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
352f6603c60Sopenharmony_ci        {"testNativeGetNativeBufferAbnormal", nullptr, TestNativeGetNativeBufferAbnormal, nullptr, nullptr,
353f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
354f6603c60Sopenharmony_ci        {"testNativeSetMetaDataNull", nullptr, TestNativeSetMetaDataNull, nullptr, nullptr,
355f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
356f6603c60Sopenharmony_ci        {"testNativeSetMemoryName", nullptr, TestNativeSetMemoryName, nullptr, nullptr,
357f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
358f6603c60Sopenharmony_ci        {"testNativeGetArgbPixels", nullptr, TestNativeGetArgbPixels, nullptr, nullptr,
359f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
360f6603c60Sopenharmony_ci        {"testNativeGetColorSpaceNative", nullptr, TestNativeGetColorSpaceNative, nullptr, nullptr,
361f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
362f6603c60Sopenharmony_ci        {"testNativeSetColorSpaceNative", nullptr, TestNativeSetColorSpaceNative, nullptr, nullptr,
363f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
364f6603c60Sopenharmony_ci        {"testNativeGetMetaDataNull", nullptr, TestNativeGetMetaDataNull, nullptr, nullptr,
365f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
366f6603c60Sopenharmony_ci        {"testNativeSetGetSrcPixelFormat", nullptr, TestNativeSetGetSrcPixelFormat, nullptr, nullptr,
367f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
368f6603c60Sopenharmony_ci        {"testNativeCreateEmptyPixelmap", nullptr, TestNativeCreateEmptyPixelmap, nullptr,
369f6603c60Sopenharmony_ci         nullptr, nullptr, napi_default, nullptr},
370f6603c60Sopenharmony_ci        {"testNativeConvertAlphaFormat", nullptr, TestNativeConvertAlphaFormat, nullptr, nullptr,
371f6603c60Sopenharmony_ci         nullptr, napi_default, nullptr},
372f6603c60Sopenharmony_ci    };
373f6603c60Sopenharmony_ci    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
374f6603c60Sopenharmony_ci    return exports;
375f6603c60Sopenharmony_ci}
376f6603c60Sopenharmony_ciEXTERN_C_END
377f6603c60Sopenharmony_ci
378f6603c60Sopenharmony_cistatic napi_module demoModule = {
379f6603c60Sopenharmony_ci    .nm_version = 1,
380f6603c60Sopenharmony_ci    .nm_flags = 0,
381f6603c60Sopenharmony_ci    .nm_filename = nullptr,
382f6603c60Sopenharmony_ci    .nm_register_func = Init,
383f6603c60Sopenharmony_ci    .nm_modname = "entry",
384f6603c60Sopenharmony_ci    .nm_priv = ((void *)0),
385f6603c60Sopenharmony_ci    .reserved = {0},
386f6603c60Sopenharmony_ci};
387f6603c60Sopenharmony_ci
388f6603c60Sopenharmony_ciextern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }