1 /*
2  * Copyright (c) 2024 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 #include <js_native_api.h>
17 #include "napi/native_api.h"
18 #include "native_effect/effect_filter.h"
19 #include "native_effect/effect_types.h"
20 #include "hilog/log.h"
21 
22 #define SUCCESS 0
23 #define FAIL (-1)
24 
OHFilterCreateEffect(napi_env env, napi_callback_info info)25 static napi_value OHFilterCreateEffect(napi_env env, napi_callback_info info)
26 {
27     napi_value result = nullptr;
28     OH_PixelmapNative *pixmap = nullptr;
29     OH_PixelmapNative **pixMap = &pixmap;
30     OH_Filter *filter = nullptr;
31     EffectErrorCode effectErrorCode = OH_Filter_CreateEffect(*pixMap, &filter);
32     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
33         napi_create_int32(env, SUCCESS, &result);
34     } else {
35         napi_create_int32(env, FAIL, &result);
36     }
37     return result;
38 }
39 
OHFilterInvert(napi_env env, napi_callback_info info)40 static napi_value OHFilterInvert(napi_env env, napi_callback_info info)
41 {
42     napi_value result = nullptr;
43     OH_Filter *filter = nullptr;
44     EffectErrorCode effectErrorCode = OH_Filter_Invert(filter);
45     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
46         napi_create_int32(env, SUCCESS, &result);
47     } else {
48         napi_create_int32(env, FAIL, &result);
49     }
50     return result;
51 }
52 
OHFilterBlur(napi_env env, napi_callback_info info)53 static napi_value OHFilterBlur(napi_env env, napi_callback_info info)
54 {
55     napi_value result = nullptr;
56     OH_Filter *filter = nullptr;
57     EffectErrorCode effectErrorCode = OH_Filter_Blur(filter, 0.5f);
58     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
59         napi_create_int32(env, SUCCESS, &result);
60     } else {
61         napi_create_int32(env, FAIL, &result);
62     }
63     return result;
64 }
65 
OHFilterGrayScale(napi_env env, napi_callback_info info)66 static napi_value OHFilterGrayScale(napi_env env, napi_callback_info info)
67 {
68     napi_value result = nullptr;
69     OH_Filter *filter = nullptr;
70     EffectErrorCode effectErrorCode = OH_Filter_GrayScale(filter);
71     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
72         napi_create_int32(env, SUCCESS, &result);
73     } else {
74         napi_create_int32(env, FAIL, &result);
75     }
76     return result;
77 }
78 
OHFilterBrighten(napi_env env, napi_callback_info info)79 static napi_value OHFilterBrighten(napi_env env, napi_callback_info info)
80 {
81     napi_value result = nullptr;
82     OH_Filter *filter = nullptr;
83     EffectErrorCode effectErrorCode = OH_Filter_Brighten(filter, 0.5);
84     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
85         napi_create_int32(env, SUCCESS, &result);
86     } else {
87         napi_create_int32(env, FAIL, &result);
88     }
89     return result;
90 }
91 
OHFilterSetColorMatrix(napi_env env, napi_callback_info info)92 static napi_value OHFilterSetColorMatrix(napi_env env, napi_callback_info info)
93 {
94     napi_value result = nullptr;
95     OH_Filter *filter = nullptr;
96     OH_Filter_ColorMatrix matrix {
97         -1.0, 0, 0, 0, 1,
98         0, -1.0, 0, 0, 1,
99         0, 0, -1.0, 0, 1,
100         0, 0, 0, 1, 0
101     };
102     EffectErrorCode effectErrorCode = OH_Filter_SetColorMatrix(filter, &matrix);
103     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
104         napi_create_int32(env, SUCCESS, &result);
105     } else {
106         napi_create_int32(env, FAIL, &result);
107     }
108     return result;
109 }
110 
OHFilterGetEffectPixelMap(napi_env env, napi_callback_info info)111 static napi_value OHFilterGetEffectPixelMap(napi_env env, napi_callback_info info)
112 {
113     napi_value result = nullptr;
114     OH_PixelmapNative *pixmap = nullptr;
115     OH_Filter *filter = nullptr;
116     EffectErrorCode effectErrorCode = OH_Filter_GetEffectPixelMap(filter, &pixmap);
117     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
118         napi_create_int32(env, SUCCESS, &result);
119     } else {
120         napi_create_int32(env, FAIL, &result);
121     }
122     return result;
123 }
124 
OHFilterRelease(napi_env env, napi_callback_info info)125 static napi_value OHFilterRelease(napi_env env, napi_callback_info info)
126 {
127     napi_value result = nullptr;
128     OH_Filter *filter = nullptr;
129     EffectErrorCode effectErrorCode = OH_Filter_Release(filter);
130     if (effectErrorCode != EffectErrorCode::EFFECT_SUCCESS) {
131         napi_create_int32(env, SUCCESS, &result);
132     } else {
133         napi_create_int32(env, FAIL, &result);
134     }
135     return result;
136 }
137 
138 EXTERN_C_START
Init(napi_env env, napi_value exports)139 static napi_value Init(napi_env env, napi_value exports)
140 {
141     napi_property_descriptor desc[] = {
142         {"oHFilterCreateEffect", nullptr, OHFilterCreateEffect, nullptr, nullptr, nullptr,
143          napi_default, nullptr},
144         {"oHFilterInvert", nullptr, OHFilterInvert, nullptr, nullptr, nullptr,
145          napi_default, nullptr},
146         {"oHFilterBlur", nullptr, OHFilterBlur, nullptr, nullptr, nullptr,
147          napi_default, nullptr},
148         {"oHFilterGrayScale", nullptr, OHFilterGrayScale, nullptr, nullptr, nullptr,
149          napi_default, nullptr},
150         {"oHFilterBrighten", nullptr, OHFilterBrighten, nullptr, nullptr, nullptr,
151          napi_default, nullptr},
152         {"oHFilterSetColorMatrix", nullptr, OHFilterSetColorMatrix, nullptr, nullptr, nullptr,
153          napi_default, nullptr},
154         {"oHFilterGetEffectPixelMap", nullptr, OHFilterGetEffectPixelMap, nullptr, nullptr, nullptr,
155          napi_default, nullptr},
156         {"oHFilterRelease", nullptr, OHFilterRelease, nullptr, nullptr, nullptr,
157          napi_default, nullptr},
158     };
159     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
160     return exports;
161 }
162 
163 EXTERN_C_END
164 
165 static napi_module demoModule = {
166     .nm_version = 1,
167     .nm_flags = 0,
168     .nm_filename = nullptr,
169     .nm_register_func = Init,
170     .nm_modname = "nativeEffectNdk",
171     .nm_priv = ((void *)0),
172     .reserved = {0},
173 };
174 
RegisterEntryModule(void)175 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }