void obs_module_unload(void) { if (libvlc) libvlc_release_(libvlc); if (libvlc_module) os_dlclose(libvlc_module); }
int obs_load_module(const char *path) { struct obs_module mod; bool (*module_load)(void) = NULL; mod.module = os_dlopen(path); if (!mod.module) return MODULE_FILENOTFOUND; module_load = os_dlsym(mod.module, "module_load"); if (module_load) { if (!module_load()) { os_dlclose(mod.module); return MODULE_ERROR; } } mod.name = bstrdup(path); module_load_exports(&mod, &obs->input_types.da, "inputs", sizeof(struct source_info), get_source_info); module_load_exports(&mod, &obs->filter_types.da, "filters", sizeof(struct source_info), get_source_info); module_load_exports(&mod, &obs->transition_types.da, "transitions", sizeof(struct source_info), get_source_info); module_load_exports(&mod, &obs->output_types.da, "outputs", sizeof(struct output_info), get_output_info); da_push_back(obs->modules, &mod); return MODULE_SUCCESS; }
void obs_module_unload() { if (obs_so) { obs_actual_unload(); os_dlclose(obs_so); obs_so = NULL; } }
void free_module(struct obs_module *mod) { if (!mod) return; if (mod->module) { void (*module_unload)(void); module_unload = os_dlsym(mod->module, "module_unload"); if (module_unload) module_unload(); os_dlclose(mod->module); } bfree(mod->name); }
void free_module(struct obs_module *mod) { if (!mod) return; if (mod->module) { if (mod->free_locale) mod->free_locale(); if (mod->loaded && mod->unload) mod->unload(); os_dlclose(mod->module); } bfree(mod->bin_path); bfree(mod->data_path); bfree(mod); }
void gs_destroy(graphics_t graphics) { if (!graphics) return; while (thread_graphics) gs_leavecontext(); if (graphics->device) { graphics->exports.device_entercontext(graphics->device); graphics->exports.vertexbuffer_destroy(graphics->sprite_buffer); graphics->exports.vertexbuffer_destroy( graphics->immediate_vertbuffer); graphics->exports.device_destroy(graphics->device); } pthread_mutex_destroy(&graphics->mutex); da_free(graphics->matrix_stack); da_free(graphics->viewport_stack); os_dlclose(graphics->module); bfree(graphics); }
bool obs_module_load(void) { obs_so = NULL; bool success; char *obs_browser_path = obs_module_file("obs-browser"); if (obs_browser_path) { obs_so = os_dlopen(obs_browser_path); if (obs_so) { obs_actual_load = os_dlsym(obs_so, "obs_module_load"); obs_actual_unload = os_dlsym(obs_so, "obs_module_unload"); obs_actual_module_set_pointer = os_dlsym(obs_so, "obs_actual_module_so"); if (obs_actual_load && obs_actual_unload && obs_actual_module_set_pointer) { obs_actual_module_set_pointer( obs_module_pointer); if (obs_actual_load()) { goto success; } } } } error: success = false; if (obs_so) os_dlclose(obs_so); success: if (obs_browser_path) bfree(obs_browser_path); return success; }
int obs_load_module(const char *path) { struct obs_module mod; char *plugin_path = find_plugin(path); int errorcode; mod.module = os_dlopen(plugin_path); bfree(plugin_path); if (!mod.module) { blog(LOG_DEBUG, "Module '%s' not found", path); return MODULE_FILE_NOT_FOUND; } errorcode = call_module_load(mod.module, path); if (errorcode != MODULE_SUCCESS) { os_dlclose(mod.module); return errorcode; } mod.name = bstrdup(path); da_push_back(obs->modules, &mod); return MODULE_SUCCESS; }