diff options
author | metamuffin <metamuffin@disroot.org> | 2022-12-07 23:08:11 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-12-07 23:08:11 +0100 |
commit | 8b7792d6aa27578221fee7cc8be1ceb202602a5a (patch) | |
tree | 0675d17e616482b606fbf656575fe56144b7a361 /evc/src | |
parent | e4704f1ba3ff7d9c75714d432768ce12f630e745 (diff) | |
download | video-codec-experiments-8b7792d6aa27578221fee7cc8be1ceb202602a5a.tar video-codec-experiments-8b7792d6aa27578221fee7cc8be1ceb202602a5a.tar.bz2 video-codec-experiments-8b7792d6aa27578221fee7cc8be1ceb202602a5a.tar.zst |
implement broken value scale
Diffstat (limited to 'evc/src')
-rw-r--r-- | evc/src/bin/encode.rs | 5 | ||||
-rw-r--r-- | evc/src/codec/encode.rs | 9 | ||||
-rw-r--r-- | evc/src/helpers/pixel.rs | 3 | ||||
-rw-r--r-- | evc/src/refsampler.rs | 4 |
4 files changed, 16 insertions, 5 deletions
diff --git a/evc/src/bin/encode.rs b/evc/src/bin/encode.rs index 6f3f0a7..fe03023 100644 --- a/evc/src/bin/encode.rs +++ b/evc/src/bin/encode.rs @@ -26,6 +26,9 @@ pub struct EncodeArgs { #[arg(short, long, default_value = "8")] jobs: usize, + #[arg(short, long, default_value = "8")] + min_block_size: isize, + #[arg(short = 't', long, default_value = "100")] ref_thres: f64, #[arg(short = 'T', long)] @@ -43,7 +46,7 @@ fn main() -> anyhow::Result<()> { mode: args.mode, ref_thres: args.ref_thres, max_diff_area: 10_000, - min_block_size: 8, + min_block_size: args.min_block_size, max_threads: args.jobs, }; diff --git a/evc/src/codec/encode.rs b/evc/src/codec/encode.rs index c9a1172..4eb86b5 100644 --- a/evc/src/codec/encode.rs +++ b/evc/src/codec/encode.rs @@ -6,7 +6,7 @@ use crate::{ view::View, }; use clap::ValueEnum; -use log::{debug, trace}; +use log::debug; #[derive(Debug, Clone)] pub struct EncodeConfig { @@ -78,7 +78,6 @@ pub fn encode_block(view: View<&Frame>, prev: View<&Frame>, config: &EncodeConfi let mut p = params.clone(); f(&mut p); let d = View::diff_sampler(view, &Sampler::from_refblock(prev.clone(), &p)); - trace!("best={diff} try={d}"); if d < *diff { *diff = d; *params = p; @@ -86,6 +85,7 @@ pub fn encode_block(view: View<&Frame>, prev: View<&Frame>, config: &EncodeConfi } let (mut d, mut p) = (diff, params.clone()); + pk(&view, &prev, &mut d, &mut p, |p| p.translation.x += 4); pk(&view, &prev, &mut d, &mut p, |p| p.translation.x -= 4); pk(&view, &prev, &mut d, &mut p, |p| p.translation.y += 4); @@ -98,6 +98,10 @@ pub fn encode_block(view: View<&Frame>, prev: View<&Frame>, config: &EncodeConfi pk(&view, &prev, &mut d, &mut p, |p| p.translation.x -= 1); pk(&view, &prev, &mut d, &mut p, |p| p.translation.y += 1); pk(&view, &prev, &mut d, &mut p, |p| p.translation.y -= 1); + + pk(&view, &prev, &mut d, &mut p, |p| p.value_scale += 1); + pk(&view, &prev, &mut d, &mut p, |p| p.value_scale -= 1); + pk(&view, &prev, &mut d, &mut p, |p| p.transform.a -= 1); pk(&view, &prev, &mut d, &mut p, |p| p.transform.a += 1); pk(&view, &prev, &mut d, &mut p, |p| p.transform.b -= 1); @@ -106,6 +110,7 @@ pub fn encode_block(view: View<&Frame>, prev: View<&Frame>, config: &EncodeConfi pk(&view, &prev, &mut d, &mut p, |p| p.transform.c += 1); pk(&view, &prev, &mut d, &mut p, |p| p.transform.d -= 1); pk(&view, &prev, &mut d, &mut p, |p| p.transform.d += 1); + debug!("{diff} -> {d}"); if d >= diff { diff --git a/evc/src/helpers/pixel.rs b/evc/src/helpers/pixel.rs index f7d6621..964040d 100644 --- a/evc/src/helpers/pixel.rs +++ b/evc/src/helpers/pixel.rs @@ -29,6 +29,7 @@ impl Pixel { ); SQRT[rd + gd + bd] } + #[inline] pub fn average(a: Pixel, b: Pixel) -> Pixel { //? this functions is broken @@ -39,6 +40,8 @@ impl Pixel { b: (a.b >> 1) + (b.b >> 1), } } + + #[inline] pub fn scale(&self, factor: f32) -> Pixel { Pixel { r: ((self.r as f32) * factor).clamp(0.0, 255.0) as u8, diff --git a/evc/src/refsampler.rs b/evc/src/refsampler.rs index 16a0600..d6f2bb1 100644 --- a/evc/src/refsampler.rs +++ b/evc/src/refsampler.rs @@ -22,7 +22,7 @@ impl<'a> Sampler<'a> { pub fn sample(&self, p: Vec2<f32>) -> Pixel { self.view .sample(self.translation + self.transform.transform(p + self.halfsize) - self.halfsize) - // .scale(self.value_scale) + .scale(self.value_scale) } pub fn from_refblock( view: View<&'a Frame>, @@ -44,7 +44,7 @@ impl<'a> Sampler<'a> { x: map_scalar8(translation.x), y: map_scalar8(translation.y), }, - value_scale: map_scalar8(*value_scale), + value_scale: 1.05f32.powf(*value_scale as f32), view, } } |