Fix broken playback in Mpv widget
Widget playback was broken under QQmlApplicationEngine based workflows. Refactoring MpvRenderContext creation to happen in the constructor fixed playback in this workflow.
This commit is contained in:
+12
-11
@@ -2,6 +2,7 @@ from PyQt5.QtCore import QUrl, QSize, pyqtSignal, pyqtSlot
|
||||
from PyQt5.QtGui import QOpenGLFramebufferObject
|
||||
from PyQt5.QtOpenGL import QGLContext
|
||||
from PyQt5.QtQuick import QQuickFramebufferObject
|
||||
|
||||
from mpv import MPV, MpvRenderContext, OpenGlCbGetProcAddrFn
|
||||
|
||||
|
||||
@@ -9,7 +10,7 @@ def get_process_address(_, name):
|
||||
glctx = QGLContext.currentContext()
|
||||
if glctx is None:
|
||||
return 0
|
||||
return int(glctx.getProcAddress(name.decode('utf-8')))
|
||||
return int(glctx.getProcAddress(name.decode("utf-8")))
|
||||
|
||||
|
||||
class MpvObject(QQuickFramebufferObject):
|
||||
@@ -37,7 +38,7 @@ class MpvObject(QQuickFramebufferObject):
|
||||
"""Slot for receiving the update event on the correct thread"""
|
||||
self.update()
|
||||
|
||||
def createRenderer(self) -> 'QQuickFramebufferObject.Renderer':
|
||||
def createRenderer(self) -> "QQuickFramebufferObject.Renderer":
|
||||
"""Overrides the default createRenderer function to create a
|
||||
MpvRenderer instance"""
|
||||
print("Calling overridden createRenderer")
|
||||
@@ -58,18 +59,16 @@ class MpvRenderer(QQuickFramebufferObject.Renderer):
|
||||
print("Creating MpvRenderer")
|
||||
super(MpvRenderer, self).__init__()
|
||||
self.obj = parent
|
||||
self.ctx = None
|
||||
self.ctx = MpvRenderContext(
|
||||
self.obj.mpv,
|
||||
"opengl",
|
||||
opengl_init_params={"get_proc_address": self.obj._proc_addr_wrapper},
|
||||
)
|
||||
self.ctx.update_cb = self.obj.on_update
|
||||
|
||||
def createFramebufferObject(self, size: QSize) -> QOpenGLFramebufferObject:
|
||||
"""Overrides the base createFramebufferObject function, augmenting it to
|
||||
create an MpvRenderContext using opengl"""
|
||||
if self.obj.mpv_gl is None:
|
||||
print("Creating mpv gl")
|
||||
self.ctx = MpvRenderContext(self.obj.mpv, 'opengl',
|
||||
opengl_init_params={
|
||||
'get_proc_address': self.obj._proc_addr_wrapper
|
||||
})
|
||||
self.ctx.update_cb = self.obj.on_update
|
||||
|
||||
return QQuickFramebufferObject.Renderer.createFramebufferObject(self, size)
|
||||
|
||||
@@ -84,4 +83,6 @@ class MpvRenderer(QQuickFramebufferObject.Renderer):
|
||||
height = int(rect.height() * factor)
|
||||
fbo = int(self.framebufferObject().handle())
|
||||
|
||||
self.ctx.render(flip_y=False, opengl_fbo={'w': width, 'h': height, 'fbo': fbo})
|
||||
self.ctx.render(
|
||||
flip_y=False, opengl_fbo={"w": width, "h": height, "fbo": fbo}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user