xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/aeis/eis_loader.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * algo_loader.cpp - The dynamic loads algorithm library
3  *
4  *  Copyright (c) 2021 Rockchip Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * Author: Cody Xie <cody.xie@rock-chips.com>
19  */
20 #include "eis_loader.h"
21 
22 #include <dlfcn.h>
23 
24 #include <string>
25 
26 #include "dvs_app.h"
27 #include "rk_aiq_mems_sensor.h"
28 #include "xcam_log.h"
29 
30 namespace RkCam {
31 
32 const static std::string DvsLibraryName = "libdvs_gyro.so";
33 
~DvsLibrary()34 DvsLibrary::~DvsLibrary() {
35     if (handle_ != nullptr) {
36         ::dlclose(handle_);
37     }
38 }
39 
Init()40 bool DvsLibrary::Init() {
41     handle_ = ::dlopen(DvsLibraryName.c_str(), RTLD_LAZY);
42     if (handle_ == nullptr) {
43         return false;
44     }
45     return true;
46 }
47 
LoadSymbols()48 bool DvsLibrary::LoadSymbols() {
49     char* error;
50 
51     ops_.RegisterRemap = (dvsRegisterRemap)dlsym(handle_, "dvsRegisterRemap");
52     error              = dlerror();
53     if (error != NULL) {
54         LOGE("Failed to resolve symbol dvsRegisterRemap: %s", error);
55         goto error_out;
56     }
57 
58     ops_.Prepare = (dvsPrepare)dlsym(handle_, "dvsPrepare");
59     error        = dlerror();
60     if (error != NULL) {
61         LOGE("Failed to resolve symbol dvsPrepare: %s", error);
62         goto error_out;
63     }
64 
65     ops_.GetMeshSize = (getMeshSize)dlsym(handle_, "getMeshSize");
66     error            = dlerror();
67     if (error != NULL) {
68         LOGE("Failed to resolve symbol getMeshSize: %s", error);
69         goto error_out;
70     }
71 
72     ops_.GetOriginalMeshXY = (getOriginalMeshXY)dlsym(handle_, "getOriginalMeshXY");
73     error            = dlerror();
74     if (error != NULL) {
75         LOGE("Failed to resolve symbol getOriginalMeshXY: %s", error);
76         goto error_out;
77     }
78 
79     ops_.PutImageFrame = (dvsPutImageFrame)dlsym(handle_, "dvsPutImageFrame");
80     error              = dlerror();
81     if (error != NULL) {
82         LOGE("Failed to resolve symbol dvsPutImageFrame: %s", error);
83         goto error_out;
84     }
85 
86     ops_.PutMesh = (dvsPutMesh)dlsym(handle_, "dvsPutMesh");
87     error        = dlerror();
88     if (error != NULL) {
89         LOGE("Failed to resolve symbol dvsPutMesh: %s", error);
90         goto error_out;
91     }
92 
93     ops_.PutImuFrame = (dvsPutImuFrame)dlsym(handle_, "dvsPutImuFrame");
94     error            = dlerror();
95     if (error != NULL) {
96         LOGE("Failed to resolve symbol dvsPutImuFrame: %s", error);
97         goto error_out;
98     }
99 
100     ops_.InitFromXmlFile = (dvsInitFromXmlFile)dlsym(handle_, "dvsInitFromXmlFile");
101     error                = dlerror();
102     if (error != NULL) {
103         LOGE("Failed to resolve symbol dvsInitFromXmlFile: %s", error);
104         goto error_out;
105     }
106 
107     ops_.InitParams = (dvsInitParams)dlsym(handle_, "dvsInitParams");
108     error           = dlerror();
109     if (error != NULL) {
110         LOGE("Failed to resolve symbol dvsInitParams: %s", error);
111         goto error_out;
112     }
113 
114     ops_.Start = (dvsStart)dlsym(handle_, "dvsStart");
115     error      = dlerror();
116     if (error != NULL) {
117         LOGE("Failed to resolve symbol dvsStart: %s", error);
118         goto error_out;
119     }
120 
121     ops_.RequestStop = (dvsRequestStop)dlsym(handle_, "dvsRequestStop");
122     error            = dlerror();
123     if (error != NULL) {
124         LOGE("Failed to resolve symbol dvsRequestStop: %s", error);
125         goto error_out;
126     }
127 
128     ops_.DeInit = (dvsDeinit)dlsym(handle_, "dvsDeinit");
129     error       = dlerror();
130     if (error != NULL) {
131         LOGE("Failed to resolve symbol dvsDeinit: %s", error);
132         goto error_out;
133     }
134 
135     return true;
136 error_out:
137     dlclose(handle_);
138     handle_ = nullptr;
139     return false;
140 }
141 
GetOps()142 DvsOps* DvsLibrary::GetOps() { return &ops_; }
143 
144 }  // namespace RkCam
145 
146