• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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