diff options
Diffstat (limited to 'evc/src/frame.rs')
-rw-r--r-- | evc/src/frame.rs | 65 |
1 files changed, 1 insertions, 64 deletions
diff --git a/evc/src/frame.rs b/evc/src/frame.rs index 1906555..6e565b6 100644 --- a/evc/src/frame.rs +++ b/evc/src/frame.rs @@ -1,4 +1,4 @@ -use crate::{pixel::Pixel, ser::Source}; +use crate::{pixel::Pixel, ser::Source, view::View}; use std::{ io, ops::{Index, IndexMut}, @@ -46,66 +46,3 @@ impl IndexMut<(usize, usize)> for Frame { &mut self.buffer[x][y] } } - -pub struct View<'a> { - pub frame: &'a Frame, - pub offset: (usize, usize), - pub size: (usize, usize), -} - -impl<'a> View<'a> { - pub fn new(frame: &'a Frame, offset: (usize, usize), size: (usize, usize)) -> Self { - Self { - frame, - offset, - size, - } - } - pub fn diff(va: &Self, vb: &Self) -> f64 { - assert_eq!(va.size, vb.size); - let mut acc = 0.0; - for x in 0..va.size.0 { - for y in 0..va.size.1 { - let a = va[(x, y)]; - let b = vb[(x, y)]; - acc += Pixel::distance(a, b); - } - } - acc - } - pub fn split(&self) -> [Self; 2] { - let vert = self.size.0 > self.size.1; - [ - Self { - frame: self.frame, - offset: self.offset, - size: if vert { - (self.size.0 / 2, self.size.1) - } else { - (self.size.0, self.size.1 / 2) - }, - }, - Self { - frame: self.frame, - offset: if vert { - (self.offset.0 + self.size.0 / 2, self.offset.1) - } else { - (self.offset.0, self.offset.1 + self.size.1 / 2) - }, - size: if vert { - (self.size.0 - self.size.0 / 2, self.size.1) - } else { - (self.size.0, self.size.1 - self.size.1 / 2) - }, - }, - ] - } -} - -impl Index<(usize, usize)> for View<'_> { - type Output = Pixel; - #[inline] - fn index(&self, (x, y): (usize, usize)) -> &Self::Output { - &self.frame[(x + self.offset.0, y + self.offset.1)] - } -} |