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 25static 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 40static 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 53static 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 66static 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 79static 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 92static 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 111static 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 125static 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 138EXTERN_C_START 139static 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 163EXTERN_C_END 164 165static 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 175extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }