From eeb69eada04da96063915fe501b3955d5661e429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Sat, 1 Apr 2023 17:57:06 +0200 Subject: [PATCH] Libheif --- Cargo.lock | 5 +++-- czkawka_core/Cargo.toml | 4 ++-- czkawka_core/src/common.rs | 5 ++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 326a473..9981958 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1722,12 +1722,13 @@ checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libheif-rs" -version = "0.18.0" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d09b0d2d69da084eeeda9534662bc6b6096fbce3f307149750c0e572ad0ccd" +checksum = "749fcebc2069f334599304546cfa891c30be08cdf4f358ed984a2c71c5e0031f" dependencies = [ "enumn", "four-cc", + "libc", "libheif-sys", ] diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml index 77c0a4a..750936d 100644 --- a/czkawka_core/Cargo.toml +++ b/czkawka_core/Cargo.toml @@ -69,10 +69,10 @@ infer = "0.13.0" num_cpus = "1.15.0" # Heif/Heic -libheif-rs = { version = "0.18.0", optional = true } # TODO update this, decode function is missing in this version +libheif-rs = { version = "0.19.2", optional = true } anyhow = { version = "1.0", optional = true } -state="0.5.3" +state = "0.5.3" [features] default = [] diff --git a/czkawka_core/src/common.rs b/czkawka_core/src/common.rs index 32b6206..27c947e 100644 --- a/czkawka_core/src/common.rs +++ b/czkawka_core/src/common.rs @@ -11,6 +11,8 @@ use directories_next::ProjectDirs; use image::{DynamicImage, ImageBuffer, Rgb}; use imagepipe::{ImageSource, Pipeline}; #[cfg(feature = "heif")] +use libheif_rs::LibHeif; +#[cfg(feature = "heif")] use libheif_rs::{ColorSpace, HeifContext, RgbChroma}; static NUMBER_OF_THREADS: state::Storage = state::Storage::new(); @@ -126,9 +128,10 @@ pub fn open_cache_folder(cache_file_name: &str, save_to_cache: bool, use_json: b #[cfg(feature = "heif")] pub fn get_dynamic_image_from_heic(path: &str) -> Result { + let libheif = LibHeif::new(); let im = HeifContext::read_from_file(path)?; let handle = im.primary_image_handle()?; - let image = handle.decode(ColorSpace::Rgb(RgbChroma::Rgb), None)?; + let image = libheif.decode(&handle, ColorSpace::Rgb(RgbChroma::Rgb), None)?; let width = image.width(); let height = image.height(); let planes = image.planes();