Crates.io | libheif-sys |
lib.rs | libheif-sys |
version | |
source | src |
created_at | 2019-05-24 15:07:20.265784 |
updated_at | 2024-12-04 18:56:28.066891 |
description | libheif bindings |
homepage | |
repository | https://github.com/cykooz/libheif-sys |
max_upload_size | |
id | 136680 |
Cargo.toml error: | TOML parse error at line 20, column 1 | 20 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
libheif-sys
is a binding to libheif.
A high-level wrapper libheif-rs is also available.
libheif-dev
>= 1.18.0.clang
- to generate rust bindings for libheif
.
See bindgen requirements.clang
wouldn't be needed if you disable use-bindgen
feature.
In this case the pre-generated file bindings.rs
will be used
instead of generating it on the fly with help of bindgen
crate.
The crate uses pkg-confing
to find installed libheif
.
You can also enable all or any of the following features to compile
libheif v1.18.2
from GitHub
and link it statically:
compile-libheif
embedded-libheif-plugins
Note: Static linked version of libheif
doesn't have statically linked
it dependencies, such as libde256
, libaom
and other.
The crate uses vcpkg crate
to find libheif
installed with help of vcpkg
.
You can use cargo-vcpkg
to install libheif
with help of cargo
command:
cargo vcpkg -v build
cargo-vcpkg
can fetch and build a vcpkg
installation of required
packages from scratch. It merges package requirements specified in
the Cargo.toml
of crates in the dependency tree.
use std::ffi;
use std::ptr;
use libheif_sys as lh;
#[test]
fn read_and_decode_heic_file() {
unsafe {
lh::heif_init(ptr::null_mut());
let ctx = lh::heif_context_alloc();
assert!(!ctx.is_null());
let c_name = ffi::CString::new("data/test.heif").unwrap();
let err = lh::heif_context_read_from_file(
ctx,
c_name.as_ptr(),
ptr::null()
);
assert_eq!(err.code, lh::heif_error_code_heif_error_Ok);
let mut handle = ptr::null_mut();
let err = lh::heif_context_get_primary_image_handle(ctx, &mut handle);
assert_eq!(err.code, lh::heif_error_code_heif_error_Ok);
assert!(!handle.is_null());
let width = lh::heif_image_handle_get_width(handle);
assert_eq!(width, 4032);
let height = lh::heif_image_handle_get_height(handle);
assert_eq!(height, 3024);
let mut image = ptr::null_mut();
let options = lh::heif_decoding_options_alloc();
let err = lh::heif_decode_image(
handle,
&mut image,
lh::heif_colorspace_heif_colorspace_RGB,
lh::heif_chroma_heif_chroma_interleaved_RGB,
options,
);
lh::heif_decoding_options_free(options);
assert_eq!(err.code, lh::heif_error_code_heif_error_Ok);
assert!(!image.is_null());
let colorspace = lh::heif_image_get_colorspace(image);
assert_eq!(colorspace, lh::heif_colorspace_heif_colorspace_RGB);
let chroma_format = lh::heif_image_get_chroma_format(image);
assert_eq!(chroma_format, lh::heif_chroma_heif_chroma_interleaved_RGB);
let width = lh::heif_image_get_width(
image,
lh::heif_channel_heif_channel_interleaved
);
assert_eq!(width, 4032);
let height = lh::heif_image_get_height(
image,
lh::heif_channel_heif_channel_interleaved
);
assert_eq!(height, 3024);
lh::heif_context_free(ctx);
lh::heif_deinit();
};
}