diff --git a/app/render/backend/renderbackend.cpp b/app/render/backend/renderbackend.cpp index e62c94a57..87b68d78b 100644 --- a/app/render/backend/renderbackend.cpp +++ b/app/render/backend/renderbackend.cpp @@ -139,7 +139,7 @@ RenderTicketPtr RenderBackend::RenderFrame(const rational &time) render_queue_.push_back(ticket); - RunNextJob(); + QMetaObject::invokeMethod(this, "RunNextJob", Qt::QueuedConnection); return ticket; } @@ -155,7 +155,7 @@ RenderTicketPtr RenderBackend::RenderAudio(const TimeRange &r) render_queue_.push_back(ticket); - RunNextJob(); + QMetaObject::invokeMethod(this, "RunNextJob", Qt::QueuedConnection); return ticket; } diff --git a/app/render/backend/renderbackend.h b/app/render/backend/renderbackend.h index 59efca316..c31632aef 100644 --- a/app/render/backend/renderbackend.h +++ b/app/render/backend/renderbackend.h @@ -115,8 +115,6 @@ private: Node *CopyNodeConnections(Node *src_node); void CopyNodeMakeConnection(NodeInput *src_input, NodeInput *dst_input); - void RunNextJob(); - ViewerOutput* viewer_node_; // VIDEO MEMBERS @@ -150,6 +148,8 @@ private: private slots: void WorkerFinished(); + void RunNextJob(); + }; OLIVE_NAMESPACE_EXIT diff --git a/app/task/cache/cache.cpp b/app/task/cache/cache.cpp index 411a6d96a..bae2f6ab9 100644 --- a/app/task/cache/cache.cpp +++ b/app/task/cache/cache.cpp @@ -57,7 +57,7 @@ bool CacheTask::Run() } } - Render(video_range, audio_range, QMatrix4x4(), true); + Render(video_range, audio_range, true); download_threads_.waitForDone(); diff --git a/app/task/export/export.cpp b/app/task/export/export.cpp index 5cc667a9e..fbd7f905e 100644 --- a/app/task/export/export.cpp +++ b/app/task/export/export.cpp @@ -64,17 +64,17 @@ bool ExportTask::Run() frame_time_ = Timecode::time_to_timestamp(range.in(), viewer()->video_params().time_base()); - QMatrix4x4 mat; - if (params_.video_enabled()) { // If a transformation matrix is applied to this video, create it here if (params_.video_scaling_method() != ExportParams::kStretch) { - mat = ExportParams::GenerateMatrix(params_.video_scaling_method(), - viewer()->video_params().width(), - viewer()->video_params().height(), - params_.video_params().width(), - params_.video_params().height()); + QMatrix4x4 mat = ExportParams::GenerateMatrix(params_.video_scaling_method(), + viewer()->video_params().width(), + viewer()->video_params().height(), + params_.video_params().width(), + params_.video_params().height()); + + backend()->SetVideoDownloadMatrix(mat); } // Create color processor @@ -99,7 +99,7 @@ bool ExportTask::Run() audio_data_.SetLength(range.length()); } - Render(video_range, audio_range, mat, false); + Render(video_range, audio_range, false); bool success = true; diff --git a/app/task/render/render.cpp b/app/task/render/render.cpp index 76b54ea98..31da11f17 100644 --- a/app/task/render/render.cpp +++ b/app/task/render/render.cpp @@ -78,11 +78,8 @@ struct HashDownloadFuturePair { void RenderTask::Render(const TimeRangeList& video_range, const TimeRangeList &audio_range, - const QMatrix4x4& mat, bool use_disk_cache) { - backend_->SetVideoDownloadMatrix(mat); - double progress_counter = 0; double total_length = 0; double video_frame_sz = video_params().time_base().toDouble(); @@ -245,8 +242,10 @@ void RenderTask::Render(const TimeRangeList& video_range, } } - // `Close` will block until all jobs are done making a safe deletion - backend_->Close(); + if (backend_is_ours_) { + // `Close` will block until all jobs are done making a safe deletion + backend_->Close(); + } } void RenderTask::SetAnchorPoint(const rational &r) diff --git a/app/task/render/render.h b/app/task/render/render.h index 978a45982..77b655c24 100644 --- a/app/task/render/render.h +++ b/app/task/render/render.h @@ -40,7 +40,6 @@ public: protected: void Render(const TimeRangeList &video_range, const TimeRangeList &audio_range, - const QMatrix4x4 &mat, bool use_disk_cache); virtual QFuture DownloadFrame(FramePtr frame, const QByteArray &hash) = 0;