1 /*
2 * Copyright (c) 2023 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 #define NAPI_VERSION 8
17
18 #include "core/common/ai/image_analyzer_mgr.h"
19 #include "core/common/ai/image_analyzer_default.h"
20 #include "key_event.h"
21
22 namespace OHOS::Ace {
GetInstance()23 ImageAnalyzerMgr& ImageAnalyzerMgr::GetInstance()
24 {
25 static ImageAnalyzerMgr instance;
26 return instance;
27 }
28
ImageAnalyzerMgr()29 ImageAnalyzerMgr::ImageAnalyzerMgr()
30 {
31 auto lib = ImageAnalyzerLoader::Load();
32 if (!lib || (engine_ = lib->CreateImageAnalyzer()) == nullptr) {
33 engine_ = ImageAnalyzerInstance(new ImageAnalyzerDefault, [](ImageAnalyzerInterface* e) {
34 auto* p = reinterpret_cast<ImageAnalyzerDefault*>(e);
35 delete p;
36 });
37 }
38 }
39
IsImageAnalyzerSupported()40 bool ImageAnalyzerMgr::IsImageAnalyzerSupported()
41 {
42 if (engine_) {
43 return engine_->IsImageAnalyzerSupported();
44 }
45 return false;
46 }
47
BuildNodeFunc(void * pixelMap,void * config,ImageAnalyzerInnerConfig * uiConfig,void ** overlayData)48 void ImageAnalyzerMgr::BuildNodeFunc(
49 void* pixelMap, void* config, ImageAnalyzerInnerConfig* uiConfig, void** overlayData)
50 {
51 if (engine_) {
52 return engine_->BuildNodeFunc(pixelMap, config, uiConfig, overlayData);
53 }
54 }
BuildNodeFunc(std::string uri,void * pixelMap,int frameTimestamp,void * config,ImageAnalyzerInnerConfig * uiConfig,void ** overlayData)55 void ImageAnalyzerMgr::BuildNodeFunc(std::string uri, void* pixelMap, int frameTimestamp,
56 void* config, ImageAnalyzerInnerConfig* uiConfig, void** overlayData)
57 {
58 if (engine_) {
59 return engine_->BuildNodeFunc(uri, pixelMap, frameTimestamp, config, uiConfig, overlayData);
60 }
61 }
UpdateImage(void ** overlayData,void * pixelMap,void * config,ImageAnalyzerInnerConfig * uiConfig)62 void ImageAnalyzerMgr::UpdateImage(
63 void** overlayData, void* pixelMap, void* config, ImageAnalyzerInnerConfig* uiConfig)
64 {
65 if (engine_) {
66 return engine_->UpdateImage(overlayData, pixelMap, config, uiConfig);
67 }
68 }
UpdateImage(void ** overlayData,std::string uri,void * pixelMap,int frameTimestamp,void * config,ImageAnalyzerInnerConfig * uiConfig)69 void ImageAnalyzerMgr::UpdateImage(void** overlayData, std::string uri, void* pixelMap,
70 int frameTimestamp, void* config, ImageAnalyzerInnerConfig* uiConfig)
71 {
72 if (engine_) {
73 return engine_->UpdateImage(overlayData, uri, pixelMap, frameTimestamp, config, uiConfig);
74 }
75 }
UpdateConfig(void ** overlayData,void * config)76 void ImageAnalyzerMgr::UpdateConfig(void** overlayData, void* config)
77 {
78 if (engine_) {
79 return engine_->UpdateConfig(overlayData, config);
80 }
81 }
UpdateInnerConfig(void ** overlayData,ImageAnalyzerInnerConfig * config)82 void ImageAnalyzerMgr::UpdateInnerConfig(void** overlayData, ImageAnalyzerInnerConfig* config)
83 {
84 if (engine_) {
85 return engine_->UpdateInnerConfig(overlayData, config);
86 }
87 }
Release(void ** overlayData)88 void ImageAnalyzerMgr::Release(void** overlayData)
89 {
90 if (engine_) {
91 return engine_->Release(overlayData);
92 }
93 }
UpdatePressOverlay(void ** overlayData,ImageAnalyzerInnerConfig * config)94 void ImageAnalyzerMgr::UpdatePressOverlay(void** overlayData, ImageAnalyzerInnerConfig* config)
95 {
96 if (engine_) {
97 return engine_->UpdatePressOverlay(overlayData, config);
98 }
99 }
UpdateOverlayStatus(void ** overlayData,ImageAnalyzerInnerConfig * config)100 void ImageAnalyzerMgr::UpdateOverlayStatus(void** overlayData, ImageAnalyzerInnerConfig* config)
101 {
102 if (engine_) {
103 return engine_->UpdateOverlayStatus(overlayData, config);
104 }
105 }
106
UpdateOverlayActiveStatus(void ** overlayData,bool status)107 void ImageAnalyzerMgr::UpdateOverlayActiveStatus(void** overlayData, bool status)
108 {
109 if (engine_) {
110 return engine_->UpdateOverlayActiveStatus(overlayData, status);
111 }
112 }
113
UpdateAIButtonConfig(void ** overlayData,AIButtonConfig * config)114 void ImageAnalyzerMgr::UpdateAIButtonConfig(void** overlayData, AIButtonConfig* config)
115 {
116 if (engine_) {
117 return engine_->UpdateAIButtonConfig(overlayData, config);
118 }
119 }
120
UpdateKeyEvent(void ** overlayData,void * keyEvent)121 void ImageAnalyzerMgr::UpdateKeyEvent(void** overlayData, void* keyEvent)
122 {
123 if (engine_ && keyEvent != nullptr) {
124 auto* event = static_cast<OHOS::MMI::KeyEvent*>(keyEvent);
125 LOGI("ImageAnalyzerMgr::UpdateKeyEvent event.action: %{public}d, event.code: %{public}d", event->GetKeyAction(),
126 event->GetKeyCode());
127 return engine_->UpdateKeyEvent(overlayData, keyEvent);
128 }
129 }
130 }