diff --git a/src/ffx/cli.py b/src/ffx/cli.py index 4ed0793..bf7679b 100755 --- a/src/ffx/cli.py +++ b/src/ffx/cli.py @@ -1196,7 +1196,7 @@ def checkUniqueDispositions(context, mediaDescriptor: MediaDescriptor): @click.option( "--deinterlace", - type=click.Choice(("none", "default", "up_down", "hq_denoise")), + type=click.Choice(("none", "default", "up_down", "temp", "up_down_temp")), is_flag=False, flag_value="default", default="none", diff --git a/src/ffx/filter/deinterlace_filter.py b/src/ffx/filter/deinterlace_filter.py index 087ad9f..0dd2fe2 100644 --- a/src/ffx/filter/deinterlace_filter.py +++ b/src/ffx/filter/deinterlace_filter.py @@ -10,7 +10,8 @@ class DeinterlaceFilter(Filter): MODE_KEY = 'mode' DEFAULT_MODE = 'default' UP_DOWN_MODE = 'up_down' - HQ_DENOISE_MODE = 'hq_denoise' + TEMP_MODE = 'temp' + UP_DOWN_TEMP_MODE = 'up_down_temp' MODE_TOKENS = { DEFAULT_MODE: ['bwdif=mode=1'], @@ -19,10 +20,16 @@ class DeinterlaceFilter(Filter): 'scale=iw*2:ih*2:flags=lanczos', 'scale=iw/2:ih/2:flags=lanczos', ], - HQ_DENOISE_MODE: [ + TEMP_MODE: [ 'bwdif=mode=1', 'hqdn3d=1.5:1.5:3:3', ], + UP_DOWN_TEMP_MODE: [ + 'bwdif=mode=1', + 'scale=iw*2:ih*2:flags=lanczos', + 'scale=iw/2:ih/2:flags=lanczos', + 'hqdn3d=1.5:1.5:3:3', + ], } # DEFAULT_STRENGTH: float = 2.8 diff --git a/tests/unit/test_deinterlace_filter.py b/tests/unit/test_deinterlace_filter.py index a07d20c..9cb8011 100644 --- a/tests/unit/test_deinterlace_filter.py +++ b/tests/unit/test_deinterlace_filter.py @@ -35,14 +35,27 @@ class DeinterlaceFilterTest(unittest.TestCase): payload['tokens'], ) - def test_hq_denoise_mode_yields_hqdn3d_after_bwdif(self): - payload = self.getPayload(DeinterlaceFilter.HQ_DENOISE_MODE) + def test_temp_mode_yields_hqdn3d_after_bwdif(self): + payload = self.getPayload(DeinterlaceFilter.TEMP_MODE) self.assertEqual( ['bwdif=mode=1', 'hqdn3d=1.5:1.5:3:3'], payload['tokens'], ) + def test_up_down_temp_mode_yields_combined_filters_after_bwdif(self): + payload = self.getPayload(DeinterlaceFilter.UP_DOWN_TEMP_MODE) + + self.assertEqual( + [ + 'bwdif=mode=1', + 'scale=iw*2:ih*2:flags=lanczos', + 'scale=iw/2:ih/2:flags=lanczos', + 'hqdn3d=1.5:1.5:3:3', + ], + payload['tokens'], + ) + def test_unknown_mode_is_rejected(self): with self.assertRaisesRegex(ValueError, 'Unknown deinterlace mode: other'): DeinterlaceFilter(mode='other') @@ -52,10 +65,20 @@ class DeinterlaceFilterTest(unittest.TestCase): 'convert', ['--deinterlace', 'up_down'], ) + tempContext = convert.make_context( + 'convert', + ['--deinterlace', 'temp'], + ) + combinedContext = convert.make_context( + 'convert', + ['--deinterlace', 'up_down_temp'], + ) bareFlagContext = convert.make_context('convert', ['--deinterlace']) omittedContext = convert.make_context('convert', []) self.assertEqual('up_down', upDownContext.params['deinterlace']) + self.assertEqual('temp', tempContext.params['deinterlace']) + self.assertEqual('up_down_temp', combinedContext.params['deinterlace']) self.assertEqual('default', bareFlagContext.params['deinterlace']) self.assertEqual('none', omittedContext.params['deinterlace'])