| 29 | |
| 30 | |
| 31 | class _DefineScaler: |
| 32 | def __init__(self, kernel: str, b: Union[float, int] = 0, c: Union[float, int] = 0, taps: int = 0): |
| 33 | """ |
| 34 | Get a scaler for getnative from descale |
| 35 | |
| 36 | :param kernel: kernel for descale |
| 37 | :param b: b value for kernel "bicubic" (default 0) |
| 38 | :param c: c value for kernel "bicubic" (default 0) |
| 39 | :param taps: taps value for kernel "lanczos" (default 0) |
| 40 | """ |
| 41 | |
| 42 | self.kernel = kernel |
| 43 | self.b = b |
| 44 | self.c = c |
| 45 | self.taps = taps |
| 46 | self.plugin = get_attr(core, 'descale', None) |
| 47 | if self.plugin is None: |
| 48 | return |
| 49 | |
| 50 | self.descaler = getattr(self.plugin, f'De{self.kernel}', None) |
| 51 | self.upscaler = getattr(core.resize, self.kernel.title()) |
| 52 | |
| 53 | self.check_input() |
| 54 | self.check_for_extra_paras() |
| 55 | |
| 56 | def check_for_extra_paras(self): |
| 57 | if self.kernel == 'bicubic': |
| 58 | self.descaler = partial(self.descaler, b=self.b, c=self.c) |
| 59 | self.upscaler = partial(self.upscaler, filter_param_a=self.b, filter_param_b=self.c) |
| 60 | elif self.kernel == 'lanczos': |
| 61 | self.descaler = partial(self.descaler, taps=self.taps) |
| 62 | self.upscaler = partial(self.upscaler, filter_param_a=self.taps) |
| 63 | |
| 64 | def check_input(self): |
| 65 | if self.descaler is None and self.kernel == "spline64": |
| 66 | raise GetnativeException(f'descale: spline64 support is missing, update descale (>r3).') |
| 67 | elif self.descaler is None: |
| 68 | raise GetnativeException(f'descale: {self.kernel} is not a supported kernel.') |
| 69 | |
| 70 | def __str__(self): |
| 71 | return ( |
| 72 | f"{self.kernel.capitalize()}" |
| 73 | f"{'' if self.kernel != 'bicubic' else f' b {self.b:.2f} c {self.c:.2f}'}" |
| 74 | f"{'' if self.kernel != 'lanczos' else f' taps {self.taps}'}" |
| 75 | ) |
| 76 | |
| 77 | def __repr__(self): |
| 78 | return ( |
| 79 | f"ScalerObject: " |
| 80 | f"{self.kernel.capitalize()}" |
| 81 | f"{'' if self.kernel != 'bicubic' else f' b {self.b:.2f} c {self.c:.2f}'}" |
| 82 | f"{'' if self.kernel != 'lanczos' else f' taps {self.taps}'}" |
| 83 | ) |
| 84 | |
| 85 | |
| 86 | common_scaler = { |
no outgoing calls
no test coverage detected