Current section

Files

Jump to
turbojpeg c_src turbojpeg_native _generated turbojpeg_native.c
Raw

c_src/turbojpeg_native/_generated/turbojpeg_native.c

#include "turbojpeg_native.h"
UNIFEX_TERM yuv_to_jpeg_result_ok(UnifexEnv* env, UnifexPayload * payload) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "ok"),
unifex_payload_to_term(env, payload)
},
2
);
}
UNIFEX_TERM yuv_to_jpeg_result_error(UnifexEnv* env, char* reason) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "error"),
enif_make_atom(env, reason)
},
2
);
}
UNIFEX_TERM jpeg_to_yuv_result_ok(UnifexEnv* env, UnifexPayload * payload) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "ok"),
unifex_payload_to_term(env, payload)
},
2
);
}
UNIFEX_TERM jpeg_to_yuv_result_error(UnifexEnv* env, char* reason) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "error"),
enif_make_atom(env, reason)
},
2
);
}
UNIFEX_TERM get_jpeg_header_result_ok(UnifexEnv* env, int data) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "ok"),
enif_make_int(env, data)
},
2
);
}
UNIFEX_TERM get_jpeg_header_result_error(UnifexEnv* env, char* reason) {
return enif_make_tuple_from_array(
env,
(ERL_NIF_TERM []) {
enif_make_atom(env, "error"),
enif_make_atom(env, reason)
},
2
);
}
ErlNifResourceType *STATE_RESOURCE_TYPE;
UnifexNifState* unifex_alloc_state(UnifexEnv* env) {
UNIFEX_UNUSED(env);
return enif_alloc_resource(STATE_RESOURCE_TYPE, sizeof(UnifexNifState));
}
void unifex_release_state(UnifexEnv * env, UnifexNifState* state) {
UNIFEX_UNUSED(env);
enif_release_resource(state);
}
void unifex_keep_state(UnifexEnv * env, UnifexNifState* state) {
UNIFEX_UNUSED(env);
enif_keep_resource(state);
}
static void destroy_state(ErlNifEnv* env, void* value) {
UnifexNifState* state = (UnifexNifState*) value;
UnifexEnv *unifex_env = env;
handle_destroy_state(unifex_env, state);
}
static int unifex_load_nif(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) {
UNIFEX_UNUSED(load_info);
UNIFEX_UNUSED(priv_data);
int flags = ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER;
STATE_RESOURCE_TYPE =
enif_open_resource_type(env, NULL, "UnifexNifState", destroy_state, flags, NULL);
UNIFEX_PAYLOAD_GUARD_RESOURCE_TYPE =
enif_open_resource_type(env, NULL, "UnifexPayloadGuard", 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_UNUSED(argc);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload * payload;
int width;
int height;
int quality;
char* format;
payload = enif_alloc(sizeof (UnifexPayload));
format = NULL;
if(!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", "unifex_payload_from_term(env, argv[0], payload)");
goto exit_export_yuv_to_jpeg;
}
if(!enif_get_int(env, argv[1], &width)) {
result = unifex_raise_args_error(env, "width", "enif_get_int(env, argv[1], &width)");
goto exit_export_yuv_to_jpeg;
}
if(!enif_get_int(env, argv[2], &height)) {
result = unifex_raise_args_error(env, "height", "enif_get_int(env, argv[2], &height)");
goto exit_export_yuv_to_jpeg;
}
if(!enif_get_int(env, argv[3], &quality)) {
result = unifex_raise_args_error(env, "quality", "enif_get_int(env, argv[3], &quality)");
goto exit_export_yuv_to_jpeg;
}
if(!unifex_alloc_and_get_atom(env, argv[4], &format)) {
result = unifex_raise_args_error(env, "format", "unifex_alloc_and_get_atom(env, argv[4], &format)");
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) enif_free(format);
return result;
}
static ERL_NIF_TERM export_jpeg_to_yuv(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){
UNIFEX_UNUSED(argc);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload * payload;
payload = enif_alloc(sizeof (UnifexPayload));
if(!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", "unifex_payload_from_term(env, argv[0], 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_UNUSED(argc);
ERL_NIF_TERM result;
UnifexEnv *unifex_env = env;
UnifexPayload * payload;
payload = enif_alloc(sizeof (UnifexPayload));
if(!unifex_payload_from_term(env, argv[0], payload)) {
result = unifex_raise_args_error(env, "payload", "unifex_payload_from_term(env, argv[0], 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)