1 /*
2 * Copyright (C) 2025 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 "core/common/ai/text_translation_loader.h"
17
18 #include <dlfcn.h>
19
20 #include "base/log/log_wrapper.h"
21
22 namespace OHOS::Ace {
23 namespace {
24 #ifdef __aarch64__
25 constexpr char AI_TEXT_TRANS_SO_PATH[] = "system/lib64/libai_text_translation_innerapi.z.so";
26 #else
27 constexpr char AI_TEXT_TRANS_SO_PATH[] = "system/lib/libai_text_translation_innerapi.z.so";
28 #endif
29 } // namespace
30
31 // static
Load()32 std::shared_ptr<TextTranslationLoader> TextTranslationLoader::Load()
33 {
34 auto engLib(std::make_shared<TextTranslationLoader>());
35 return engLib->Init() ? engLib : nullptr;
36 }
37
~TextTranslationLoader()38 TextTranslationLoader::~TextTranslationLoader()
39 {
40 Close();
41 }
42
Init()43 bool TextTranslationLoader::Init()
44 {
45 mLibraryHandle_ = dlopen(AI_TEXT_TRANS_SO_PATH, RTLD_LAZY);
46 if (mLibraryHandle_ == nullptr) {
47 return false;
48 }
49 mCreateTextTranslationInstance_ = (TextTranslationInterface* (*)())dlsym(mLibraryHandle_,
50 "OHOS_ACE_createTextTranslationInstance");
51 mDestoryTextTranslationInstance_ = (void (*)(TextTranslationInterface*))dlsym(
52 mLibraryHandle_, "OHOS_ACE_destroyTextTranslationInstance");
53 if (mCreateTextTranslationInstance_ == nullptr || mDestoryTextTranslationInstance_ == nullptr) {
54 LOGE("Could not find engine interface function in %s", AI_TEXT_TRANS_SO_PATH);
55 Close();
56 return false;
57 }
58 return true;
59 }
60
CreateTextTranslation()61 TextTranslationInstance TextTranslationLoader::CreateTextTranslation()
62 {
63 if (mCreateTextTranslationInstance_ == nullptr || mDestoryTextTranslationInstance_ == nullptr) {
64 return TextTranslationInstance();
65 }
66 return TextTranslationInstance(mCreateTextTranslationInstance_(), [lib = shared_from_this(),
67 destroy = mDestoryTextTranslationInstance_](TextTranslationInterface* e) {
68 destroy(e);
69 });
70 }
71
Close()72 void TextTranslationLoader::Close()
73 {
74 if (mLibraryHandle_ != nullptr) {
75 dlclose(mLibraryHandle_);
76 }
77 mLibraryHandle_ = nullptr;
78 mCreateTextTranslationInstance_ = nullptr;
79 mDestoryTextTranslationInstance_ = nullptr;
80 }
81 } // namespace OHOS::Ace
82