From e141b486aec23881d132dd0f88deea7f3a761cc2 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 13 Apr 2021 12:17:38 +1000 Subject: [PATCH] viewer: fixed issues with audio-only nodes in the viewer --- app/widget/viewer/viewer.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 8a8a229d7..f22eab8c9 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -390,8 +390,8 @@ void ViewerWidget::DecodeCachedImage(RenderTicketPtr ticket, const QString &fn, bool ViewerWidget::ShouldForceWaveform() const { return GetConnectedNode() - && !GetConnectedNode()->IsInputConnected(ViewerOutput::kTextureInput) - && GetConnectedNode()->IsInputConnected(ViewerOutput::kSamplesInput); + && !GetConnectedNode()->GetConnectedTextureOutput().IsValid() + && GetConnectedNode()->GetConnectedSampleOutput().IsValid(); } void ViewerWidget::UpdateTextureFromNode(const rational& time) @@ -439,18 +439,18 @@ void ViewerWidget::UpdateTextureFromNode(const rational& time) } - if (!frame_exists_at_time) { + if (frame_exists_at_time) { + // Frame was not in queue, will require rendering or decoding from cache + RenderTicketWatcher* watcher = new RenderTicketWatcher(); + connect(watcher, &RenderTicketWatcher::Finished, this, &ViewerWidget::RendererGeneratedFrame); + nonqueue_watchers_.append(watcher); + watcher->SetTicket(GetFrame(time, true)); + } else { // There is definitely no frame here, we can immediately flip to showing nothing nonqueue_watchers_.clear(); SetDisplayImage(nullptr, false); return; } - - // Frame was not in queue, will require rendering or decoding from cache - RenderTicketWatcher* watcher = new RenderTicketWatcher(); - connect(watcher, &RenderTicketWatcher::Finished, this, &ViewerWidget::RendererGeneratedFrame); - nonqueue_watchers_.append(watcher); - watcher->SetTicket(GetFrame(time, true)); } void ViewerWidget::PlayInternal(int speed, bool in_to_out_only) @@ -593,9 +593,7 @@ QString ViewerWidget::GetCachedFilenameFromTime(const rational &time) bool ViewerWidget::FrameExistsAtTime(const rational &time) { - return GetConnectedNode() - && ((time >= 0 && time < GetConnectedNode()->video_frame_cache()->GetLength()) - || GetConnectedNode()->video_frame_cache()->GetLength().isNull()); + return GetConnectedNode() && time >= 0 && time < GetConnectedNode()->video_frame_cache()->GetLength(); } void ViewerWidget::SetDisplayImage(FramePtr frame, bool main_only)