static int32_t minpf_post_load_plugin(const char* pluginPath, minpf_post_load_func postLoadFunc)
{
    minpf_plugin_manager* mgr = minpf_get_plugin_manager();

    minpf_exit_func exitFunc = postLoadFunc(pluginPath, &mgr->platformServices);
	if (!exitFunc)
		return -1;

    mgr->exit_functions[mgr->num_exit_functions++] = exitFunc;
    return 0;
}
Пример #2
0
void OPJ_CALLCONV opj_plugin_stop_batch_decode(void)
{
    minpf_plugin_manager* mgr = NULL;
    PLUGIN_STOP_BATCH_DECODE func = NULL;
    if (!pluginInitialized)
        return;

    mgr = minpf_get_plugin_manager();
    if (mgr && mgr->num_libraries > 0) {
        func = (PLUGIN_STOP_BATCH_DECODE)minpf_get_symbol(mgr->dynamic_libraries[0], plugin_stop_batch_decode_method_name);
        if (func) {
            func();
        }
    }
}
int32_t minpf_load_from_path(const char* path, minpf_invoke_service_func func)
{
	minpf_plugin_manager* mgr = minpf_get_plugin_manager();

	if (!path || path[0] == '\0') // Check that the path is non-empty.
		return -1;

	mgr->platformServices.invokeService = func;

	int32_t rc = minpf_load(path);
	if (rc) {
		fprintf(stderr, "Unable to open library %s\n", path);
	}
	return rc;
}
Пример #4
0
uint32_t OPJ_CALLCONV opj_plugin_get_debug_state()
{
    minpf_plugin_manager* mgr = NULL;
    PLUGIN_GET_DEBUG_STATE func = NULL;
    uint32_t rc = OPJ_PLUGIN_STATE_NO_DEBUG;

    if (!pluginInitialized)
        return rc;
    mgr = minpf_get_plugin_manager();
    if (mgr && mgr->num_libraries > 0) {
        func = (PLUGIN_GET_DEBUG_STATE)minpf_get_symbol(mgr->dynamic_libraries[0], plugin_get_debug_state_method_name);
        if (func) {
            rc = func();
        }
    }
    return rc;
}
Пример #5
0
int32_t OPJ_CALLCONV opj_plugin_encode(opj_cparameters_t* encode_parameters,
                                       OPJ_PLUGIN_ENCODE_USER_CALLBACK callback)
{
    minpf_plugin_manager* mgr = NULL;
    PLUGIN_ENCODE func = NULL;
    if (!pluginInitialized)
        return -1;

    userEncodeCallback = callback;
    mgr = minpf_get_plugin_manager();
    if (mgr && mgr->num_libraries > 0) {
        func = (PLUGIN_ENCODE)minpf_get_symbol(mgr->dynamic_libraries[0], plugin_encode_method_name);
        if (func) {
            return func((opj_cparameters_t*)encode_parameters, opj_plugin_internal_encode_callback);
        }
    }
    return -1;
}
Пример #6
0
int32_t OPJ_CALLCONV opj_plugin_decode(opj_decompress_parameters* decode_parameters,
                                       opj_plugin_decode_callback preDecode,
                                       opj_plugin_decode_callback postDecode)
{
    minpf_plugin_manager* mgr = NULL;
    PLUGIN_DECODE func = NULL;
    if (!pluginInitialized)
        return -1;

    userPreDecodeCallback = preDecode;
    userPostDecodeCallback = postDecode;
    mgr = minpf_get_plugin_manager();
    func = NULL;
    if (mgr && mgr->num_libraries > 0) {
        func = (PLUGIN_DECODE)minpf_get_symbol(mgr->dynamic_libraries[0], plugin_decode_method_name);
        if (func) {
            return func((opj_decompress_parameters*)decode_parameters, opj_plugin_internal_decode_callback);
        }
    }
    return -1;
}
static int32_t minpf_load(const char* path)
{
    minpf_post_load_func postLoadFunc = NULL;
    minpf_dynamic_library* lib = NULL;
    int32_t res = 0;

    minpf_plugin_manager* mgr = minpf_get_plugin_manager();
    if (!mgr || mgr->num_libraries == MINPF_MAX_PLUGINS) {
        return -1;
    }
    lib = minpf_load_dynamic_library(path, NULL);
    if (!lib) {
        return -1;
    }
	printf("Plugin %s successfully loaded\n", path);
	postLoadFunc = (minpf_post_load_func)(minpf_get_symbol(lib, "minpf_post_load_plugin"));
    if (!postLoadFunc) {
		free(lib);
        return -1;
    }

	char fullPath[4096];
	if (minpf_get_full_path(path, (void*)postLoadFunc, lib->handle, fullPath, 4096)) {
		printf("Full library path: %s\n", fullPath);
	}
	else {
		return -1;
	}


    mgr->dynamic_libraries[mgr->num_libraries++] = lib;
    auto rc =  minpf_post_load_plugin(fullPath, postLoadFunc);
	if (rc)
		fprintf(stderr, "Plugin %s failed to initialize \n", path);
	else
		fprintf(stdout, "Plugin %s successfully initialized \n", path);
	return rc;

}
int32_t minpf_load_from_dir(const char* directory_path, minpf_invoke_service_func func)
{
    DIR *dir;
    struct dirent* content;
    char libraryPath[MINPF_MAX_PATH_LEN];
    minpf_plugin_manager* mgr = minpf_get_plugin_manager();

    if (!directory_path || directory_path[0] == '\0') // Check that the path is non-empty.
        return -1;

    mgr->platformServices.invokeService = func;

    dir= opendir(directory_path);
    if(!dir) {
        fprintf(stderr,"Unable to open folder %s\n",directory_path);
        return -1;
    }

    int32_t rc = -1;
    while((content=readdir(dir))!=NULL) {

        if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
            continue;

        //ignore files with incorrect extensions
        if (  strcmp(get_filename_ext(content->d_name), minpf_get_dynamic_library_extension()) != 0)
            continue;
        strcpy(libraryPath, directory_path);
        strcat(libraryPath, MINPF_FILE_SEPARATOR);
        strcat(libraryPath, content->d_name);
        if (minpf_load(libraryPath) != 0)
            continue;
        rc = 0;
    }
    auto dir_rc = closedir(dir);
    return rc || dir_rc;
}
int32_t minpf_register_object(const char * id, const minpf_register_params * params)
{
    int error;
    minpf_plugin_api_version v;
    minpf_register_params* existing_plugin_params;
    minpf_plugin_manager* pluginManager = minpf_get_plugin_manager();
    minpf_register_params* registered_params = NULL;

    if (!id || id[0] == '\0' || !params)
        return -1;

    if (!minpf_is_valid_plugin(id, params))
        return -1;


    v = pluginManager->platformServices.version;
    if (v.major != params->version.major)
        return -1;

    // check if plugin is already registered
    existing_plugin_params = (minpf_register_params*)malloc(sizeof(minpf_register_params));
    error = hashmap_get(pluginManager->plugins, id, (void**)(&existing_plugin_params));
    free(existing_plugin_params);
    existing_plugin_params = NULL;
    if (error != MAP_MISSING)
        return 0;

    registered_params = (minpf_register_params*)malloc(sizeof(minpf_register_params));
	if (!registered_params)
		return -1;
    *registered_params = *params;
    error = hashmap_put(pluginManager->plugins, id, registered_params);

    return (error==MAP_OK) ? 0 : -1;

}