Selaa lähdekoodia

text-freetype2: Defer loading of plugin until source created

Helps significantly boost initialization time.
jp9000 9 vuotta sitten
vanhempi
sitoutus
53eb817d43
1 muutettua tiedostoa jossa 23 lisäystä ja 9 poistoa
  1. 23 9
      plugins/text-freetype2/text-freetype2.c

+ 23 - 9
plugins/text-freetype2/text-freetype2.c

@@ -50,24 +50,34 @@ static struct obs_source_info freetype2_source_info = {
 	.get_properties = ft2_source_properties,
 };
 
-bool obs_module_load()
+static bool plugin_initialized = false;
+
+static void init_plugin(void)
 {
-	char *config_dir = obs_module_config_path(NULL);
-	if (config_dir) {
-		os_mkdirs(config_dir);
-		bfree(config_dir);
-	}
+	if (plugin_initialized)
+		return;
 
 	FT_Init_FreeType(&ft2_lib);
 
 	if (ft2_lib == NULL) {
 		blog(LOG_WARNING, "FT2-text: Failed to initialize FT2.");
-		return false;
+		return;
 	}
 
 	if (!load_cached_os_font_list())
 		load_os_font_list();
 
+	plugin_initialized = true;
+}
+
+bool obs_module_load()
+{
+	char *config_dir = obs_module_config_path(NULL);
+	if (config_dir) {
+		os_mkdirs(config_dir);
+		bfree(config_dir);
+	}
+
 	obs_register_source(&freetype2_source_info);
 
 	return true;
@@ -75,8 +85,10 @@ bool obs_module_load()
 
 void obs_module_unload(void)
 {
-	free_os_font_list();
-	FT_Done_FreeType(ft2_lib);
+	if (plugin_initialized) {
+		free_os_font_list();
+		FT_Done_FreeType(ft2_lib);
+	}
 }
 
 static const char *ft2_source_get_name(void *unused)
@@ -442,6 +454,8 @@ static void *ft2_source_create(obs_data_t *settings, obs_source_t *source)
 	obs_data_t *font_obj = obs_data_create();
 	srcdata->src = source;
 
+	init_plugin();
+
 	srcdata->font_size = 32;
 
 	obs_data_set_default_string(font_obj, "face", DEFAULT_FACE);