diff --git a/benches/filters.rs b/benches/filters.rs index 7e048307..27a330b8 100644 --- a/benches/filters.rs +++ b/benches/filters.rs @@ -13,7 +13,7 @@ fn filters_16_bits_filter_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(0); + png.raw.filter_image(0); }); } @@ -23,7 +23,7 @@ fn filters_8_bits_filter_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(0); + png.raw.filter_image(0); }); } @@ -35,7 +35,7 @@ fn filters_4_bits_filter_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(0); + png.raw.filter_image(0); }); } @@ -47,7 +47,7 @@ fn filters_2_bits_filter_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(0); + png.raw.filter_image(0); }); } @@ -59,7 +59,7 @@ fn filters_1_bits_filter_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(0); + png.raw.filter_image(0); }); } @@ -69,7 +69,7 @@ fn filters_16_bits_filter_1(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(1); + png.raw.filter_image(1); }); } @@ -79,7 +79,7 @@ fn filters_8_bits_filter_1(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(1); + png.raw.filter_image(1); }); } @@ -91,7 +91,7 @@ fn filters_4_bits_filter_1(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(1); + png.raw.filter_image(1); }); } @@ -103,7 +103,7 @@ fn filters_2_bits_filter_1(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(1); + png.raw.filter_image(1); }); } @@ -115,7 +115,7 @@ fn filters_1_bits_filter_1(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(1); + png.raw.filter_image(1); }); } @@ -125,7 +125,7 @@ fn filters_16_bits_filter_2(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(2); + png.raw.filter_image(2); }); } @@ -135,7 +135,7 @@ fn filters_8_bits_filter_2(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(2); + png.raw.filter_image(2); }); } @@ -147,7 +147,7 @@ fn filters_4_bits_filter_2(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(2); + png.raw.filter_image(2); }); } @@ -159,7 +159,7 @@ fn filters_2_bits_filter_2(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(2); + png.raw.filter_image(2); }); } @@ -171,7 +171,7 @@ fn filters_1_bits_filter_2(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(2); + png.raw.filter_image(2); }); } @@ -181,7 +181,7 @@ fn filters_16_bits_filter_3(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(3); + png.raw.filter_image(3); }); } @@ -191,7 +191,7 @@ fn filters_8_bits_filter_3(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(3); + png.raw.filter_image(3); }); } @@ -203,7 +203,7 @@ fn filters_4_bits_filter_3(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(3); + png.raw.filter_image(3); }); } @@ -215,7 +215,7 @@ fn filters_2_bits_filter_3(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(3); + png.raw.filter_image(3); }); } @@ -227,7 +227,7 @@ fn filters_1_bits_filter_3(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(3); + png.raw.filter_image(3); }); } @@ -237,7 +237,7 @@ fn filters_16_bits_filter_4(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(4); + png.raw.filter_image(4); }); } @@ -247,7 +247,7 @@ fn filters_8_bits_filter_4(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(4); + png.raw.filter_image(4); }); } @@ -259,7 +259,7 @@ fn filters_4_bits_filter_4(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(4); + png.raw.filter_image(4); }); } @@ -271,7 +271,7 @@ fn filters_2_bits_filter_4(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(4); + png.raw.filter_image(4); }); } @@ -283,7 +283,7 @@ fn filters_1_bits_filter_4(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(4); + png.raw.filter_image(4); }); } @@ -293,7 +293,7 @@ fn filters_16_bits_filter_5(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(5); + png.raw.filter_image(5); }); } @@ -303,7 +303,7 @@ fn filters_8_bits_filter_5(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(5); + png.raw.filter_image(5); }); } @@ -315,7 +315,7 @@ fn filters_4_bits_filter_5(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(5); + png.raw.filter_image(5); }); } @@ -327,7 +327,7 @@ fn filters_2_bits_filter_5(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(5); + png.raw.filter_image(5); }); } @@ -339,6 +339,6 @@ fn filters_1_bits_filter_5(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - png.filter_image(5); + png.raw.filter_image(5); }); } diff --git a/benches/interlacing.rs b/benches/interlacing.rs index 26d93da7..4288fe93 100644 --- a/benches/interlacing.rs +++ b/benches/interlacing.rs @@ -12,10 +12,7 @@ fn interlacing_16_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_16.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(1) - }); + b.iter(|| png.raw.change_interlacing(1)); } #[bench] @@ -23,10 +20,7 @@ fn interlacing_8_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_rgb_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(1) - }); + b.iter(|| png.raw.change_interlacing(1)); } #[bench] @@ -36,10 +30,7 @@ fn interlacing_4_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(1) - }); + b.iter(|| png.raw.change_interlacing(1)); } #[bench] @@ -49,10 +40,7 @@ fn interlacing_2_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(1) - }); + b.iter(|| png.raw.change_interlacing(1)); } #[bench] @@ -62,10 +50,7 @@ fn interlacing_1_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(1) - }); + b.iter(|| png.raw.change_interlacing(1)); } #[bench] @@ -75,10 +60,7 @@ fn deinterlacing_16_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(0) - }); + b.iter(|| png.raw.change_interlacing(0)); } #[bench] @@ -88,10 +70,7 @@ fn deinterlacing_8_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(0) - }); + b.iter(|| png.raw.change_interlacing(0)); } #[bench] @@ -101,10 +80,7 @@ fn deinterlacing_4_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(0) - }); + b.iter(|| png.raw.change_interlacing(0)); } #[bench] @@ -114,10 +90,7 @@ fn deinterlacing_2_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(0) - }); + b.iter(|| png.raw.change_interlacing(0)); } #[bench] @@ -127,8 +100,5 @@ fn deinterlacing_1_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.change_interlacing(0) - }); + b.iter(|| png.raw.change_interlacing(0)); } diff --git a/benches/libdeflater.rs b/benches/libdeflater.rs index d3323253..cac7a723 100644 --- a/benches/libdeflater.rs +++ b/benches/libdeflater.rs @@ -13,7 +13,7 @@ fn libdeflater_16_bits_strategy_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - libdeflater_deflate(png.raw.data.as_ref()).ok(); + libdeflater_deflate(png.raw.data.as_ref(), &AtomicMin::new(None)).ok(); }); } @@ -23,7 +23,7 @@ fn libdeflater_8_bits_strategy_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - libdeflater_deflate(png.raw.data.as_ref()).ok(); + libdeflater_deflate(png.raw.data.as_ref(), &AtomicMin::new(None)).ok(); }); } @@ -35,7 +35,7 @@ fn libdeflater_4_bits_strategy_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - libdeflater_deflate(png.raw.data.as_ref()).ok(); + libdeflater_deflate(png.raw.data.as_ref(), &AtomicMin::new(None)).ok(); }); } @@ -47,7 +47,7 @@ fn libdeflater_2_bits_strategy_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - libdeflater_deflate(png.raw.data.as_ref()).ok(); + libdeflater_deflate(png.raw.data.as_ref(), &AtomicMin::new(None)).ok(); }); } @@ -59,6 +59,6 @@ fn libdeflater_1_bits_strategy_0(b: &mut Bencher) { let png = PngData::new(&input, false).unwrap(); b.iter(|| { - libdeflater_deflate(png.raw.data.as_ref()).ok(); + libdeflater_deflate(png.raw.data.as_ref(), &AtomicMin::new(None)).ok(); }); } diff --git a/benches/reductions.rs b/benches/reductions.rs index 83dc50b9..e94d8280 100644 --- a/benches/reductions.rs +++ b/benches/reductions.rs @@ -12,10 +12,7 @@ fn reductions_16_to_8_bits(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_16_should_be_rgb_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -25,10 +22,7 @@ fn reductions_8_to_4_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -38,10 +32,7 @@ fn reductions_8_to_2_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -51,10 +42,7 @@ fn reductions_8_to_1_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -64,10 +52,7 @@ fn reductions_4_to_2_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -77,10 +62,7 @@ fn reductions_4_to_1_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -90,10 +72,7 @@ fn reductions_2_to_1_bits(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_bit_depth() - }); + b.iter(|| bit_depth::reduce_bit_depth(&png.raw, 1)); } #[bench] @@ -101,10 +80,7 @@ fn reductions_rgba_to_rgb_16(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_16_should_be_rgb_16.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -112,10 +88,7 @@ fn reductions_rgba_to_rgb_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_rgb_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -125,10 +98,7 @@ fn reductions_rgba_to_grayscale_alpha_16(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -138,10 +108,7 @@ fn reductions_rgba_to_grayscale_alpha_8(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -151,10 +118,7 @@ fn reductions_rgba_to_grayscale_16(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -164,10 +128,7 @@ fn reductions_rgba_to_grayscale_8(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -177,10 +138,7 @@ fn reductions_rgb_to_grayscale_16(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -188,10 +146,7 @@ fn reductions_rgb_to_grayscale_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_grayscale_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -199,10 +154,7 @@ fn reductions_rgba_to_palette_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_should_be_palette_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -210,10 +162,7 @@ fn reductions_rgb_to_palette_8(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgb_8_should_be_palette_8.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_color_type() - }); + b.iter(|| reduce_color_type(&png.raw)); } #[bench] @@ -223,10 +172,7 @@ fn reductions_palette_duplicate_reduction(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_palette() - }); + b.iter(|| reduced_palette(&png.raw)); } #[bench] @@ -236,10 +182,7 @@ fn reductions_palette_unused_reduction(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_palette() - }); + b.iter(|| reduced_palette(&png.raw)); } #[bench] @@ -249,10 +192,7 @@ fn reductions_palette_full_reduction(b: &mut Bencher) { )); let png = PngData::new(&input, false).unwrap(); - b.iter(|| { - let mut safe_png = png.clone(); - safe_png.reduce_palette() - }); + b.iter(|| reduced_palette(&png.raw)); } #[bench] @@ -260,7 +200,7 @@ fn reductions_alpha_black(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_black.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::Black)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::Black)); } #[bench] @@ -268,7 +208,7 @@ fn reductions_alpha_white(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_white.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::White)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::White)); } #[bench] @@ -276,7 +216,7 @@ fn reductions_alpha_left(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_left.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::Left)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::Left)); } #[bench] @@ -284,7 +224,7 @@ fn reductions_alpha_right(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_right.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::Right)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::Right)); } #[bench] @@ -292,7 +232,7 @@ fn reductions_alpha_up(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_up.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::Up)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::Up)); } #[bench] @@ -300,5 +240,5 @@ fn reductions_alpha_down(b: &mut Bencher) { let input = test::black_box(PathBuf::from("tests/files/rgba_8_reduce_alpha_down.png")); let png = PngData::new(&input, false).unwrap(); - b.iter(|| png.reduced_alpha_channel(AlphaOptim::Down)); + b.iter(|| alpha::filtered_alpha_channel(&png.raw, AlphaOptim::Down)); } diff --git a/src/deflate/mod.rs b/src/deflate/mod.rs index 9648c813..e37e6b68 100644 --- a/src/deflate/mod.rs +++ b/src/deflate/mod.rs @@ -29,7 +29,8 @@ pub fn inflate(data: &[u8]) -> PngResult> { } /// Compress a data stream using the DEFLATE algorithm -pub(crate) fn deflate( +#[doc(hidden)] +pub fn deflate( data: &[u8], zc: u8, zs: u8, diff --git a/src/lib.rs b/src/lib.rs index 360dec9d..3395510b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -62,6 +62,7 @@ pub mod internal_tests { pub use crate::deflate::*; pub use crate::headers::*; pub use crate::png::*; + pub use crate::reduction::*; } #[derive(Clone, Debug)] @@ -801,6 +802,7 @@ fn perform_reductions( try_alpha_reductions(png, &opts.alphas, eval); } +#[derive(Debug)] struct DeadlineImp { start: Instant, timeout: Duration, @@ -808,7 +810,9 @@ struct DeadlineImp { } /// Keep track of processing timeout -pub(crate) struct Deadline { +#[doc(hidden)] +#[derive(Debug)] +pub struct Deadline { imp: Option, }