summaryrefslogtreecommitdiffstats
path: root/libmpv/qml_direct/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libmpv/qml_direct/main.cpp')
-rw-r--r--libmpv/qml_direct/main.cpp16
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);