aboutsummaryrefslogtreecommitdiff
path: root/evc/src/frame.rs
diff options
context:
space:
mode:
Diffstat (limited to 'evc/src/frame.rs')
-rw-r--r--evc/src/frame.rs65
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)]
- }
-}