diff options
author | metamuffin <metamuffin@disroot.org> | 2022-12-07 20:38:00 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-12-07 20:38:00 +0100 |
commit | 9d7986bbfd44b69a623fa29528b5d13000b91c77 (patch) | |
tree | 8da95f328243a96acec6c3ea6ebddc71bb63f05c /evc/src/refsampler.rs | |
parent | 7be0d5039db7e8660bced13698178bf1d6758109 (diff) | |
download | video-codec-experiments-9d7986bbfd44b69a623fa29528b5d13000b91c77.tar video-codec-experiments-9d7986bbfd44b69a623fa29528b5d13000b91c77.tar.bz2 video-codec-experiments-9d7986bbfd44b69a623fa29528b5d13000b91c77.tar.zst |
advanced translate
Diffstat (limited to 'evc/src/refsampler.rs')
-rw-r--r-- | evc/src/refsampler.rs | 43 |
1 files changed, 35 insertions, 8 deletions
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<f32>, - transform: Mat2<f32>, + pub translation: Vec2<f32>, + pub transform: Mat2<f32>, - value_scale: f32, + pub value_scale: f32, } -impl Sampler<'_> { +impl<'a> Sampler<'a> { #[inline] pub fn sample(&self, p: Vec2<f32>) -> 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, + } } } |