diff --git a/vstools/enums/other.py b/vstools/enums/other.py index db0cc99..04942cb 100644 --- a/vstools/enums/other.py +++ b/vstools/enums/other.py @@ -174,7 +174,8 @@ def from_clip(cls: type[SarSelf], clip: HoldsPropValueT) -> SarSelf: if isinstance(clip, vs.RawFrame): props = clip.props elif isinstance(clip, vs.RawNode): - props = clip.get_frame(0).props + with clip.get_frame(0) as frame: + props = frame.props.copy() else: props = clip diff --git a/vstools/exceptions/color.py b/vstools/exceptions/color.py index bcbe3f5..0a2d56a 100644 --- a/vstools/exceptions/color.py +++ b/vstools/exceptions/color.py @@ -60,7 +60,7 @@ def check(func: FuncExceptT, to_check: vs.VideoNode) -> None: """ try: - to_check.get_frame(0) + to_check.get_frame(0).close() except vs.Error as e: if 'no path between colorspaces' in str(e): raise InvalidColorspacePathError(func, e) diff --git a/vstools/functions/heuristics.py b/vstools/functions/heuristics.py index 5689fe2..d2f692a 100644 --- a/vstools/functions/heuristics.py +++ b/vstools/functions/heuristics.py @@ -59,7 +59,8 @@ def video_heuristics( heuristics = dict[str, PropEnum]() if props is True: - props_dict = clip.get_frame(0).props + with clip.get_frame(0) as frame: + props_dict = frame.props.copy() else: props_dict = props or None diff --git a/vstools/utils/info.py b/vstools/utils/info.py index e4f0197..141679d 100644 --- a/vstools/utils/info.py +++ b/vstools/utils/info.py @@ -30,7 +30,8 @@ def get_var_infos(frame: vs.VideoNode | vs.VideoFrame) -> tuple[vs.VideoFormat, if isinstance(frame, vs.VideoNode) and not ( frame.width and frame.height and frame.format ): - frame = frame.get_frame(0) + with frame.get_frame(0) as frame: + return get_var_infos(frame) assert frame.format diff --git a/vstools/utils/misc.py b/vstools/utils/misc.py index d979842..f9c8b6a 100644 --- a/vstools/utils/misc.py +++ b/vstools/utils/misc.py @@ -85,10 +85,10 @@ def match_clip( clip = clip.resize.Bicubic(format=ref.format.id, matrix=Matrix.from_video(ref)) if matrices: - ref_frame = ref.get_frame(0) - clip = clip.std.SetFrameProps( - _Matrix=Matrix(ref_frame), _Transfer=Transfer(ref_frame), _Primaries=Primaries(ref_frame) - ) + with ref.get_frame(0) as ref_frame: + clip = clip.std.SetFrameProps( + _Matrix=Matrix(ref_frame), _Transfer=Transfer(ref_frame), _Primaries=Primaries(ref_frame) + ) return clip.std.AssumeFPS(fpsnum=ref.fps.numerator, fpsden=ref.fps.denominator) diff --git a/vstools/utils/props.py b/vstools/utils/props.py index 43c2475..da6ac59 100644 --- a/vstools/utils/props.py +++ b/vstools/utils/props.py @@ -78,7 +78,8 @@ def get_prop( if isinstance(obj, vs.RawFrame): props = obj.props elif isinstance(obj, vs.RawNode): - props = obj.get_frame(0).props + with obj.get_frame(0) as frame: + props = frame.props.copy() else: props = obj diff --git a/vstools/utils/vs_proxy.py b/vstools/utils/vs_proxy.py index 2b8d2c3..75269d5 100644 --- a/vstools/utils/vs_proxy.py +++ b/vstools/utils/vs_proxy.py @@ -169,10 +169,10 @@ def clear_cache() -> None: try: for output in get_outputs().values(): if isinstance(output, VideoOutputTuple): - output.clip.get_frame(0) + output.clip.get_frame(0).close() break except Exception: - core.std.BlankClip().get_frame(0) + core.std.BlankClip().get_frame(0).close() core.max_cache_size = cache_size except Exception: ...