From 9d7986bbfd44b69a623fa29528b5d13000b91c77 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 7 Dec 2022 20:38:00 +0100 Subject: advanced translate --- evc/src/refsampler.rs | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'evc/src/refsampler.rs') diff --git a/evc/src/refsampler.rs b/evc/src/refsampler.rs index b27ceae..ad02332 100644 --- a/evc/src/refsampler.rs +++ b/evc/src/refsampler.rs @@ -1,22 +1,49 @@ use crate::{ + block::AdvancedReference, + format::ser::map_scalar8, frame::Frame, helpers::{matrix::Mat2, pixel::Pixel, vector::Vec2}, + view::View, }; +#[derive(Debug, Clone)] pub struct Sampler<'a> { - frame: &'a Frame, + pub view: View<&'a Frame>, - translation: Vec2, - transform: Mat2, + pub translation: Vec2, + pub transform: Mat2, - value_scale: f32, + pub value_scale: f32, } -impl Sampler<'_> { +impl<'a> Sampler<'a> { #[inline] pub fn sample(&self, p: Vec2) -> Pixel { - self.frame - .sample(self.translation + self.transform.transform(p)) - .scale(self.value_scale) + self.view + .sample(self.translation + p) // self.transform.transform(p)) + // .scale(self.value_scale) + } + pub fn from_refblock( + view: View<&'a Frame>, + AdvancedReference { + translation, + transform, + value_scale, + }: &AdvancedReference, + ) -> Self { + Self { + transform: Mat2 { + a: map_scalar8(transform.a), + b: map_scalar8(transform.b), + c: map_scalar8(transform.c), + d: map_scalar8(transform.d), + }, + translation: Vec2 { + x: map_scalar8(translation.x), + y: map_scalar8(translation.y), + }, + value_scale: map_scalar8(*value_scale), + view, + } } } -- cgit v1.2.3-70-g09d2