diff options
Diffstat (limited to 'old/dhwt-codec/src/trim.rs')
-rw-r--r-- | old/dhwt-codec/src/trim.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/old/dhwt-codec/src/trim.rs b/old/dhwt-codec/src/trim.rs new file mode 100644 index 0000000..85a920a --- /dev/null +++ b/old/dhwt-codec/src/trim.rs @@ -0,0 +1,36 @@ +use crate::io::{Value, TWO, ZERO}; +use std::ops::{Index, IndexMut}; + +pub fn trim<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( + size: usize, + a: &mut X, +) { + let half = size / 2; + let quarter = size / 4; + for i in 0..(size / 2 / 4) { + let hi = half + i * 4; + let qi = quarter + i * 2; + a[qi] = (a[qi + 0] + a[qi + 1]) / TWO; + a[qi + 1] = (a[hi + 0] + a[hi + 1] + a[hi + 2] + a[hi + 3]) / (TWO * TWO); + } + for i in half..size { + a[i] = ZERO; + } +} + +pub fn untrim<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( + size: usize, + a: &mut X, +) { + let half = size / 2; + let quarter = size / 4; + for i in 0..(size / 2 / 4) { + let hi = half + i * 4; + let qi = quarter + i * 2; + a[hi + 0] = a[qi + 1]; + a[hi + 1] = a[qi + 1]; + a[hi + 2] = a[qi + 1]; + a[hi + 3] = a[qi + 1]; + a[qi + 1] = a[qi]; + } +} |