aboutsummaryrefslogtreecommitdiff
path: root/evc/src/frame.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-12-06 07:47:51 +0100
committermetamuffin <metamuffin@disroot.org>2022-12-06 07:47:51 +0100
commitbafb1df8b7764a0a62f1c656eb52fbe7bfd8b8ac (patch)
tree0e824b9f85ba80ca0082fc8d8ec8bf96bf411823 /evc/src/frame.rs
parentcace782584d19674f70351f462e746d3d589ba90 (diff)
downloadvideo-codec-experiments-bafb1df8b7764a0a62f1c656eb52fbe7bfd8b8ac.tar
video-codec-experiments-bafb1df8b7764a0a62f1c656eb52fbe7bfd8b8ac.tar.bz2
video-codec-experiments-bafb1df8b7764a0a62f1c656eb52fbe7bfd8b8ac.tar.zst
decoder
Diffstat (limited to 'evc/src/frame.rs')
-rw-r--r--evc/src/frame.rs27
1 files changed, 23 insertions, 4 deletions
diff --git a/evc/src/frame.rs b/evc/src/frame.rs
index 6e565b6..1269bf2 100644
--- a/evc/src/frame.rs
+++ b/evc/src/frame.rs
@@ -1,4 +1,8 @@
-use crate::{pixel::Pixel, ser::Source, view::View};
+use crate::{
+ pixel::Pixel,
+ ser::{Sink, Source},
+ view::View,
+};
use std::{
io,
ops::{Index, IndexMut},
@@ -20,15 +24,30 @@ impl Frame {
}
pub fn read(source: &mut impl Source, size: (usize, usize)) -> io::Result<Self> {
let mut frame = Frame::new(size);
- for x in 0..size.0 {
- for y in 0..size.1 {
+ for y in 0..size.1 {
+ for x in 0..size.0 {
let pixel = source.get::<Pixel>()?;
frame[(x, y)] = pixel;
}
}
Ok(frame)
}
- pub fn view<'a>(&'a self, offset: (usize, usize), size: (usize, usize)) -> View<'a> {
+ pub fn write(&self, sink: &mut impl Sink) -> io::Result<()> {
+ for y in 0..self.size.1 {
+ for x in 0..self.size.0 {
+ sink.put(self[(x, y)])?;
+ }
+ }
+ Ok(())
+ }
+ pub fn view<'a>(&'a self, offset: (usize, usize), size: (usize, usize)) -> View<&'a Frame> {
+ View::new(self, offset, size)
+ }
+ pub fn view_mut<'a>(
+ &'a mut self,
+ offset: (usize, usize),
+ size: (usize, usize),
+ ) -> View<&'a mut Frame> {
View::new(self, offset, size)
}
}