renderer: when invalidating visible, kick the workers into emit mode

This commit is contained in:
itsmattkc
2020-05-07 01:29:05 +10:00
parent c61adbf2a2
commit 373eeaeacd
6 changed files with 43 additions and 1 deletions
+7
View File
@@ -259,6 +259,8 @@ void RenderBackend::CacheNext()
SetWorkerBusyState(worker, true); SetWorkerBusyState(worker, true);
cancel_dialog_->WorkerStarted(); cancel_dialog_->WorkerStarted();
WorkerAboutToStartEvent(worker);
QMetaObject::invokeMethod(worker, QMetaObject::invokeMethod(worker,
"Render", "Render",
Qt::QueuedConnection, Qt::QueuedConnection,
@@ -471,6 +473,11 @@ void RenderBackend::CacheIDChangedEvent(const QString &id)
Q_UNUSED(id) Q_UNUSED(id)
} }
void RenderBackend::WorkerAboutToStartEvent(RenderWorker *worker)
{
Q_UNUSED(worker)
}
void RenderBackend::InitWorkers() void RenderBackend::InitWorkers()
{ {
for (int i=0;i<processors_.size();i++) { for (int i=0;i<processors_.size();i++) {
+2
View File
@@ -83,6 +83,8 @@ protected:
virtual void CacheIDChangedEvent(const QString& id); virtual void CacheIDChangedEvent(const QString& id);
virtual void WorkerAboutToStartEvent(RenderWorker* worker);
void SetError(const QString& error); void SetError(const QString& error);
virtual void ConnectViewer(ViewerOutput* node); virtual void ConnectViewer(ViewerOutput* node);
+20 -1
View File
@@ -41,7 +41,8 @@ VideoRenderBackend::VideoRenderBackend(QObject *parent) :
operating_mode_(VideoRenderWorker::kHashRenderCache), operating_mode_(VideoRenderWorker::kHashRenderCache),
only_signal_last_frame_requested_(true), only_signal_last_frame_requested_(true),
limit_caching_(true), limit_caching_(true),
pop_toggle_(false) pop_toggle_(false),
queue_is_visible_only_(false)
{ {
connect(DiskManager::instance(), &DiskManager::DeletedFrame, this, &VideoRenderBackend::FrameRemovedFromDiskCache); connect(DiskManager::instance(), &DiskManager::DeletedFrame, this, &VideoRenderBackend::FrameRemovedFromDiskCache);
} }
@@ -160,6 +161,8 @@ void VideoRenderBackend::InvalidateCacheInternal(const rational &start_range, co
emit RangeInvalidated(invalidated); emit RangeInvalidated(invalidated);
queue_is_visible_only_ = only_visible;
if (only_visible) { if (only_visible) {
// We're only caching this frame, and for maximum responsiveness, should cancel the rest of the // We're only caching this frame, and for maximum responsiveness, should cancel the rest of the
@@ -177,6 +180,22 @@ void VideoRenderBackend::InvalidateCacheInternal(const rational &start_range, co
} }
} }
void VideoRenderBackend::WorkerAboutToStartEvent(RenderWorker *worker)
{
if (operating_mode_ & VideoRenderWorker::kDownloadOnly) {
int mode = operating_mode_;
if (queue_is_visible_only_) {
mode &= ~VideoRenderWorker::kDownloadOnly;
} else {
mode |= VideoRenderWorker::kDownloadOnly;
}
static_cast<VideoRenderWorker*>(worker)->
SetOperatingMode(static_cast<VideoRenderWorker::OperatingMode>(mode));
}
}
VideoRenderFrameCache *VideoRenderBackend::frame_cache() VideoRenderFrameCache *VideoRenderBackend::frame_cache()
{ {
return &frame_cache_; return &frame_cache_;
+4
View File
@@ -103,6 +103,8 @@ protected:
virtual void ParamsChangedEvent(){} virtual void ParamsChangedEvent(){}
virtual void WorkerAboutToStartEvent(RenderWorker* worker) override;
VideoRenderWorker::OperatingMode operating_mode_; VideoRenderWorker::OperatingMode operating_mode_;
signals: signals:
@@ -135,6 +137,8 @@ private:
bool pop_toggle_; bool pop_toggle_;
bool queue_is_visible_only_;
private slots: private slots:
void ThreadCompletedDownload(NodeDependency dep, qint64 job_time, QByteArray hash); void ThreadCompletedDownload(NodeDependency dep, qint64 job_time, QByteArray hash);
void ThreadSkippedFrame(NodeDependency dep, qint64 job_time, QByteArray hash); void ThreadSkippedFrame(NodeDependency dep, qint64 job_time, QByteArray hash);
+8
View File
@@ -105,6 +105,7 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
connect(video_renderer_, &VideoRenderBackend::CachedTimeReady, this, &ViewerWidget::RendererCachedTime); connect(video_renderer_, &VideoRenderBackend::CachedTimeReady, this, &ViewerWidget::RendererCachedTime);
connect(video_renderer_, &VideoRenderBackend::CachedTimeReady, ruler(), &TimeRuler::CacheTimeReady); connect(video_renderer_, &VideoRenderBackend::CachedTimeReady, ruler(), &TimeRuler::CacheTimeReady);
connect(video_renderer_, &VideoRenderBackend::RangeInvalidated, ruler(), &TimeRuler::CacheInvalidatedRange); connect(video_renderer_, &VideoRenderBackend::RangeInvalidated, ruler(), &TimeRuler::CacheInvalidatedRange);
connect(video_renderer_, &VideoRenderBackend::GeneratedFrame, this, &ViewerWidget::RendererGeneratedFrame);
audio_renderer_ = new AudioBackend(this); audio_renderer_ = new AudioBackend(this);
waveform_view_->SetBackend(audio_renderer_); waveform_view_->SetBackend(audio_renderer_);
@@ -522,6 +523,13 @@ void ViewerWidget::ContextMenuScopeTriggered(QAction *action)
emit RequestScopePanel(static_cast<ScopePanel::Type>(action->data().toInt())); emit RequestScopePanel(static_cast<ScopePanel::Type>(action->data().toInt()));
} }
void ViewerWidget::RendererGeneratedFrame(FramePtr f)
{
foreach (ViewerDisplayWidget* glw, gl_widgets_) {
glw->SetImageFromLoadBuffer(f.get());
}
}
void ViewerWidget::UpdateRendererParameters() void ViewerWidget::UpdateRendererParameters()
{ {
if (!GetConnectedNode()) { if (!GetConnectedNode()) {
+2
View File
@@ -236,6 +236,8 @@ private slots:
void ContextMenuScopeTriggered(QAction* action); void ContextMenuScopeTriggered(QAction* action);
void RendererGeneratedFrame(FramePtr f);
}; };
OLIVE_NAMESPACE_EXIT OLIVE_NAMESPACE_EXIT