Skip to content

Instantly share code, notes, and snippets.

@Cheaterman
Created July 20, 2022 02:27
Show Gist options
  • Save Cheaterman/64299dca14e2931bd934397cfdb718b1 to your computer and use it in GitHub Desktop.
Save Cheaterman/64299dca14e2931bd934397cfdb718b1 to your computer and use it in GitHub Desktop.
ffpyplayer_vpx_codec.py
import contextlib
import functools
from kivy.core.video import video_ffpyplayer
from kivy.factory import Factory
from kivy.properties import BooleanProperty
from kivy.uix import video
_orig_media_player = video_ffpyplayer.MediaPlayer
@functools.wraps(_orig_media_player)
def _vp9_media_player(*largs, **kwargs):
kwargs['ff_opts']['vcodec'] = 'libvpx-vp9'
return _orig_media_player(*largs, **kwargs)
@contextlib.contextmanager
def _set_vp9_codec():
video_ffpyplayer.MediaPlayer = _vp9_media_player
yield
video_ffpyplayer.MediaPlayer = _orig_media_player
def monkey_patch():
class Video(video.Video):
use_transparency = BooleanProperty(False)
def _get_transparency_manager(self):
return (
_set_vp9_codec()
if self.use_transparency
else contextlib.nullcontext()
)
def _do_video_load(self, *args):
with self._get_transparency_manager():
super()._do_video_load(*args)
def on_state(self, *args):
with self._get_transparency_manager():
super().on_state(*args)
Factory.unregister('Video')
Factory.register('Video', cls=Video)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment