aboutsummaryrefslogtreecommitdiff
path: root/evc/src/helpers
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-07 21:23:42 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-07 21:23:42 +0100
commit2ac18802b58d671c10538e78d50a620baad9a188 (patch)
tree17f924039fd8f3dae2801902d4bdeaac8ea74624 /evc/src/helpers
parent9d7986bbfd44b69a623fa29528b5d13000b91c77 (diff)
downloadvideo-codec-experiments-2ac18802b58d671c10538e78d50a620baad9a188.tar
video-codec-experiments-2ac18802b58d671c10538e78d50a620baad9a188.tar.bz2
video-codec-experiments-2ac18802b58d671c10538e78d50a620baad9a188.tar.zst
advanced transform
Diffstat (limited to 'evc/src/helpers')
-rw-r--r--evc/src/helpers/matrix.rs2
-rw-r--r--evc/src/helpers/pixel.rs8
-rw-r--r--evc/src/helpers/vector.rs9
3 files changed, 16 insertions, 3 deletions
diff --git a/evc/src/helpers/matrix.rs b/evc/src/helpers/matrix.rs
index 92f46b2..87c0e7d 100644
--- a/evc/src/helpers/matrix.rs
+++ b/evc/src/helpers/matrix.rs
@@ -9,6 +9,7 @@ pub struct Mat2<T> {
}
impl<T: std::ops::Mul<Output = T> + std::ops::Add<Output = T> + Copy> Mat2<T> {
+ #[inline]
pub fn transform(&self, v: Vec2<T>) -> Vec2<T> {
Vec2 {
x: self.a * v.x + self.b * v.x,
@@ -19,6 +20,7 @@ impl<T: std::ops::Mul<Output = T> + std::ops::Add<Output = T> + Copy> Mat2<T> {
impl<T: std::ops::Mul<Output = T> + std::ops::Add<Output = T> + Copy> std::ops::Mul for Mat2<T> {
type Output = Mat2<T>;
+ #[inline]
fn mul(self, rhs: Mat2<T>) -> Mat2<T> {
let (x, y) = (self, rhs);
Mat2 {
diff --git a/evc/src/helpers/pixel.rs b/evc/src/helpers/pixel.rs
index 7b7c8d5..f7d6621 100644
--- a/evc/src/helpers/pixel.rs
+++ b/evc/src/helpers/pixel.rs
@@ -31,10 +31,12 @@ impl Pixel {
}
#[inline]
pub fn average(a: Pixel, b: Pixel) -> Pixel {
+ //? this functions is broken
+ // TODO dont loose accuracy
Pixel {
- r: (a.r >> 2) + (b.r >> 2),
- g: (a.g >> 2) + (b.g >> 2),
- b: (a.b >> 2) + (b.b >> 2),
+ r: (a.r >> 1) + (b.r >> 1),
+ g: (a.g >> 1) + (b.g >> 1),
+ b: (a.b >> 1) + (b.b >> 1),
}
}
pub fn scale(&self, factor: f32) -> Pixel {
diff --git a/evc/src/helpers/vector.rs b/evc/src/helpers/vector.rs
index 12243e4..f411832 100644
--- a/evc/src/helpers/vector.rs
+++ b/evc/src/helpers/vector.rs
@@ -24,6 +24,15 @@ impl<T: std::ops::Div<Output = T> + Copy> Vec2<T> {
}
}
+impl<T: std::ops::Mul<Output = T> + Copy> Vec2<T> {
+ pub fn scale(&self, f: T) -> Self {
+ Self {
+ x: self.x * f,
+ y: self.y * f,
+ }
+ }
+}
+
impl Vec2<isize> {
pub fn x_only(&self) -> Self {
Self { x: self.x, y: 0 }