Created
July 20, 2022 02:27
-
-
Save Cheaterman/64299dca14e2931bd934397cfdb718b1 to your computer and use it in GitHub Desktop.
ffpyplayer_vpx_codec.py
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
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