mirror of
https://github.com/Cykooz/fast_image_resize.git
synced 2026-10-07 17:01:09 +00:00
Prepare to release.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
## [Unreleased] - ReleaseDate
|
||||
|
||||
### Added
|
||||
|
||||
- Added support of `DynamicImage::ImageRgb32F` and `DynamicImage::ImageRgba32F`
|
||||
form the `image` crate ([#50](https://github.com/Cykooz/fast_image_resize/pull/50)).
|
||||
|
||||
## [5.1.4] - 2025-05-16
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use std::arch::x86_64::*;
|
||||
use std::intrinsics::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x3;
|
||||
@@ -194,19 +193,19 @@ unsafe fn horiz_convolution_four_rows<const PRECISION: i32>(
|
||||
sss0 = _mm256_packus_epi16(sss0, zero);
|
||||
sss1 = _mm256_packus_epi16(sss1, zero);
|
||||
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm256_extracti128_si256::<0>(sss0)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm256_extracti128_si256::<0>(sss0)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
dst_rows[0].get_unchecked_mut(dst_x).0 = [bytes[0], bytes[1], bytes[2]];
|
||||
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm256_extracti128_si256::<1>(sss0)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm256_extracti128_si256::<1>(sss0)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
dst_rows[1].get_unchecked_mut(dst_x).0 = [bytes[0], bytes[1], bytes[2]];
|
||||
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm256_extracti128_si256::<0>(sss1)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm256_extracti128_si256::<0>(sss1)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
dst_rows[2].get_unchecked_mut(dst_x).0 = [bytes[0], bytes[1], bytes[2]];
|
||||
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm256_extracti128_si256::<1>(sss1)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm256_extracti128_si256::<1>(sss1)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
dst_rows[3].get_unchecked_mut(dst_x).0 = [bytes[0], bytes[1], bytes[2]];
|
||||
}
|
||||
@@ -366,7 +365,7 @@ unsafe fn horiz_convolution_one_row<const PRECISION: i32>(
|
||||
|
||||
sss = _mm_srai_epi32::<PRECISION>(sss);
|
||||
sss = _mm_packs_epi32(sss, sss);
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm_packus_epi16(sss, sss)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm_packus_epi16(sss, sss)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
dst_row.get_unchecked_mut(dst_x).0 = [bytes[0], bytes[1], bytes[2]];
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
use std::arch::x86_64::*;
|
||||
use std::intrinsics::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x3;
|
||||
@@ -168,7 +167,7 @@ unsafe fn horiz_convolution_four_rows<const PRECISION: i32>(
|
||||
|
||||
for i in 0..4 {
|
||||
let sss = _mm_packs_epi32(sss_a[i], zero);
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm_packus_epi16(sss, zero)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm_packus_epi16(sss, zero)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
let dst_pixel = dst_rows[i].get_unchecked_mut(dst_x);
|
||||
dst_pixel.0 = [bytes[0], bytes[1], bytes[2]];
|
||||
@@ -283,7 +282,7 @@ unsafe fn horiz_convolution_one_row<const PRECISION: i32>(
|
||||
|
||||
sss = _mm_srai_epi32::<PRECISION>(sss);
|
||||
sss = _mm_packs_epi32(sss, sss);
|
||||
let pixel: u32 = transmute(_mm_cvtsi128_si32(_mm_packus_epi16(sss, sss)));
|
||||
let pixel: u32 = i32::cast_unsigned(_mm_cvtsi128_si32(_mm_packus_epi16(sss, sss)));
|
||||
let bytes = pixel.to_le_bytes();
|
||||
let dst_pixel = dst_row.get_unchecked_mut(dst_x);
|
||||
dst_pixel.0 = [bytes[0], bytes[1], bytes[2]];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::arch::wasm32::*;
|
||||
use std::intrinsics::transmute;
|
||||
use std::mem::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x3;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::arch::x86_64::*;
|
||||
use std::intrinsics::transmute;
|
||||
use std::mem::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x4;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::arch::x86_64::*;
|
||||
use std::intrinsics::transmute;
|
||||
use std::mem::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x4;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::arch::wasm32::*;
|
||||
use std::intrinsics::transmute;
|
||||
use std::mem::transmute;
|
||||
|
||||
use crate::convolution::optimisations::Normalizer16;
|
||||
use crate::pixels::U8x4;
|
||||
|
||||
+1
-2
@@ -1,5 +1,4 @@
|
||||
use std::arch::x86_64::*;
|
||||
use std::intrinsics::transmute;
|
||||
|
||||
use crate::pixels::{U8x3, U8x4};
|
||||
|
||||
@@ -52,7 +51,7 @@ pub unsafe fn loadu_pd256<T>(buf: &[T], index: usize) -> __m256d {
|
||||
|
||||
#[inline(always)]
|
||||
pub unsafe fn mm_cvtepu8_epi32(buf: &[U8x4], index: usize) -> __m128i {
|
||||
let v: i32 = transmute(buf.get_unchecked(index).0);
|
||||
let v: i32 = i32::from_ne_bytes(buf.get_unchecked(index).0);
|
||||
_mm_cvtepu8_epi32(_mm_cvtsi32_si128(v))
|
||||
}
|
||||
|
||||
|
||||
+5
-2
@@ -384,11 +384,14 @@ impl PixelTestingExt for U8x4 {
|
||||
}
|
||||
|
||||
pub fn save_result(image: &Image, name: &str) {
|
||||
if std::env::var("SAVE_RESULT").unwrap_or_else(|_| "".to_owned()) == "" {
|
||||
if std::env::var("SAVE_RESULT")
|
||||
.unwrap_or_else(|_| "".to_owned())
|
||||
.is_empty()
|
||||
{
|
||||
return;
|
||||
}
|
||||
std::fs::create_dir_all("./data/result").unwrap();
|
||||
let path = format!("./data/result/{}.png", name);
|
||||
let path = format!("./data/result/{name}.png");
|
||||
|
||||
let color_type: ExtendedColorType = match image.pixel_type() {
|
||||
PixelType::U8 => ColorType::L8.into(),
|
||||
|
||||
Reference in New Issue
Block a user