From c1ed84b90ee302f2dcf62e5d0c5928abda185142 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 30 May 2020 02:50:30 +1000 Subject: [PATCH] viewer: receive audio invalidation signal Invalidates and runs cache task correctly even if there are no video nodes connected. --- app/node/output/viewer/viewer.cpp | 3 ++- app/task/render/render.cpp | 1 + app/widget/nodeview/nodeview.cpp | 1 - app/widget/viewer/viewer.cpp | 18 +++++++++++++----- app/widget/viewer/viewer.h | 4 +++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/node/output/viewer/viewer.cpp b/app/node/output/viewer/viewer.cpp index 2bb56d5a2..f918d8061 100644 --- a/app/node/output/viewer/viewer.cpp +++ b/app/node/output/viewer/viewer.cpp @@ -58,7 +58,8 @@ ViewerOutput::ViewerOutput() // Create UUID for this node uuid_ = QUuid::createUuid(); - connect(this, &ViewerOutput::LengthChanged, &video_frame_cache_, &FrameHashCache::SetLength); + connect(this, &ViewerOutput::LengthChanged, &video_frame_cache_, &PlaybackCache::SetLength); + connect(this, &ViewerOutput::LengthChanged, &audio_playback_cache_, &PlaybackCache::SetLength); } Node *ViewerOutput::copy() const diff --git a/app/task/render/render.cpp b/app/task/render/render.cpp index 840f25db9..1cd9f6dfd 100644 --- a/app/task/render/render.cpp +++ b/app/task/render/render.cpp @@ -233,6 +233,7 @@ void RenderTask::Render(const TimeRangeList& video_range, } } + // `Close` will block until all jobs are done making a safe deletion backend_.Close(); } diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index e2f5b324a..8f263a6e3 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -109,7 +109,6 @@ void NodeView::DeleteSelected() foreach (NodeEdge* edge, selected_edges) { new NodeEdgeRemoveCommand(edge->output(), edge->input(), command); - qDebug() << "Deleting edge between" << edge->output()->parentNode() << "and" << edge->input()->parentNode(); } } diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 1904dfa86..8f385e924 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -176,7 +176,8 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n) connect(n, &ViewerOutput::SizeChanged, this, &ViewerWidget::SizeChangedSlot); connect(n, &ViewerOutput::LengthChanged, this, &ViewerWidget::LengthChangedSlot); connect(n, &ViewerOutput::ParamsChanged, this, &ViewerWidget::UpdateRendererParameters); - connect(n->video_frame_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedRange); + connect(n->video_frame_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedVideoRange); + connect(n->audio_playback_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedRange); connect(n, &ViewerOutput::GraphChangedFrom, this, &ViewerWidget::UpdateStack); ruler()->SetPlaybackCache(n->video_frame_cache()); @@ -229,7 +230,8 @@ void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n) disconnect(n, &ViewerOutput::SizeChanged, this, &ViewerWidget::SizeChangedSlot); disconnect(n, &ViewerOutput::LengthChanged, this, &ViewerWidget::LengthChangedSlot); disconnect(n, &ViewerOutput::ParamsChanged, this, &ViewerWidget::UpdateRendererParameters); - disconnect(n->video_frame_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedRange); + disconnect(n->video_frame_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedVideoRange); + disconnect(n->audio_playback_cache(), &FrameHashCache::Invalidated, this, &ViewerWidget::ViewerInvalidatedRange); disconnect(n, &ViewerOutput::GraphChangedFrom, this, &ViewerWidget::UpdateStack); ruler()->SetPlaybackCache(nullptr); @@ -840,7 +842,8 @@ void ViewerWidget::StartBackgroundCaching() busy_ = false; } - if (GetConnectedNode()->video_frame_cache()->HasInvalidatedRanges() + if ((GetConnectedNode()->video_frame_cache()->HasInvalidatedRanges() + || GetConnectedNode()->audio_playback_cache()->HasInvalidatedRanges()) && Config::Current()["AutoCache"].toBool()) { if (cache_background_task_ || busy_viewers_) { @@ -875,11 +878,11 @@ void ViewerWidget::UpdateRendererParameters() } GetConnectedNode()->video_frame_cache()->InvalidateAll(); + GetConnectedNode()->audio_playback_cache()->InvalidateAll(); StartBackgroundCaching(); renderer_->SetVideoParams(GenerateVideoParams()); - renderer_->SetAudioParams(GenerateAudioParams()); display_widget_->SetVideoParams(GetConnectedNode()->video_params()); @@ -1190,12 +1193,17 @@ void ViewerWidget::SetZoomFromMenu(QAction *action) sizer_->SetZoom(action->data().toInt()); } -void ViewerWidget::ViewerInvalidatedRange(const TimeRange &range) +void ViewerWidget::ViewerInvalidatedVideoRange(const TimeRange &range) { if (GetTime() >= range.in() && (GetTime() < range.out() || range.in() == range.out())) { ForceUpdate(); } + ViewerInvalidatedRange(); +} + +void ViewerWidget::ViewerInvalidatedRange() +{ // Restart the cache wait timer cache_wait_timer_.stop(); StopAllBackgroundCacheTasks(false); diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 680e6810a..8b27312dd 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -268,7 +268,9 @@ private slots: void SetZoomFromMenu(QAction* action); - void ViewerInvalidatedRange(const OLIVE_NAMESPACE::TimeRange &range); + void ViewerInvalidatedVideoRange(const OLIVE_NAMESPACE::TimeRange &range); + + void ViewerInvalidatedRange(); void UpdateStack();