adg.Mask actually works and seems to be faster than the old version
This commit is contained in:
parent
e571f400d1
commit
a18a2ec6e2
|
@ -6,7 +6,7 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
failure = "0.1"
|
failure = "0.1"
|
||||||
faster = "0.5"
|
faster = { git = "https://github.com/AdamNiederer/faster.git" }
|
||||||
lazy_static = "1.3.0"
|
lazy_static = "1.3.0"
|
||||||
num = "0.2"
|
num = "0.2"
|
||||||
rand = "0.6"
|
rand = "0.6"
|
||||||
|
|
21
src/mask.rs
21
src/mask.rs
|
@ -1,5 +1,6 @@
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
use faster::*;
|
use faster::into_iters::*;
|
||||||
|
use faster::iters::*;
|
||||||
use super::PLUGIN_NAME;
|
use super::PLUGIN_NAME;
|
||||||
use vapoursynth::api::API;
|
use vapoursynth::api::API;
|
||||||
use vapoursynth::core::CoreRef;
|
use vapoursynth::core::CoreRef;
|
||||||
|
@ -17,13 +18,11 @@ pub struct Mask<'core> {
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref FLOAT_RANGE: [f32; 1000] = {
|
static ref FLOAT_RANGE: Vec<f32> = {
|
||||||
let mut floats = [0f32; 1000];
|
[0f32; 1000].iter()
|
||||||
floats.iter_mut()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, _f)| (i as f32) * 0.001)
|
.map(|(i, _f)| (i as f32) * 0.001)
|
||||||
.for_each(drop);
|
.collect::<Vec<_>>()
|
||||||
floats
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,13 +95,9 @@ impl<'core> Filter<'core> for Mask<'core> {
|
||||||
let lut: Vec<f32> = FLOAT_RANGE.iter().map(|x| get_mask_value(*x, average, self.luma_scaling)).collect();
|
let lut: Vec<f32> = FLOAT_RANGE.iter().map(|x| get_mask_value(*x, average, self.luma_scaling)).collect();
|
||||||
|
|
||||||
for row in 0..frame.height(0) {
|
for row in 0..frame.height(0) {
|
||||||
//panic!(format!("{:?}", frame.plane_row::<f32>(0, 1000)));
|
for (pixel, src_pixel) in frame.plane_row_mut::<f32>(0, row).iter_mut()
|
||||||
//for (pixel, src_pixel) in frame.plane_row_mut::<f32>(0, row).iter_mut()
|
.zip(src_frame.plane_row::<f32>(0, row).iter()) {
|
||||||
// .zip(src_frame.plane_row::<f32>(0, row).iter()) {
|
*pixel = lut[(src_pixel * 1000f32) as usize];
|
||||||
//*pixel = lut[(src_pixel * 1000f32) as usize];
|
|
||||||
for (pixel, src_pixel) in frame.plane_row_mut::<f32>(0, row).simd_iter_mut()
|
|
||||||
.simd_zip(src_frame.plane_row(0, row).simd_iter()) {
|
|
||||||
*pixel = lut[(src_pixel * f32s(1000.0)) as usize];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(frame.into())
|
Ok(frame.into())
|
||||||
|
|
Loading…
Reference in New Issue