Current section
Files
Jump to
Current section
Files
c_src/turbojpeg/_generated/nif/turbojpeg_native.cpp
#include "turbojpeg_native.h"
UNIFEX_TERM yuv_to_jpeg_result_ok(UnifexEnv *env, UnifexPayload *payload) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "ok"),
unifex_payload_to_term(env, payload)};
enif_make_tuple_from_array(env, terms, 2);
});
}
UNIFEX_TERM yuv_to_jpeg_result_error(UnifexEnv *env, char const *reason) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "error"),
enif_make_atom(env, reason)};
enif_make_tuple_from_array(env, terms, 2);
});
}
UNIFEX_TERM jpeg_to_yuv_result_ok(UnifexEnv *env, UnifexPayload *payload) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "ok"),
unifex_payload_to_term(env, payload)};
enif_make_tuple_from_array(env, terms, 2);
});
}
UNIFEX_TERM jpeg_to_yuv_result_error(UnifexEnv *env, char const *reason) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "error"),
enif_make_atom(env, reason)};
enif_make_tuple_from_array(env, terms, 2);
});
}
UNIFEX_TERM get_jpeg_header_result_ok(UnifexEnv *env, int data) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "ok"),
enif_make_int(env, data)};
enif_make_tuple_from_array(env, terms, 2);
});
}
UNIFEX_TERM get_jpeg_header_result_error(UnifexEnv *env, char const *reason) {
return ({
const ERL_NIF_TERM terms[] = {enif_make_atom(env, "error"),
enif_make_atom(env, reason)};
enif_make_tuple_from_array(env, terms, 2);
});
}
static int unifex_load_nif(ErlNifEnv *env, void **priv_data,
ERL_NIF_TERM load_info) {
UNIFEX_UNUSED(load_info);
UNIFEX_UNUSED(priv_data);
ErlNifResourceFlags flags =
(ErlNifResourceFlags)(ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER);
UNIFEX_PAYLOAD_GUARD_RESOURCE_TYPE = enif_open_resource_type(
env, NULL, "UnifexPayloadGuard",
(ErlNifResourceDtor *)unifex_payload_guard_destructor, flags, NULL);
return 0;
}
static ERL_NIF_TERM export_yuv_to_jpeg(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
UNIFEX_MAYBE_UNUSED(argc);
UNIFEX_MAYBE_UNUSED(argv);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload *payload;
int width;
int height;
int quality;
char *format;
payload = (UnifexPayload *)unifex_alloc(sizeof(UnifexPayload));
format = NULL;
if (!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", ":payload");
goto exit_export_yuv_to_jpeg;
}
if (!enif_get_int(env, argv[1], &width)) {
result = unifex_raise_args_error(env, "width", ":int");
goto exit_export_yuv_to_jpeg;
}
if (!enif_get_int(env, argv[2], &height)) {
result = unifex_raise_args_error(env, "height", ":int");
goto exit_export_yuv_to_jpeg;
}
if (!enif_get_int(env, argv[3], &quality)) {
result = unifex_raise_args_error(env, "quality", ":int");
goto exit_export_yuv_to_jpeg;
}
if (!unifex_alloc_and_get_atom(env, argv[4], &format)) {
result = unifex_raise_args_error(env, "format", ":atom");
goto exit_export_yuv_to_jpeg;
}
result = yuv_to_jpeg(unifex_env, payload, width, height, quality, format);
goto exit_export_yuv_to_jpeg;
exit_export_yuv_to_jpeg:
unifex_payload_release_ptr(&payload);
if (format != NULL)
unifex_free(format);
return result;
}
static ERL_NIF_TERM export_jpeg_to_yuv(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
UNIFEX_MAYBE_UNUSED(argc);
UNIFEX_MAYBE_UNUSED(argv);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload *payload;
payload = (UnifexPayload *)unifex_alloc(sizeof(UnifexPayload));
if (!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", ":payload");
goto exit_export_jpeg_to_yuv;
}
result = jpeg_to_yuv(unifex_env, payload);
goto exit_export_jpeg_to_yuv;
exit_export_jpeg_to_yuv:
unifex_payload_release_ptr(&payload);
return result;
}
static ERL_NIF_TERM export_get_jpeg_header(ErlNifEnv *env, int argc,
const ERL_NIF_TERM argv[]) {
UNIFEX_MAYBE_UNUSED(argc);
UNIFEX_MAYBE_UNUSED(argv);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload *payload;
payload = (UnifexPayload *)unifex_alloc(sizeof(UnifexPayload));
if (!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", ":payload");
goto exit_export_get_jpeg_header;
}
result = get_jpeg_header(unifex_env, payload);
goto exit_export_get_jpeg_header;
exit_export_get_jpeg_header:
unifex_payload_release_ptr(&payload);
return result;
}
static ErlNifFunc nif_funcs[] = {
{"unifex_yuv_to_jpeg", 5, export_yuv_to_jpeg, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"unifex_jpeg_to_yuv", 1, export_jpeg_to_yuv, ERL_NIF_DIRTY_JOB_CPU_BOUND},
{"unifex_get_jpeg_header", 1, export_get_jpeg_header,
ERL_NIF_DIRTY_JOB_CPU_BOUND}};
ERL_NIF_INIT(Elixir.Turbojpeg.Native.Nif, nif_funcs, unifex_load_nif, NULL,
NULL, NULL)