+
+
+ void DfsAdaptor::Bind()
+ {
+ LOGI("ENTER");
+
+ dictionary *dict = iniparser_load(BACKEND_PATH_INI_FILENAME);
+ if (!dict) {
+ throw std::invalid_argument("invalid backend path ini");
+ }
+
+ std::string adaptorName = std::string(iniparser_getstring(dict, "DFS backend:type", NULL));
+ iniparser_freedict(dict);
+
+ if (adaptorName.empty()) {
+ throw std::runtime_error("not supported dfs backend");
+ }
+
+ std::string adaptorLibName = "libdfs-" + adaptorName + ".so";
+
+ mDfsAdaptor = dlopen(adaptorLibName.c_str(), RTLD_NOW);
+ LOGI("%s DfsAdaptor: %p", adaptorLibName.c_str(), mDfsAdaptor);
+
+ if (!mDfsAdaptor) {
+ LOGE("Failed to open %s: %s", adaptorLibName.c_str(), dlerror());
+ throw std::runtime_error(adaptorLibName.c_str());
+ }
+
+ dlerror(); /* clear any old error conditions */
+ init_t *AdaptorInit = (init_t*)dlsym(mDfsAdaptor, "AdaptorInit");
+ char *error = dlerror();
+ if (error || !AdaptorInit) {
+ LOGE("dlsym returns %p and error %s", AdaptorInit, error ? error : "none");
+ dlclose(mDfsAdaptor);
+ mDfsAdaptor = nullptr;
+ throw std::runtime_error(adaptorLibName.c_str());
+ }
+
+ mDfsAdaptorHandle = AdaptorInit();
+ if (!mDfsAdaptorHandle) {
+ LOGE("Failed to AdaptorInit");
+ dlclose(mDfsAdaptor);
+ mDfsAdaptor = nullptr;
+ throw std::runtime_error(adaptorLibName.c_str());
+ }
+
+ LOGI("LEAVE");
+ }
+
+ void DfsAdaptor::Unbind()
+ {
+ LOGI("ENTER");
+
+ if (mDfsAdaptor) {
+ destroy_t *adaptorDestroy = (destroy_t*)dlsym(mDfsAdaptor, "AdaptorDestroy");
+ adaptorDestroy(mDfsAdaptorHandle);
+ dlclose(mDfsAdaptor);
+ mDfsAdaptor = mDfsAdaptorHandle = nullptr;
+ }
+
+ LOGI("LEAVE");
+ }
+
+ void DfsAdaptor::Initialize(DfsParameter& param, size_t width, size_t height,
+ size_t minDisp, size_t maxDisp)
+ {
+ LOGI("ENTER");
+
+ CHECK_INSTANCE(mDfsAdaptorHandle);
+
+ mDfsAdaptorHandle->Initialize(param, width, height, minDisp, maxDisp);
+
+ LOGI("LEAVE");
+ }
+
+ void DfsAdaptor::Run(DfsData& base, DfsData& extra)
+ {
+ LOGI("ENTER");
+
+ CHECK_INSTANCE(mDfsAdaptorHandle);
+
+ mDfsAdaptorHandle->Run(base, extra);
+
+ LOGI("LEAVE");
+ }
+
+ DfsData& DfsAdaptor::GetDepthData()
+ {
+ LOGI("ENTER");
+
+ CHECK_INSTANCE(mDfsAdaptorHandle);
+
+ return mDfsAdaptorHandle->GetDepthData();
+
+ LOGI("LEAVE");
+ }