From cb72736f528f23d3a7ba1770a4524a43e7c781eb Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 21 May 2020 03:09:39 +1000 Subject: [PATCH] viewer: keep track of request order and ignore old requests Prevents visual confusion with frames that were requested before the most recent but arrived after. --- app/widget/viewer/viewer.cpp | 15 +++++++++++++-- app/widget/viewer/viewer.h | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 1371aaf64..66ec98831 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -421,6 +421,8 @@ void ViewerWidget::UpdateTextureFromNode(const rational& time) this, &ViewerWidget::RendererGeneratedFrame); + nonqueue_watchers_.append(watcher); + watcher->setFuture(GetFrame(time, true, true)); } @@ -695,9 +697,18 @@ void ViewerWidget::RendererGeneratedFrame() { QFutureWatcher* watcher = static_cast*>(sender()); FramePtr frame = watcher->result(); - watcher->deleteLater(); - SetDisplayImage(frame, false); + if (nonqueue_watchers_.contains(watcher)) { + while (!nonqueue_watchers_.isEmpty()) { + if (nonqueue_watchers_.takeFirst() == watcher) { + break; + } + } + + SetDisplayImage(frame, false); + } + + watcher->deleteLater(); } void ViewerWidget::RendererGeneratedFrameForQueue() diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 41f4a9d66..d7b65109d 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -231,6 +231,8 @@ private: bool prequeuing_; + QList< QFutureWatcher* > nonqueue_watchers_; + private slots: void PlaybackTimerUpdate();