From c67dda5371de4da9153c6adb1c11e66a9072401e Mon Sep 17 00:00:00 2001 From: kageru Date: Tue, 4 Jun 2019 19:35:39 +0200 Subject: [PATCH] no longer drop uninitialized memory (fixes #1) --- src/mask.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/mask.rs b/src/mask.rs index 2e69cb8..ec9218c 100644 --- a/src/mask.rs +++ b/src/mask.rs @@ -3,6 +3,7 @@ use failure::Error; use num::{NumCast, ToPrimitive}; use std::fmt::Debug; use std::ops::Shl; +use std::ptr; use vapoursynth::core::CoreRef; use vapoursynth::format::ColorFamily; use vapoursynth::plugins::{Filter, FrameContext}; @@ -53,9 +54,7 @@ fn filter_for_int( let max = ((1 << depth) - 1) as f32; let lut: Vec = FLOAT_RANGE .iter() - .map(|x| { - T::from(get_mask_value(*x, average, luma_scaling) * max).unwrap() - }) + .map(|x| T::from(get_mask_value(*x, average, luma_scaling) * max).unwrap()) .collect(); for row in 0..frame.height(0) { for (pixel, src_pixel) in frame @@ -64,7 +63,9 @@ fn filter_for_int( .zip(src_frame.plane_row::(0, row).iter()) { let i = ::from(src_pixel.clone()).unwrap() >> (depth - 8); - *pixel = lut[i].clone(); + unsafe { + ptr::write(pixel, lut[i].clone()); + } } } } @@ -80,7 +81,9 @@ fn filter_for_float(frame: &mut FrameRefMut, src_frame: FrameRef, average: f32, .iter_mut() .zip(src_frame.plane_row::(0, row).iter()) { - *pixel = lut[(src_pixel * 255f32) as usize]; + unsafe { + ptr::write(pixel, lut[(src_pixel * 255f32) as usize]); + } } } }