From 116b6fb3fe8d2e04493dd892b4fb69777d44302a Mon Sep 17 00:00:00 2001 From: cid-chan <76440879+cid-chan@users.noreply.github.com> Date: Wed, 24 Nov 2021 01:36:17 +0100 Subject: [PATCH 1/7] Add: New class that manages cores. --- vspreview/cores.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 vspreview/cores.py diff --git a/vspreview/cores.py b/vspreview/cores.py new file mode 100644 index 0000000..9ce5cb1 --- /dev/null +++ b/vspreview/cores.py @@ -0,0 +1,37 @@ +from vapoursynth import EnvironmentPolicy, EnvironmentPolicyAPI, register_policy +from vapoursynth EnvironmentData, Environment + + +__all__ = ("create_and_register_policy",) + + +class VSPreviewEnvironmentPolicy(object): + __slots__ = ("_current_environment", "_api") + _current_environment: EnvironmentData + _api: EnvironmentPolicyAPI + + def reload_core(self): + new_environment = self._api.create_environment() + old_environment = self._current_environment + self._current_environment = new_environment + self._api.destroy_environment(old) + + def on_policy_registered(self, special_api: EnvironmentPolicyAPI): + self._current_environment = special_api.create_environment() + self._api = special_api + + def on_policy_cleared(self): + pass + + def get_current_environment(self) -> EnvironmentData: + return self._current_environment + + def set_environment(self, environment -> EnvironmentData): + if environment != self._current_environment: + raise ValueError("The passed environment is not valid.") + + +def create_and_register_policy() -> VSPreviewEnvironmentPolicy: + policy = VSPreviewEnvironmentPolicy() + register_policy(policy) + return policy From 83d00553e2c47ed1c965c6d6e452bd6ced9a7052 Mon Sep 17 00:00:00 2001 From: cid-chan <76440879+cid-chan@users.noreply.github.com> Date: Wed, 24 Nov 2021 01:41:40 +0100 Subject: [PATCH 2/7] Add: Create a new core on reload --- vspreview/cores.py | 4 ++-- vspreview/main.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/vspreview/cores.py b/vspreview/cores.py index 9ce5cb1..72a4329 100644 --- a/vspreview/cores.py +++ b/vspreview/cores.py @@ -1,5 +1,5 @@ from vapoursynth import EnvironmentPolicy, EnvironmentPolicyAPI, register_policy -from vapoursynth EnvironmentData, Environment +from vapoursynth import EnvironmentData, Environment __all__ = ("create_and_register_policy",) @@ -14,7 +14,7 @@ def reload_core(self): new_environment = self._api.create_environment() old_environment = self._current_environment self._current_environment = new_environment - self._api.destroy_environment(old) + self._api.destroy_environment(old_environment) def on_policy_registered(self, special_api: EnvironmentPolicyAPI): self._current_environment = special_api.create_environment() diff --git a/vspreview/main.py b/vspreview/main.py index a5d2ac1..20b4d63 100644 --- a/vspreview/main.py +++ b/vspreview/main.py @@ -1,5 +1,13 @@ from __future__ import annotations +# import vspreview.cores as early as possible: +# This is so other modules cannot accidentally +# use and lock us into a different policy. +from vspreview.cores import create_and_register_policy +policy = create_and_register_policy() + +# And now back to our regular programing: + import logging import os from pathlib import Path @@ -9,6 +17,7 @@ from PyQt5 import Qt import vapoursynth as vs + from vspreview.core import ( AbstractMainWindow, AbstractToolbar, AbstractToolbars, Frame, FrameInterval, Output, Time, TimeInterval, @@ -608,6 +617,8 @@ def reload_script(self) -> None: vs.clear_outputs() self.graphics_scene.clear() self.outputs.clear() + policy.reload() + # make sure old filter graph is freed gc.collect() From 9a7032452dd53c852aaf783f4b4bfb6858513177 Mon Sep 17 00:00:00 2001 From: cid-chan <76440879+cid-chan@users.noreply.github.com> Date: Wed, 24 Nov 2021 02:04:32 +0100 Subject: [PATCH 3/7] Remove: Unnecessary variable. --- vspreview/cores.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vspreview/cores.py b/vspreview/cores.py index 72a4329..696ff1f 100644 --- a/vspreview/cores.py +++ b/vspreview/cores.py @@ -11,9 +11,8 @@ class VSPreviewEnvironmentPolicy(object): _api: EnvironmentPolicyAPI def reload_core(self): - new_environment = self._api.create_environment() old_environment = self._current_environment - self._current_environment = new_environment + self._current_environment = self._api.create_environment() self._api.destroy_environment(old_environment) def on_policy_registered(self, special_api: EnvironmentPolicyAPI): From 56019a952686e0b688e7affda285793679bec3a5 Mon Sep 17 00:00:00 2001 From: cid-chan <76440879+cid-chan@users.noreply.github.com> Date: Wed, 24 Nov 2021 12:42:53 +0100 Subject: [PATCH 4/7] Fix: Wrong method name. It was 2AM, ok? Co-authored-by: FichteFoll --- vspreview/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vspreview/main.py b/vspreview/main.py index 20b4d63..0022f41 100644 --- a/vspreview/main.py +++ b/vspreview/main.py @@ -617,7 +617,7 @@ def reload_script(self) -> None: vs.clear_outputs() self.graphics_scene.clear() self.outputs.clear() - policy.reload() + policy.reload_core() # make sure old filter graph is freed gc.collect() From c85f4c15a91ef4bf9d9431a6faa203eef93ac0a2 Mon Sep 17 00:00:00 2001 From: Sarah Date: Thu, 25 Nov 2021 17:14:28 +0100 Subject: [PATCH 5/7] Fix: Typo in set_environment --- vspreview/cores.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vspreview/cores.py b/vspreview/cores.py index 696ff1f..3a00ec4 100644 --- a/vspreview/cores.py +++ b/vspreview/cores.py @@ -25,7 +25,7 @@ def on_policy_cleared(self): def get_current_environment(self) -> EnvironmentData: return self._current_environment - def set_environment(self, environment -> EnvironmentData): + def set_environment(self, environment) -> EnvironmentData: if environment != self._current_environment: raise ValueError("The passed environment is not valid.") From c14df1b53aa657961eed15c01f8e55417e85e119 Mon Sep 17 00:00:00 2001 From: Sarah Date: Thu, 25 Nov 2021 18:44:09 +0100 Subject: [PATCH 6/7] Improvement: Clean up imports --- vspreview/cores.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vspreview/cores.py b/vspreview/cores.py index 3a00ec4..270ca57 100644 --- a/vspreview/cores.py +++ b/vspreview/cores.py @@ -1,5 +1,5 @@ -from vapoursynth import EnvironmentPolicy, EnvironmentPolicyAPI, register_policy -from vapoursynth import EnvironmentData, Environment +from vapoursynth import EnvironmentPolicyAPI, register_policy +from vapoursynth import EnvironmentData __all__ = ("create_and_register_policy",) From 2b4500a55e8fd4da879e5a0640db07b4cc2f5f40 Mon Sep 17 00:00:00 2001 From: Sarah Date: Thu, 25 Nov 2021 18:45:27 +0100 Subject: [PATCH 7/7] Fix: Trying to make it weak referentiable. --- vspreview/cores.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vspreview/cores.py b/vspreview/cores.py index 270ca57..72957b8 100644 --- a/vspreview/cores.py +++ b/vspreview/cores.py @@ -5,8 +5,7 @@ __all__ = ("create_and_register_policy",) -class VSPreviewEnvironmentPolicy(object): - __slots__ = ("_current_environment", "_api") +class VSPreviewEnvironmentPolicy: _current_environment: EnvironmentData _api: EnvironmentPolicyAPI