diff --git a/libobs/obs-windows.c b/libobs/obs-windows.c index ed06cc3b2a5c46e96e3c4b64e52aac4aa875f840..bcc91bd3664e7f37a32b10242e7e904457d5027f 100644 --- a/libobs/obs-windows.c +++ b/libobs/obs-windows.c @@ -627,3 +627,13 @@ void reset_win32_symbol_paths(void) dstr_free(&path_str); da_free(paths); } + +void initialize_com(void) +{ + CoInitializeEx(0, COINIT_MULTITHREADED); +} + +void uninitialize_com(void) +{ + CoUninitialize(); +} diff --git a/libobs/obs.c b/libobs/obs.c index 33612105e638d505fcd7fcb1e9de6516042e6958..d3ff752fb4d646d5109ac1a314e25f2a8f449cf7 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -718,6 +718,8 @@ static bool obs_init(const char *locale, const char *module_config_path, #ifdef _WIN32 extern void initialize_crash_handler(void); +extern void initialize_com(void); +extern void uninitialize_com(void); #endif static const char *obs_startup_name = "obs_startup"; @@ -735,6 +737,7 @@ bool obs_startup(const char *locale, const char *module_config_path, #ifdef _WIN32 initialize_crash_handler(); + initialize_com(); #endif success = obs_init(locale, module_config_path, store); @@ -803,6 +806,10 @@ void obs_shutdown(void) bfree(obs->locale); bfree(obs); obs = NULL; + +#ifdef _WIN32 + uninitialize_com(); +#endif } bool obs_initialized(void)