renderer: when invalidating visible, kick the workers into emit mode
This commit is contained in:
@@ -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++) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -236,6 +236,8 @@ private slots:
|
|||||||
|
|
||||||
void ContextMenuScopeTriggered(QAction* action);
|
void ContextMenuScopeTriggered(QAction* action);
|
||||||
|
|
||||||
|
void RendererGeneratedFrame(FramePtr f);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
OLIVE_NAMESPACE_EXIT
|
OLIVE_NAMESPACE_EXIT
|
||||||
|
|||||||
Reference in New Issue
Block a user