Skip to content

Commit

Permalink
Updates for x86
Browse files Browse the repository at this point in the history
  • Loading branch information
awxkee committed Dec 28, 2024
1 parent fa1f2ec commit 1d38af3
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 168 deletions.
16 changes: 7 additions & 9 deletions app/benches/resize_rgb/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use fast_image_resize::FilterType::Lanczos3;
use fast_image_resize::{CpuExtensions, PixelType, ResizeAlg, ResizeOptions, Resizer};
use image::{EncodableLayout, GenericImageView, ImageReader};
use pic_scale::{
ImageSize, ImageStore, ResamplingFunction, Scaler, Scaling, ScalingF32, ThreadingPolicy,
ImageStore, ImageStoreMut, ResamplingFunction, Scaler, Scaling, ScalingF32, ThreadingPolicy,
};

pub fn criterion_benchmark(c: &mut Criterion) {
Expand All @@ -27,10 +27,9 @@ pub fn criterion_benchmark(c: &mut Criterion) {
dimensions.1 as usize,
)
.unwrap();
_ = scaler.resize_rgb(
ImageSize::new(dimensions.0 as usize / 4, dimensions.1 as usize / 4),
store,
);
let mut target =
ImageStoreMut::alloc(dimensions.0 as usize / 4, dimensions.1 as usize / 4);
scaler.resize_rgb(&store, &mut target).unwrap();
})
});

Expand All @@ -47,10 +46,9 @@ pub fn criterion_benchmark(c: &mut Criterion) {
dimensions.1 as usize,
)
.unwrap();
_ = scaler.resize_rgb_f32(
ImageSize::new(dimensions.0 as usize / 4, dimensions.1 as usize / 4),
store,
);
let mut target =
ImageStoreMut::alloc(dimensions.0 as usize / 4, dimensions.1 as usize / 4);
scaler.resize_rgb_f32(&store, &mut target).unwrap();
})
});

Expand Down
32 changes: 13 additions & 19 deletions app/benches/resize_rgba/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use fast_image_resize::FilterType::Lanczos3;
use fast_image_resize::{CpuExtensions, PixelType, ResizeAlg, ResizeOptions, Resizer};
use image::{GenericImageView, ImageReader};
use pic_scale::{
ImageSize, ImageStore, ResamplingFunction, Scaler, Scaling, ScalingF32, ThreadingPolicy,
ImageStore, ImageStoreMut, ResamplingFunction, Scaler, Scaling, ScalingF32, ThreadingPolicy,
};

pub fn criterion_benchmark(c: &mut Criterion) {
Expand All @@ -25,11 +25,9 @@ pub fn criterion_benchmark(c: &mut Criterion) {
dimensions.1 as usize,
)
.unwrap();
_ = scaler.resize_rgba(
ImageSize::new(dimensions.0 as usize / 2, dimensions.1 as usize / 2),
store,
true,
);
let mut target =
ImageStoreMut::alloc(dimensions.0 as usize / 4, dimensions.1 as usize / 4);
_ = scaler.resize_rgba(&store, &mut target, true);
})
});

Expand All @@ -46,17 +44,15 @@ pub fn criterion_benchmark(c: &mut Criterion) {
dimensions.1 as usize,
)
.unwrap();
_ = scaler.resize_rgba_f32(
ImageSize::new(dimensions.0 as usize / 2, dimensions.1 as usize / 2),
store,
false,
);
let mut target =
ImageStoreMut::alloc(dimensions.0 as usize / 4, dimensions.1 as usize / 4);
_ = scaler.resize_rgba_f32(&store, &mut target, false);
})
});

