Last active
April 7, 2021 10:19
-
-
Save rnixx/02b632f58d16e884a7d15341c0743241 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- video_ffpyplayer.py 2021-04-07 11:27:07.000952871 +0200 | |
+++ video.py 2021-04-07 11:27:09.336960012 +0200 | |
@@ -58,6 +58,7 @@ | |
from kivy.clock import Clock, mainthread | |
from kivy.logger import Logger | |
from kivy.core.video import VideoBase | |
+from kivy.core.window import Window | |
from kivy.graphics import Rectangle, BindTexture | |
from kivy.graphics.texture import Texture | |
from kivy.graphics.fbo import Fbo | |
@@ -111,7 +112,6 @@ | |
self._seek_queue = [] | |
self._ffplayer_need_quit = False | |
self._wakeup_queue = Queue(maxsize=1) | |
- self._trigger = Clock.create_trigger(self._redraw) | |
super(VideoFFPy, self).__init__(**kwargs) | |
@@ -211,7 +211,7 @@ | |
self._texture = fbo.texture | |
else: | |
self._texture = Texture.create(size=self._size, | |
- colorfmt='rgba') | |
+ colorfmt='rgba') | |
# XXX FIXME | |
# self.texture.add_reload_observer(self.reload_buffer) | |
@@ -404,6 +404,14 @@ | |
# Disabled as an attempt to fix kivy issue #6210 | |
# self._ffplayer.set_volume(self._volume) | |
+ # Register on_close handler on window to make sure we can cleanup | |
+ # gracefully if application exits during video playback. | |
+ Window.bind(on_close=self.cleanup) | |
+ | |
+ # Create redraw trigger | |
+ self._trigger = Clock.create_trigger(self._redraw) | |
+ | |
+ # Create frame fetching thread | |
self._thread = Thread( | |
target=self._next_frame_run, | |
name='Next frame', | |
@@ -417,9 +425,15 @@ | |
def load(self): | |
self.unload() | |
+ def cleanup(self, window): | |
+ self.unload() | |
+ | |
def unload(self): | |
+ Window.unbind(on_close=self.cleanup) | |
+ | |
if self._trigger is not None: | |
self._trigger.cancel() | |
+ self._trigger = None | |
# if thread is still alive, set it to exit and wake it | |
self._wakeup_thread() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment