aboutsummaryrefslogtreecommitdiff
path: root/mtree-test/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-07 15:10:30 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-07 15:10:30 +0200
commit736ebd6102eb5df134acbda8aac94f034d5bebe4 (patch)
tree20a0414da6a42a2b786fbfe28eb020abeee4597f /mtree-test/src/lib.rs
parente2a36c1e5822e533983a9640d7c08cb82812be67 (diff)
downloadvideo-codec-experiments-736ebd6102eb5df134acbda8aac94f034d5bebe4.tar
video-codec-experiments-736ebd6102eb5df134acbda8aac94f034d5bebe4.tar.bz2
video-codec-experiments-736ebd6102eb5df134acbda8aac94f034d5bebe4.tar.zst
test2
Diffstat (limited to 'mtree-test/src/lib.rs')
-rw-r--r--mtree-test/src/lib.rs100
1 files changed, 0 insertions, 100 deletions
diff --git a/mtree-test/src/lib.rs b/mtree-test/src/lib.rs
deleted file mode 100644
index fd282db..0000000
--- a/mtree-test/src/lib.rs
+++ /dev/null
@@ -1,100 +0,0 @@
-use glam::{I16Vec2, i16vec2};
-use std::{collections::VecDeque, ops::Range};
-
-pub const BLOCK_SIZE: i16 = 8;
-
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub struct AbsRef {
- pub off: I16Vec2,
- pub frame: u64,
-}
-
-#[derive(Clone)]
-pub struct Frame(pub Vec<u8>);
-
-impl Frame {
- pub fn new(res: I16Vec2) -> Self {
- let res = res.as_usizevec2();
- Self(vec![0; res.x * res.y + 2 * (res.x / 2 * res.y / 2)])
- }
-
- pub fn index(&self, res: I16Vec2, p: I16Vec2) -> [usize; 3] {
- let res = res.as_usizevec2();
- let p = p.as_usizevec2();
-
- let ystride = res.y;
- let ysize = res.x * ystride;
- let uvstride = res.x / 2;
- let usize = uvstride * (res.y / 2);
- let puv = p / 2;
- [
- p.x + p.y * ystride,
- ysize + puv.x + puv.y * uvstride,
- ysize + usize + puv.x + puv.y * uvstride,
- ]
- }
- pub fn slice(&self, res: I16Vec2, y: i16, x: Range<i16>) -> [&[u8]; 3] {
- let start = self.index(res, i16vec2(x.start, y));
- let end = self.index(res, i16vec2(x.end, y));
- [
- &self.0[start[0]..end[0]],
- &self.0[start[1]..end[1]],
- &self.0[start[2]..end[2]],
- ]
- }
- pub fn get(&self, res: I16Vec2, p: I16Vec2) -> [u8; 3] {
- self.index(res, p).map(|i| self.0[i])
- }
-
- pub fn export_rect(&self, res: I16Vec2, r: Range<I16Vec2>, out: &mut Vec<u8>) {
- for y in r.start.y..r.end.y {
- let slices = self.slice(res, y, r.start.x..r.end.x);
- out.extend(slices[0]);
- out.extend(slices[1]);
- out.extend(slices[2]);
- }
- }
- pub fn import_rect(&mut self, res: I16Vec2, r: Range<I16Vec2>, mut data: &[u8]) -> usize {
- let mut off = 0;
- for y in r.start.y..r.end.y {
- let start = self.index(res, i16vec2(r.start.x, y));
- let end = self.index(res, i16vec2(r.end.x, y));
-
- let mut do_slice = |s: &mut [u8]| {
- s.copy_from_slice(&data[..s.len()]);
- data = &data[s.len()..];
- off += s.len();
- };
-
- do_slice(&mut self.0[start[0]..end[0]]);
- do_slice(&mut self.0[start[1]..end[1]]);
- do_slice(&mut self.0[start[2]..end[2]]);
- }
- off
- }
-}
-
-pub fn frame_to_frame_rect_copy(
- res: I16Vec2,
- aframe: &mut Frame,
- bframe: &Frame,
- size: I16Vec2,
- aoff: I16Vec2,
- boff: I16Vec2,
-) {
- for y in 0..size.y {
- let astart = aframe.index(res, i16vec2(aoff.x, aoff.y + y));
- let aend = aframe.index(res, i16vec2(aoff.x + size.x, aoff.y + y));
- let bstart = bframe.index(res, i16vec2(boff.x, boff.y + y));
- let bend = bframe.index(res, i16vec2(boff.x + size.x, boff.y + y));
-
- aframe.0[astart[0]..aend[0]].copy_from_slice(&bframe.0[bstart[0]..bend[0]]);
- aframe.0[astart[1]..aend[1]].copy_from_slice(&bframe.0[bstart[1]..bend[1]]);
- aframe.0[astart[2]..aend[2]].copy_from_slice(&bframe.0[bstart[2]..bend[2]]);
- }
-}
-
-pub struct LastFrames {
- pub frame_offset: u64,
- pub frames: VecDeque<Frame>,
-}