From 8b7792d6aa27578221fee7cc8be1ceb202602a5a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 7 Dec 2022 23:08:11 +0100 Subject: implement broken value scale --- evc/src/bin/encode.rs | 5 ++++- evc/src/codec/encode.rs | 9 +++++++-- evc/src/helpers/pixel.rs | 3 +++ evc/src/refsampler.rs | 4 ++-- 4 files changed, 16 insertions(+), 5 deletions(-) (limited to 'evc/src') 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) -> 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, } } -- cgit v1.2.3-70-g09d2