aboutsummaryrefslogtreecommitdiff
path: root/evc/src/refsampler.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-07 20:38:00 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-07 20:38:00 +0100
commit9d7986bbfd44b69a623fa29528b5d13000b91c77 (patch)
tree8da95f328243a96acec6c3ea6ebddc71bb63f05c /evc/src/refsampler.rs
parent7be0d5039db7e8660bced13698178bf1d6758109 (diff)
downloadvideo-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.rs43
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,
+ }
}
}