diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-07 16:17:44 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-07 16:17:44 +0200 |
commit | 24ecbd5e91f125bd68a4d538eeb5a9839f16a4e6 (patch) | |
tree | e902614fc7a66b110e6863d5b10fa494e157bdad /test2/src/decode.rs | |
parent | e33685969d072f369ea2f30c08403f6b3a8e8686 (diff) | |
download | video-codec-experiments-24ecbd5e91f125bd68a4d538eeb5a9839f16a4e6.tar video-codec-experiments-24ecbd5e91f125bd68a4d538eeb5a9839f16a4e6.tar.bz2 video-codec-experiments-24ecbd5e91f125bd68a4d538eeb5a9839f16a4e6.tar.zst |
bugs everywhere
Diffstat (limited to 'test2/src/decode.rs')
-rw-r--r-- | test2/src/decode.rs | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/test2/src/decode.rs b/test2/src/decode.rs index 974c6d9..da0538b 100644 --- a/test2/src/decode.rs +++ b/test2/src/decode.rs @@ -1,20 +1,43 @@ +use crate::{BLOCK_SIZE, Frame}; use framework::BitstreamFilter; -use glam::{I16Vec2, i16vec2}; +use glam::{IVec2, ivec2}; pub struct Dec { - res: I16Vec2, + res: IVec2, + last: Frame, } impl BitstreamFilter for Dec { const INPUT_CODEC_ID: &str = "V_VCETEST2"; const OUTPUT_CODEC_ID: &str = "V_UNCOMPRESSED"; fn new(width: u32, height: u32) -> Self { + let res = ivec2(width as i32, height as i32); Self { - res: i16vec2(width as i16, height as i16), + res, + last: Frame::new(res), } } fn process_block(&mut self, a: Vec<u8>) -> Vec<u8> { - a + let mut buf = a.as_slice(); + let mut frame = Frame::new(self.res); + for by in 0..frame.res.y / BLOCK_SIZE { + for bx in 0..frame.res.x / BLOCK_SIZE { + let boff = ivec2(bx * BLOCK_SIZE, by * BLOCK_SIZE); + + let reloff = ivec2(buf[0] as i32 - 127, buf[1] as i32 - 127); + buf = &buf[2..]; + + let roff = reloff + boff; + + Frame::copy_block(&self.last, &mut frame, roff, boff); + + let size = frame.import_block_diff(boff, buf); + buf = &buf[size..]; + } + } + + self.last = frame.clone(); + frame.data } } |