c.bench_function("Fast image resize RGBA with alpha: Lanczos 3", |b| {
let mut vc = Vec::from(img.as_bytes());
b.iter(|| {
let mut vc = Vec::from(img.as_bytes());
let pixel_type: PixelType = PixelType::U8x4;
let src_image =
Image::from_slice_u8(dimensions.0, dimensions.1, &mut vc, pixel_type).unwrap();
Expand Down Expand Up @@ -84,27 +80,25 @@ pub fn criterion_benchmark(c: &mut Criterion) {
});

c.bench_function("Pic scale RGBA without alpha: Lanczos 3", |b| {
let mut copied: Vec<u8> = Vec::from(src_bytes);
b.iter(|| {
let mut scaler = Scaler::new(ResamplingFunction::Lanczos3);
scaler.set_threading_policy(ThreadingPolicy::Single);
let mut copied: Vec<u8> = Vec::from(src_bytes);
let store = ImageStore::<u8, 4>::from_slice(
&mut copied,
dimensions.0 as usize,
dimensions.1 as usize,
)
.unwrap();
_ = scaler.resize_rgba(
ImageSize::new(dimensions.0 as usize / 2, dimensions.1 as usize / 2),
store,
false,
);
let mut target =
ImageStoreMut::alloc(dimensions.0 as usize / 4, dimensions.1 as usize / 4);
_ = scaler.resize_rgba(&store, &mut target, false);
})
});

c.bench_function("Fast image resize RGBA without alpha: Lanczos 3", |b| {
let mut vc = Vec::from(img.as_bytes());
b.iter(|| {
let mut vc = Vec::from(img.as_bytes());
let pixel_type: PixelType = PixelType::U8x4;
let src_image =
Image::from_slice_u8(dimensions.0, dimensions.1, &mut vc, pixel_type).unwrap();
Expand Down
7 changes: 3 additions & 4 deletions fuzz/resize_plane/resize_plane.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_plane(
Expand Down Expand Up @@ -64,8 +64,7 @@ fn resize_plane(
let mut src_data = vec![15u8; src_width * src_height];

let store = ImageStore::<u8, 1>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);
let scaler = Scaler::new(sampler);
_ = scaler
.resize_plane(ImageSize::new(dst_width, dst_height), store)
.unwrap();
scaler.resize_plane(&store, &mut target).unwrap();
}
12 changes: 4 additions & 8 deletions fuzz/resize_plane_f32/resize_plane_f32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_plane(
Expand Down Expand Up @@ -64,12 +64,8 @@ fn resize_plane(
let mut src_data = vec![0f32; src_width * src_height];

let store = ImageStore::<f32, 1>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_plane_f32(ImageSize::new(dst_width, dst_height), store)
.unwrap();
let store = ImageStore::<f32, 1>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_plane_f32(ImageSize::new(dst_width, dst_height), store)
.unwrap();
scaler.resize_plane_f32(&store, &mut target).unwrap();
}
13 changes: 6 additions & 7 deletions fuzz/resize_plane_u16/resize_plane_u16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, ScalingU16};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, ScalingU16};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgb(
Expand Down Expand Up @@ -64,13 +64,12 @@ fn resize_rgb(
let mut src_data = vec![1u16; src_width * src_height];

let store = ImageStore::<u16, 1>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 10);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_plane_u16(ImageSize::new(dst_width, dst_height), store, 10)
.unwrap();
scaler.resize_plane_u16(&store, &mut target).unwrap();

let store = ImageStore::<u16, 1>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_plane_u16(ImageSize::new(dst_width, dst_height), store, 16)
.unwrap();
let mut target16 = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 16);
scaler.resize_plane_u16(&store, &mut target16).unwrap();
}
7 changes: 3 additions & 4 deletions fuzz/resize_rgb/resize_rgb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, Scaling};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, Scaling};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgb(
Expand Down Expand Up @@ -64,8 +64,7 @@ fn resize_rgb(
let mut src_data = vec![0u8; src_width * src_height * 3];

let store = ImageStore::<u8, 3>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);
let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgb(ImageSize::new(dst_width, dst_height), store)
.unwrap();
scaler.resize_rgb(&store, &mut target).unwrap();
}
12 changes: 4 additions & 8 deletions fuzz/resize_rgb_f32/resize_rgb_f32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, ScalingF32};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, ScalingF32};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgb(
Expand Down Expand Up @@ -64,12 +64,8 @@ fn resize_rgb(
let mut src_data = vec![0f32; src_width * src_height * 3];

let store = ImageStore::<f32, 3>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgb_f32(ImageSize::new(dst_width, dst_height), store)
.unwrap();
let store = ImageStore::<f32, 3>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgb_f32(ImageSize::new(dst_width, dst_height), store)
.unwrap();
scaler.resize_rgb_f32(&store, &mut target).unwrap();
}
13 changes: 6 additions & 7 deletions fuzz/resize_rgb_u16/resize_rgb_u16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, ScalingU16};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, ScalingU16};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgb(
Expand Down Expand Up @@ -64,13 +64,12 @@ fn resize_rgb(
let mut src_data = vec![1u16; src_width * src_height * 3];

let store = ImageStore::<u16, 3>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 10);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgb_u16(ImageSize::new(dst_width, dst_height), store, 10)
.unwrap();
scaler.resize_rgb_u16(&store, &mut target).unwrap();

let store = ImageStore::<u16, 3>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgb_u16(ImageSize::new(dst_width, dst_height), store, 16)
.unwrap();
let mut target16 = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 16);
scaler.resize_rgb_u16(&store, &mut target16).unwrap();
}
11 changes: 4 additions & 7 deletions fuzz/resize_rgba/resize_rgba.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, Scaling};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, Scaling};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgba(
Expand Down Expand Up @@ -64,12 +64,9 @@ fn resize_rgba(
let mut src_data = vec![0u8; src_width * src_height * 4];

let store = ImageStore::<u8, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);
let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgba(ImageSize::new(dst_width, dst_height), store, false)
.unwrap();
scaler.resize_rgba(&store, &mut target, false).unwrap();
let store = ImageStore::<u8, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgba(ImageSize::new(dst_width, dst_height), store, true)
.unwrap();
scaler.resize_rgba(&store, &mut target, true).unwrap();
}
12 changes: 5 additions & 7 deletions fuzz/resize_rgba_f32/resize_rgba_f32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, ScalingF32};
use pic_scale::{ImageStore, ImageStoreMut, ResamplingFunction, Scaler, ScalingF32};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgba(
Expand Down Expand Up @@ -64,12 +64,10 @@ fn resize_rgba(
let mut src_data = vec![0f32; src_width * src_height * 4];

let store = ImageStore::<f32, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc(dst_width, dst_height);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgba_f32(ImageSize::new(dst_width, dst_height), store, false)
.unwrap();
scaler.resize_rgba_f32(&store, &mut target, false).unwrap();
let store = ImageStore::<f32, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgba_f32(ImageSize::new(dst_width, dst_height), store, true)
.unwrap();
scaler.resize_rgba_f32(&store, &mut target, true).unwrap();
}
24 changes: 11 additions & 13 deletions fuzz/resize_rgba_u16/resize_rgba_u16.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@
#![no_main]

use libfuzzer_sys::fuzz_target;
use pic_scale::{Ar30ByteOrder, ImageSize, ImageStore, ResamplingFunction, Scaler, ScalingU16};
use pic_scale::{
Ar30ByteOrder, ImageSize, ImageStore, ImageStoreMut, ResamplingFunction, Scaler, ScalingU16,
};

fuzz_target!(|data: (u16, u16, u16, u16)| {
resize_rgba(
Expand Down Expand Up @@ -64,24 +66,20 @@ fn resize_rgba(
let mut src_data = vec![1u16; src_width * src_height * 4];

let store = ImageStore::<u16, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
let mut target = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 10);

let scaler = Scaler::new(sampler);
_ = scaler
.resize_rgba_u16(ImageSize::new(dst_width, dst_height), store, 10, false)
.unwrap();
scaler.resize_rgba_u16(&store, &mut target, false).unwrap();
let store = ImageStore::<u16, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgba_u16(ImageSize::new(dst_width, dst_height), store, 10, true)
.unwrap();
scaler.resize_rgba_u16(&store, &mut target, true).unwrap();

let mut target = ImageStoreMut::alloc_with_depth(dst_width, dst_height, 16);

let store = ImageStore::<u16, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgba_u16(ImageSize::new(dst_width, dst_height), store, 16, false)
.unwrap();
scaler.resize_rgba_u16(&store, &mut target, false).unwrap();

let store = ImageStore::<u16, 4>::from_slice(&mut src_data, src_width, src_height).unwrap();
_ = scaler
.resize_rgba_u16(ImageSize::new(dst_width, dst_height), store, 16, true)
.unwrap();
scaler.resize_rgba_u16(&store, &mut target, true).unwrap();

let src_data_ar30 = vec![1u32; src_width * src_height];
let mut dst_data_ar30 = vec![1u32; dst_width * dst_height];
Expand Down
Loading

0 comments on commit 1d38af3

Please sign in to comment.