aboutsummaryrefslogtreecommitdiff
path: root/mtree-test/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-05 22:54:55 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-05 22:54:55 +0200
commit2c09942bc1af0a1f41c0e3ee52323deede19e6bd (patch)
treeeead04853ea85c2c157c31c74aa289bdf3cb5cdc /mtree-test/src/lib.rs
parenta34a44ac915dbeb271d3e16b8f7b0a33a743e95c (diff)
downloadvideo-codec-experiments-2c09942bc1af0a1f41c0e3ee52323deede19e6bd.tar
video-codec-experiments-2c09942bc1af0a1f41c0e3ee52323deede19e6bd.tar.bz2
video-codec-experiments-2c09942bc1af0a1f41c0e3ee52323deede19e6bd.tar.zst
a
Diffstat (limited to 'mtree-test/src/lib.rs')
-rw-r--r--mtree-test/src/lib.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/mtree-test/src/lib.rs b/mtree-test/src/lib.rs
index e69de29..1214cbf 100644
--- a/mtree-test/src/lib.rs
+++ b/mtree-test/src/lib.rs
@@ -0,0 +1,29 @@
+use glam::I16Vec2;
+
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct AbsRef {
+ pub off: I16Vec2,
+ pub frame: u64,
+}
+
+pub struct Frame(pub Vec<u8>);
+impl Frame {
+ 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 get(&self, res: I16Vec2, p: I16Vec2) -> [u8; 3] {
+ self.index(res, p).map(|i| self.0[i])
+ }
+}