浏览代码

libobs: Differentiate between plugin load failures

It's important to differentiate whether a plugin fails to open (dl_open
returning NULL, being compiled for a newer libobs, etc) or whether it
opened correctly, but failed to initialize (returned NULL during
obs_module_load()).
With that, we can also create disabled modules for modules that fail to
open, which in the future should enable better user communication in the
UI (besides the module_load_failure_info).
Sebastian Beckmann 1 月之前
父节点
当前提交
a4b62d26be
共有 2 个文件被更改,包括 10 次插入4 次删除
  1. 7 2
      libobs/obs-module.c
  2. 3 2
      libobs/obs.h

+ 7 - 2
libobs/obs-module.c

@@ -524,12 +524,16 @@ static void load_all_callback(void *param, const struct obs_module_info2 *info)
 		return;
 	case MODULE_FAILED_TO_OPEN:
 		blog(LOG_DEBUG, "Failed to load module file '%s', module failed to open", info->bin_path);
+		obs_create_disabled_module(&disabled_module, info->bin_path, info->data_path,
+					   OBS_MODULE_FAILED_TO_OPEN);
 		return;
 	case MODULE_ERROR:
-		blog(LOG_DEBUG, "Failed to load module file '%s'", info->bin_path);
+		blog(LOG_DEBUG, "Failed to load module file '%s' (unknown error)", info->bin_path);
 		goto load_failure;
 	case MODULE_INCOMPATIBLE_VER:
 		blog(LOG_DEBUG, "Failed to load module file '%s', incompatible version", info->bin_path);
+		obs_create_disabled_module(&disabled_module, info->bin_path, info->data_path,
+					   OBS_MODULE_FAILED_TO_OPEN);
 		goto load_failure;
 	case MODULE_HARDCODED_SKIP:
 		return;
@@ -537,7 +541,8 @@ static void load_all_callback(void *param, const struct obs_module_info2 *info)
 
 	if (!obs_init_module(module)) {
 		free_module(module);
-		obs_create_disabled_module(&disabled_module, info->bin_path, info->data_path, OBS_MODULE_ERROR);
+		obs_create_disabled_module(&disabled_module, info->bin_path, info->data_path,
+					   OBS_MODULE_FAILED_TO_INITIALIZE);
 	}
 
 	UNUSED_PARAMETER(param);

+ 3 - 2
libobs/obs.h

@@ -165,11 +165,12 @@ enum obs_bounds_type {
  */
 enum obs_module_load_state {
 	OBS_MODULE_INVALID,
-	OBS_MODULE_MISSING,
 	OBS_MODULE_ENABLED,
+	OBS_MODULE_MISSING,
 	OBS_MODULE_DISABLED,
 	OBS_MODULE_DISABLED_SAFE,
-	OBS_MODULE_ERROR
+	OBS_MODULE_FAILED_TO_OPEN,
+	OBS_MODULE_FAILED_TO_INITIALIZE,
 };
 
 struct obs_transform_info {