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); }