80 const char* p_ndi_runtime = getenv(NDILIB_REDIST_FOLDER);
84 "[NDI] " NDILIB_REDIST_FOLDER
" environment variable not defined. "
85 "Trying fallback folder: %s\n",
90 const size_t path_len = strlen(p_ndi_runtime) + 2 + strlen(NDILIB_LIBRARY_NAME) + 1;
91 char *ndi_path = (
char *)alloca(path_len);
92 strncpy(ndi_path, p_ndi_runtime, path_len - 1);
93 strncat(ndi_path,
"\\", path_len - strlen(ndi_path) - 1);
94 strncat(ndi_path, NDILIB_LIBRARY_NAME, path_len - strlen(ndi_path) - 1);
97 HMODULE hNDILib = LoadLibraryA(ndi_path);
100 const NDIlib_t* (*NDIlib_load)(void) = NULL;
109 "Please install the NewTek NDI Runtimes to use this module from " NDILIB_REDIST_URL
".\n", dlerror());
111 FreeLibrary(hNDILib);
117 const char *lib_cand[3] = {getenv(NDILIB_REDIST_FOLDER) ? getenv(NDILIB_REDIST_FOLDER) :
"",
119 void *hNDILib = NULL;
120 const char *last_err =
"(none)";
121 for (
unsigned int i = 0; i <
sizeof lib_cand /
sizeof lib_cand[0]; i++) {
126 size_t path_len = strlen(lib_cand[i]) + 1 + strlen(NDILIB_LIBRARY_NAME) + 1;
127 char *ndi_path = (
char *)alloca(path_len);
128 strncpy(ndi_path, lib_cand[i], path_len - 1);
129 if (strlen(ndi_path) > 0) {
130 strncat(ndi_path,
"/", path_len - strlen(ndi_path) - 1);
132 strncat(ndi_path, NDILIB_LIBRARY_NAME, path_len - strlen(ndi_path) - 1);
134 hNDILib = dlopen(ndi_path, RTLD_LOCAL | RTLD_LAZY);
138 last_err = dlerror();
140 "[NDI] Failed to open the library: %s\n", last_err);
144 const NDIlib_t* (*NDIlib_load)(void) = NULL;
152 "[NDI] Failed to open the library: %s\n", last_err);
154 if (strlen(NDILIB_REDIST_URL) != 0) {
155 log_msg(
LOG_LEVEL_ERROR,
"[NDI] Please re-install the NewTek NDI Runtimes from " NDILIB_REDIST_URL
" to use this application.\n");
157 log_msg(
LOG_LEVEL_ERROR,
"[NDI] Please install " NDILIB_LIBRARY_NAME
" from the NewTek NDI SDK either to system libraries' path or set "
158 NDILIB_REDIST_FOLDER
" environment "
159 "variable to a path containing the libndi.so file (eg. \"export " NDILIB_REDIST_FOLDER
"=<NDI_SDK_PATH>/lib/x86_64-linux-gnu\").\n");