From af610b5c8e3675ee8fd7ef0d74eef0ce80ea934f Mon Sep 17 00:00:00 2001 From: emotion3459 <176516814+emotion3459@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:59:59 -0400 Subject: [PATCH] Correct value scaling and use scale_8bit where applicable (#126) --- vsdenoise/mvtools/mvtools.py | 4 ++-- vsdenoise/postprocess.py | 4 ++-- vsdenoise/prefilters.py | 9 +++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/vsdenoise/mvtools/mvtools.py b/vsdenoise/mvtools/mvtools.py index 390b2ad..40ff349 100644 --- a/vsdenoise/mvtools/mvtools.py +++ b/vsdenoise/mvtools/mvtools.py @@ -9,7 +9,7 @@ ColorRange, ConstantFormatVideoNode, CustomOverflowError, CustomRuntimeError, FieldBased, FieldBasedT, FuncExceptT, InvalidColorFamilyError, Keyframes, KwargsT, P, PlanesT, SceneChangeMode, Sentinel, check_ref_clip, check_variable, clamp, clip_async_render, core, depth, disallow_variable_format, disallow_variable_resolution, fallback, - kwargs_fallback, normalize_planes, normalize_seq, scale_value, vs + kwargs_fallback, normalize_planes, normalize_seq, scale_8bit, vs ) from ..prefilters import PelType, Prefilter, prefilter_to_full_range @@ -789,7 +789,7 @@ def degrain( '"limit" values should be between 0 and 255 (inclusive)!', self.degrain ) - limitf, limitCf = scale_value(limit, 8, ref, ColorRange.FULL), scale_value(limitC, 8, ref, ColorRange.FULL) + limitf, limitCf = scale_8bit(ref, limit), scale_8bit(ref, limitC) thSCD1, thSCD2 = self.normalize_thscd(thSCD, thSAD, self.degrain) diff --git a/vsdenoise/postprocess.py b/vsdenoise/postprocess.py index ff63546..4c45f03 100644 --- a/vsdenoise/postprocess.py +++ b/vsdenoise/postprocess.py @@ -10,7 +10,7 @@ from vsrgtools.util import norm_rmode_planes from vstools import ( CustomIndexError, CustomIntEnum, FuncExceptT, InvalidColorFamilyError, KwargsT, PlanesT, check_ref_clip, - check_variable, fallback, flatten_vnodes, get_y, normalize_planes, scale_8bit, scale_value, vs + ColorRange, check_variable, fallback, flatten_vnodes, get_y, normalize_planes, scale_8bit, scale_value, vs ) from .fft import DFTTest, fft3d @@ -94,7 +94,7 @@ def decrease_size( if pm_min > pm_max: raise CustomIndexError('The mask min must be lower than max!', decrease_size, dict(min=pm_min, max=pm_max)) - pm_min, pm_max = scale_value(pm_min, 32, clip), scale_value(pm_max, 32, clip) + pm_min, pm_max = scale_value(pm_min, 32, clip, ColorRange.FULL), scale_value(pm_max, 32, clip, ColorRange.FULL) yuv444 = Bilinear.resample( range_mask(clip, rad=3, radc=2), clip.format.replace(subsampling_h=0, subsampling_w=0) diff --git a/vsdenoise/prefilters.py b/vsdenoise/prefilters.py index 550e37a..5c307cf 100644 --- a/vsdenoise/prefilters.py +++ b/vsdenoise/prefilters.py @@ -16,8 +16,7 @@ from vstools import ( MISSING, ColorRange, ConvMode, CustomEnum, CustomIntEnum, CustomRuntimeError, MissingT, PlanesT, SingleOrArr, SingleOrArrOpt, check_variable, clamp, core, depth, disallow_variable_format, disallow_variable_resolution, - get_depth, get_neutral_value, get_peak_value, get_y, join, normalize_planes, normalize_seq, scale_8bit, scale_value, - split, vs + get_neutral_value, get_peak_value, get_y, join, normalize_planes, normalize_seq, scale_8bit, split, vs ) from .bm3d import BM3D as BM3DM @@ -65,7 +64,6 @@ def _run(clip: vs.VideoNode, planes: PlanesT, **kwargs: Any) -> vs.VideoNode: pref_type = Prefilter.MINBLUR3 if self == Prefilter.AUTO else self - bits = get_depth(clip) peak = get_peak_value(clip) planes = normalize_planes(clip, planes) @@ -98,7 +96,7 @@ def _run(clip: vs.VideoNode, planes: PlanesT, **kwargs: Any) -> vs.VideoNode: if pref_type == Prefilter.DFTTEST: dftt = DFTTest(sloc={0.0: 4, 0.2: 9, 1.0: 15}, tr=0).denoise(clip, **kwargs) - i, j = (scale_value(x, 8, bits, range_out=ColorRange.FULL) for x in (16, 75)) + i, j = (scale_8bit(clip, x) for x in (16, 75)) pref_mask = norm_expr( get_y(clip), @@ -855,7 +853,6 @@ def prefilter_to_full_range(pref: vs.VideoNode, range_conversion: float, planes: assert (fmt := work_clip.format) and pref.format - bits = get_depth(pref) is_integer = fmt.sample_type == vs.INTEGER # Luma expansion TV->PC (up to 16% more values for motion estimation) @@ -886,7 +883,7 @@ def prefilter_to_full_range(pref: vs.VideoNode, range_conversion: float, planes: elif range_conversion > 0.0: pref_full = retinex(work_clip, upper_thr=range_conversion, fast=False) else: - pref_full = depth(work_clip, bits, range_out=ColorRange.FULL, range_in=ColorRange.LIMITED) + pref_full = depth(work_clip, pref, range_out=ColorRange.FULL, range_in=ColorRange.LIMITED) if chroma: return join(pref_full, *chroma, family=pref.format.color_family)