mirror of
https://github.com/Xaymar/obs-StreamFX
synced 2024-11-24 04:15:11 +00:00
nvidia/cv: Prefer AddDllDirectory over SetDefaultDllDirectories
This commit is contained in:
parent
a56f3816a1
commit
6983be457a
2 changed files with 36 additions and 5 deletions
|
@ -67,6 +67,13 @@
|
||||||
streamfx::nvidia::cv::cv::~cv()
|
streamfx::nvidia::cv::cv::~cv()
|
||||||
{
|
{
|
||||||
D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this);
|
D_LOG_DEBUG("Finalizing... (Addr: 0x%" PRIuPTR ")", this);
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
// Remove the DLL directory from the library loader paths.
|
||||||
|
if (_extra != nullptr) {
|
||||||
|
RemoveDllDirectory(reinterpret_cast<DLL_DIRECTORY_COOKIE>(_extra));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
streamfx::nvidia::cv::cv::cv()
|
streamfx::nvidia::cv::cv::cv()
|
||||||
|
@ -149,13 +156,28 @@ streamfx::nvidia::cv::cv::cv()
|
||||||
// Try and load any available NvCVImage library.
|
// Try and load any available NvCVImage library.
|
||||||
for (auto path : lib_paths) {
|
for (auto path : lib_paths) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// On platforms where it is possible, modify the linker directories.
|
// Add the DLL directory to the library loader paths, if possible.
|
||||||
SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
|
||||||
DLL_DIRECTORY_COOKIE ck = AddDllDirectory(vfx_sdk_path.wstring().c_str());
|
DLL_DIRECTORY_COOKIE ck = AddDllDirectory(vfx_sdk_path.wstring().c_str());
|
||||||
|
_extra = reinterpret_cast<void*>(ck);
|
||||||
|
if (ck == 0) {
|
||||||
|
DWORD ec = GetLastError();
|
||||||
|
std::string error;
|
||||||
|
{
|
||||||
|
LPWSTR str;
|
||||||
|
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
|
||||||
|
| FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
nullptr, ec, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
|
||||||
|
reinterpret_cast<LPWSTR>(&str), 0, nullptr);
|
||||||
|
error = ::streamfx::util::platform::native_to_utf8(std::wstring(str));
|
||||||
|
LocalFree(str);
|
||||||
|
}
|
||||||
|
D_LOG_WARNING("Failed to add '%'s to the library loader paths with error: %s (Code %" PRIu32 ")",
|
||||||
|
vfx_sdk_path.string().c_str(), error.c_str(), ec);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Try to load it directly first, it may be on the search path already.
|
||||||
try {
|
try {
|
||||||
// Try to load it directly first, it may be on the search path already.
|
|
||||||
_library = ::streamfx::util::library::load(std::string_view(LIB_NAME));
|
_library = ::streamfx::util::library::load(std::string_view(LIB_NAME));
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
auto pathu8 = util::platform::native_to_utf8(path / LIB_NAME);
|
auto pathu8 = util::platform::native_to_utf8(path / LIB_NAME);
|
||||||
|
@ -165,11 +187,17 @@ streamfx::nvidia::cv::cv::cv()
|
||||||
D_LOG_WARNING("Failed to load '%s' from '%s'.", LIB_NAME, pathu8.string().c_str());
|
D_LOG_WARNING("Failed to load '%s' from '%s'.", LIB_NAME, pathu8.string().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_library)
|
|
||||||
|
// If we were successful at loading it, break out.
|
||||||
|
if (_library) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
RemoveDllDirectory(ck);
|
// Remove the DLL directory from the library loader paths if we added it.
|
||||||
|
if (ck != 0) {
|
||||||
|
RemoveDllDirectory(ck);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,6 +209,9 @@ namespace streamfx::nvidia::cv {
|
||||||
|
|
||||||
class cv {
|
class cv {
|
||||||
std::shared_ptr<::streamfx::util::library> _library;
|
std::shared_ptr<::streamfx::util::library> _library;
|
||||||
|
#ifdef WIN32
|
||||||
|
void* _extra;
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~cv();
|
~cv();
|
||||||
|
|
Loading…
Reference in a new issue