Packages
vix
0.22.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
Current section
Files
Jump to
Current section
Files
c_src/vips_foreign.c
#include <glib-object.h>
#include <vips/vips.h>
#include "g_object/g_object.h"
#include "g_object/g_value.h"
#include "utils.h"
#include "vips_foreign.h"
ERL_NIF_TERM nif_foreign_find_load_buffer(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
ASSERT_ARGC(argc, 1);
ErlNifTime start;
ERL_NIF_TERM ret;
ErlNifBinary bin;
const char *name;
start = enif_monotonic_time(ERL_NIF_USEC);
if (!enif_inspect_binary(env, argv[0], &bin)) {
error("failed to get binary from erl term");
ret = enif_make_badarg(env);
goto exit;
}
name = vips_foreign_find_load_buffer(bin.data, bin.size);
if (!name) {
error("Failed to find load buffer. error: %s", vips_error_buffer());
vips_error_clear();
ret = make_error(env, "Failed to find load buffer");
goto exit;
}
ret = make_ok(env, make_binary(env, name));
exit:
notify_consumed_timeslice(env, start, enif_monotonic_time(ERL_NIF_USEC));
return ret;
}
ERL_NIF_TERM nif_foreign_find_save_buffer(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
ASSERT_ARGC(argc, 1);
ErlNifTime start;
ERL_NIF_TERM ret;
char suffix[VIPS_PATH_MAX];
const char *name;
start = enif_monotonic_time(ERL_NIF_USEC);
if (!get_binary(env, argv[0], suffix, VIPS_PATH_MAX)) {
ret = make_error(env, "Failed to get suffix");
goto exit;
}
name = vips_foreign_find_save_buffer(suffix);
if (!name) {
error("Failed to find save buffer. error: %s", vips_error_buffer());
vips_error_clear();
ret = make_error(env, "Failed to find save buffer");
goto exit;
}
ret = make_ok(env, make_binary(env, name));
exit:
notify_consumed_timeslice(env, start, enif_monotonic_time(ERL_NIF_USEC));
return ret;
}
ERL_NIF_TERM nif_foreign_find_load(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
ASSERT_ARGC(argc, 1);
ErlNifTime start;
ERL_NIF_TERM ret;
char filename[VIPS_PATH_MAX];
const char *name;
start = enif_monotonic_time(ERL_NIF_USEC);
if (!get_binary(env, argv[0], filename, VIPS_PATH_MAX)) {
ret = make_error(env, "Failed to get filename");
goto exit;
}
name = vips_foreign_find_load(filename);
if (!name) {
error("Failed to find load. error: %s", vips_error_buffer());
vips_error_clear();
ret = make_error(env, "Failed to find load");
goto exit;
}
ret = make_ok(env, make_binary(env, name));
exit:
notify_consumed_timeslice(env, start, enif_monotonic_time(ERL_NIF_USEC));
return ret;
}
ERL_NIF_TERM nif_foreign_find_save(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
ASSERT_ARGC(argc, 1);
ErlNifTime start;
ERL_NIF_TERM ret;
char filename[VIPS_PATH_MAX];
const char *name;
start = enif_monotonic_time(ERL_NIF_USEC);
if (!get_binary(env, argv[0], filename, VIPS_PATH_MAX)) {
ret = make_error(env, "Failed to get filename");
goto exit;
}
name = vips_foreign_find_save(filename);
if (!name) {
error("Failed to find save. error: %s", vips_error_buffer());
vips_error_clear();
ret = make_error(env, "Failed to find save");
goto exit;
}
ret = make_ok(env, make_binary(env, name));
exit:
notify_consumed_timeslice(env, start, enif_monotonic_time(ERL_NIF_USEC));
return ret;
}