Skip to content

Commit 656da6b

Browse files
committed
RB: Free clips via vs_object
1 parent 247b03c commit 656da6b

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

vodesfunc/rescale_ext/base.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from vstools import FunctionUtil, KwargsT, vs, FieldBasedT, core, expect_bits, depth
1+
from vstools import FunctionUtil, KwargsT, vs, FieldBasedT, core, expect_bits, depth, vs_object
22
from vskernels import Kernel, Bilinear, Bicubic, Lanczos
3-
from typing import Self
3+
from typing import Self, MutableMapping, TYPE_CHECKING
44
from abc import abstractmethod
55

66
__all__ = ["RescaleBase", "RescaleNumbers", "descale_rescale"]
@@ -14,7 +14,7 @@ class RescaleNumbers:
1414
border_handling: int = 0
1515

1616

17-
class RescaleBase(RescaleNumbers):
17+
class RescaleBase(RescaleNumbers, vs_object):
1818
funcutil: FunctionUtil
1919
kernel: Kernel
2020
post_crop: KwargsT
@@ -38,6 +38,22 @@ def _return_creditmask(self) -> vs.VideoNode:
3838
def _return_linemask(self) -> vs.VideoNode:
3939
return self.linemask_clip if isinstance(self.linemask_clip, vs.VideoNode) else core.std.BlankClip(self.funcutil.work_clip)
4040

41+
def __vs_del__(self, core_id: int) -> None:
42+
if not TYPE_CHECKING:
43+
self.descaled = None
44+
self.rescaled = None
45+
self.upscaled = None
46+
self.doubled = None
47+
self.linemask_clip = None
48+
self.errormask_clip = None
49+
for v in self.__dict__.values():
50+
if not isinstance(v, MutableMapping):
51+
continue
52+
53+
for k2, v2 in v.items():
54+
if isinstance(v2, vs.VideoNode):
55+
v[k2] = None
56+
4157

4258
def descale_rescale(builder: RescaleBase, clip: vs.VideoNode, **kwargs: KwargsT) -> vs.VideoNode:
4359
kernel_args = KwargsT(border_handling=builder.border_handling)

0 commit comments

Comments
 (0)