Packages
vix
0.2.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.1
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
retired
0.1.0
NIF based bindings for libvips
Retired package: Release invalid - Incorrect package files, please use v0.2.1+
Current section
Files
Jump to
Current section
Files
c_src/vix.c
#include <glib-object.h>
#include <stdio.h>
#include <vips/vips.h>
#include "utils.h"
#include "g_object/g_boxed.h"
#include "g_object/g_object.h"
#include "g_object/g_param_spec.h"
#include "g_object/g_type.h"
#include "vips_boxed.h"
#include "vips_image.h"
#include "vips_operation.h"
static int on_load(ErlNifEnv *env, void **priv, ERL_NIF_TERM load_info) {
if (VIPS_INIT("vix")) {
error("Failed to initialize Vips");
return 1;
}
#ifdef DEBUG
vips_leak_set(true);
// when checking for leaks disable cache
vips_cache_set_max(0);
#endif
if (utils_init(env))
return 1;
if (nif_g_object_init(env))
return 1;
if (nif_g_param_spec_init(env))
return 1;
if (nif_g_boxed_init(env))
return 1;
if (nif_g_type_init(env))
return 1;
if (nif_vips_operation_init(env))
return 1;
return 0;
}
static ErlNifFunc nif_funcs[] = {
/* GObject */
{"nif_g_object_type_name", 1, nif_g_object_type_name, 0},
/* GType */
{"nif_g_type_from_instance", 1, nif_g_type_from_instance, 0},
{"nif_g_type_name", 1, nif_g_type_name, 0},
/* VipsImage */
{"nif_image_new_from_file", 1, nif_image_new_from_file,
ERL_NIF_DIRTY_JOB_IO_BOUND},
{"nif_image_write_to_file", 2, nif_image_write_to_file,
ERL_NIF_DIRTY_JOB_IO_BOUND},
{"nif_image_new", 0, nif_image_new, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"nif_image_new_temp_file", 1, nif_image_new_temp_file,
ERL_NIF_DIRTY_JOB_IO_BOUND},
{"nif_image_new_matrix_from_array", 5, nif_image_new_matrix_from_array, 0},
{"nif_image_get_fields", 1, nif_image_get_fields, 0},
{"nif_image_get_header", 2, nif_image_get_header, 0},
{"nif_image_get_as_string", 2, nif_image_get_as_string, 0},
/* VipsOperation */
/* should these be ERL_NIF_DIRTY_JOB_IO_BOUND? */
{"nif_vips_operation_call", 2, nif_vips_operation_call,
ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"nif_vips_operation_get_arguments", 1, nif_vips_operation_get_arguments,
ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"nif_vips_operation_list", 0, nif_vips_operation_list,
ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"nif_vips_enum_list", 0, nif_vips_enum_list, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"nif_vips_flag_list", 0, nif_vips_flag_list, ERL_NIF_DIRTY_JOB_CPU_BOUND},
/* Vips */
{"nif_vips_cache_set_max", 1, nif_vips_cache_set_max, 0},
{"nif_vips_cache_get_max", 0, nif_vips_cache_get_max, 0},
{"nif_vips_concurrency_set", 1, nif_vips_concurrency_set, 0},
{"nif_vips_concurrency_get", 0, nif_vips_concurrency_get, 0},
{"nif_vips_cache_set_max_files", 1, nif_vips_cache_set_max_files, 0},
{"nif_vips_cache_get_max_files", 0, nif_vips_cache_get_max_files, 0},
{"nif_vips_cache_set_max_mem", 1, nif_vips_cache_set_max_mem, 0},
{"nif_vips_cache_get_max_mem", 0, nif_vips_cache_get_max_mem, 0},
{"nif_vips_version", 0, nif_vips_version, 0},
{"nif_vips_shutdown", 0, nif_vips_shutdown, 0},
/* VipsBoxed */
{"nif_int_array", 1, nif_int_array, 0},
{"nif_image_array", 1, nif_image_array, 0},
{"nif_double_array", 1, nif_double_array, 0},
{"nif_vips_int_array_to_erl_list", 1, nif_vips_int_array_to_erl_list, 0},
{"nif_vips_double_array_to_erl_list", 1, nif_vips_double_array_to_erl_list,
0},
{"nif_vips_image_array_to_erl_list", 1, nif_vips_image_array_to_erl_list,
0}};
ERL_NIF_INIT(Elixir.Vix.Nif, nif_funcs, &on_load, NULL, NULL, NULL)