diff options
author | metamuffin <metamuffin@disroot.org> | 2022-12-22 22:17:34 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-12-22 22:17:34 +0100 |
commit | cb2597ef6c3c11c11ba50021a5502efef1cf127a (patch) | |
tree | 837ce67b084a28eeddc099ee1f33860d7c9ba754 /evc | |
parent | 4df7c1f1cbe0c3f79eec6be2474aead263f166c8 (diff) | |
download | video-codec-experiments-cb2597ef6c3c11c11ba50021a5502efef1cf127a.tar video-codec-experiments-cb2597ef6c3c11c11ba50021a5502efef1cf127a.tar.bz2 video-codec-experiments-cb2597ef6c3c11c11ba50021a5502efef1cf127a.tar.zst |
trying to dct without success
Diffstat (limited to 'evc')
-rw-r--r-- | evc/src/codec/compress.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/evc/src/codec/compress.rs b/evc/src/codec/compress.rs index e011669..688f04b 100644 --- a/evc/src/codec/compress.rs +++ b/evc/src/codec/compress.rs @@ -65,7 +65,7 @@ pub fn lit_compress(w: usize, h: usize, pixels: &[Pixel]) -> Vec<u8> { norm_dct_channel(w, h, &mut ch); for i in 0..w * h { - out.push(ch[i] as u8) + out.push(unsafe { std::mem::transmute(ch[i] as i8) }); } } out @@ -75,7 +75,7 @@ pub fn lit_decompress(compressed: &[u8], mut target: View<&mut Frame>) { for ci in 0..3 { let mut ch = compressed[ci * w * h..(ci + 1) * w * h] .iter() - .map(|v| *v as f32) + .map(|v| unsafe { std::mem::transmute::<_, i8>(*v) } as f32) .collect::<Vec<_>>(); norm_idct_channel(w, h, &mut ch); for y in 0..h { @@ -111,11 +111,16 @@ fn norm_dct_channel(w: usize, h: usize, values: &mut [f32]) { let scale = 2. / (w as f32 * h as f32).sqrt(); for (i, v) in values_trans.iter().enumerate() { - values[i] = *v * scale + values[i] = *v * scale * 127.0 } } -fn norm_idct_channel(w: usize, h: usize, values: &mut [f32]) { +fn norm_idct_channel(h: usize, w: usize, values: &mut [f32]) { + let scale = 2. / (w as f32 * h as f32).sqrt(); + for v in values.iter_mut() { + *v /= scale * 127.0 + } + let d = DctPlanner::new().plan_dct2(w); let mut temp = vec![0.; d.get_scratch_len()]; for c in values.chunks_exact_mut(w) { @@ -128,22 +133,18 @@ fn norm_idct_channel(w: usize, h: usize, values: &mut [f32]) { for c in values_trans.chunks_exact_mut(h) { d.process_dct3_with_scratch(c, &mut temp) } - - let scale = 2. / (w as f32 * h as f32).sqrt(); - for (i, v) in values_trans.iter().enumerate() { - values[i] = *v * scale - } + values.copy_from_slice(&values_trans) } fn transpose(w: usize, h: usize, values: &[f32]) -> Vec<f32> { - let mut i = 0; + let mut io = 0; let mut it; let mut transposed = vec![0.; values.len()]; for row in 0..h { it = row; for _ in 0..w { - transposed[it] = values[i]; - i += 1; + transposed[it] = values[io]; + io += 1; it += h; } } |