summaryrefslogtreecommitdiffstats
path: root/src/plugins/winrt
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/winrt')
-rw-r--r--src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp10
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.cpp3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
index 561d9e03c..b3fd11111 100644
--- a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
+++ b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
@@ -356,6 +356,13 @@ void QWinRTAbstractVideoRendererControl::setActive(bool active)
if (!d->surface)
return;
+ // This only happens for quick restart scenarios, for instance
+ // when switching cameras.
+ if (d->renderThread.isRunning() && d->renderThread.isInterruptionRequested()) {
+ CriticalSectionLocker lock(&d->mutex);
+ d->renderThread.wait();
+ }
+
if (!d->surface->isActive())
d->surface->start(d->format);
@@ -363,7 +370,8 @@ void QWinRTAbstractVideoRendererControl::setActive(bool active)
return;
}
- shutdown();
+ d->renderThread.requestInterruption();
+
if (d->surface && d->surface->isActive())
d->surface->stop();
}
diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
index 5720488f2..a4df6306f 100644
--- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
+++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
@@ -267,7 +267,8 @@ public:
}
if (d->videoRenderer)
- d->videoRenderer->setActive(d->state == QMediaPlayer::PlayingState);
+ d->videoRenderer->setActive(d->state == QMediaPlayer::PlayingState &&
+ d->videoRenderer->size().isValid());
const QMediaPlayer::MediaStatus oldMediaStatus = d->mediaStatus;
const QMediaPlayer::State oldState = d->state;