diff options
Diffstat (limited to 'libmpv/qml_direct/main.cpp')
-rw-r--r-- | libmpv/qml_direct/main.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/libmpv/qml_direct/main.cpp b/libmpv/qml_direct/main.cpp index 37c6119..7f7e22b 100644 --- a/libmpv/qml_direct/main.cpp +++ b/libmpv/qml_direct/main.cpp @@ -51,7 +51,7 @@ void MpvRenderer::paint() } MpvObject::MpvObject(QQuickItem * parent) - : QQuickItem(parent), mpv_gl(0), renderer(0) + : QQuickItem(parent), mpv_gl(0), renderer(0), killOnce(false) { mpv = mpv::qt::Handle::FromRawHandle(mpv_create()); if (!mpv) @@ -101,6 +101,10 @@ void MpvObject::handleWindowChanged(QQuickWindow *win) void MpvObject::sync() { + if (killOnce) + cleanup(); + killOnce = false; + if (!renderer) { renderer = new MpvRenderer(mpv, mpv_gl); connect(window(), &QQuickWindow::beforeRendering, @@ -140,6 +144,16 @@ void MpvObject::command(const QVariant& params) mpv::qt::command_variant(mpv, params); } +void MpvObject::reinitRenderer() +{ + // Don't make it stop playback if the VO dies. + mpv_set_option_string(mpv, "stop-playback-on-init-failure", "no"); + // Make it recreate the renderer, which involves calling + // mpv_opengl_cb_uninit_gl() (which is the thing we want to test). + killOnce = true; + window()->update(); +} + int main(int argc, char **argv) { QGuiApplication app(argc, argv); |