use different signals when the audio invalidates vs the video
Both audio and video renderers were working off the same invalidation signal (i.e. changing audio would also trigger a re-render of the video). This is obviously suboptimal and now they are separate.
This commit is contained in:
@@ -44,12 +44,17 @@ void AudioRenderBackend::InvalidateCache(const rational &start_range, const rati
|
||||
CacheNext();
|
||||
}
|
||||
|
||||
void AudioRenderBackend::ViewerNodeChangedEvent(ViewerOutput *node)
|
||||
void AudioRenderBackend::ConnectViewer(ViewerOutput *node)
|
||||
{
|
||||
if (node != nullptr) {
|
||||
// FIXME: Hardcoded format
|
||||
SetParameters(AudioRenderingParams(node->audio_params(), SAMPLE_FMT_FLT));
|
||||
}
|
||||
connect(node, SIGNAL(AudioChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
|
||||
// FIXME: Hardcoded format
|
||||
SetParameters(AudioRenderingParams(node->audio_params(), SAMPLE_FMT_FLT));
|
||||
}
|
||||
|
||||
void AudioRenderBackend::DisconnectViewer(ViewerOutput *node)
|
||||
{
|
||||
disconnect(node, SIGNAL(AudioChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
}
|
||||
|
||||
bool AudioRenderBackend::GenerateCacheIDInternal(QCryptographicHash &hash)
|
||||
|
||||
@@ -26,7 +26,9 @@ public slots:
|
||||
virtual void InvalidateCache(const rational &start_range, const rational &end_range) override;
|
||||
|
||||
protected:
|
||||
virtual void ViewerNodeChangedEvent(ViewerOutput* node) override;
|
||||
virtual void ConnectViewer(ViewerOutput* node) override;
|
||||
|
||||
virtual void DisconnectViewer(ViewerOutput* node) override;
|
||||
|
||||
/**
|
||||
* @brief Internal function for generating the cache ID
|
||||
|
||||
@@ -72,7 +72,7 @@ const QString &RenderBackend::GetError() const
|
||||
void RenderBackend::SetViewerNode(ViewerOutput *viewer_node)
|
||||
{
|
||||
if (viewer_node_ != nullptr) {
|
||||
disconnect(viewer_node_, SIGNAL(TextureChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
DisconnectViewer(viewer_node_);
|
||||
|
||||
Decompile();
|
||||
}
|
||||
@@ -80,10 +80,8 @@ void RenderBackend::SetViewerNode(ViewerOutput *viewer_node)
|
||||
viewer_node_ = viewer_node;
|
||||
|
||||
if (viewer_node_ != nullptr) {
|
||||
connect(viewer_node_, SIGNAL(TextureChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
ConnectViewer(viewer_node_);
|
||||
}
|
||||
|
||||
ViewerNodeChangedEvent(viewer_node_);
|
||||
}
|
||||
|
||||
void RenderBackend::SetCacheName(const QString &s)
|
||||
@@ -148,7 +146,12 @@ void RenderBackend::SetError(const QString &error)
|
||||
error_ = error;
|
||||
}
|
||||
|
||||
void RenderBackend::ViewerNodeChangedEvent(ViewerOutput *node)
|
||||
void RenderBackend::ConnectViewer(ViewerOutput *node)
|
||||
{
|
||||
Q_UNUSED(node)
|
||||
}
|
||||
|
||||
void RenderBackend::DisconnectViewer(ViewerOutput *node)
|
||||
{
|
||||
Q_UNUSED(node)
|
||||
}
|
||||
|
||||
@@ -56,7 +56,8 @@ protected:
|
||||
|
||||
void SetError(const QString& error);
|
||||
|
||||
virtual void ViewerNodeChangedEvent(ViewerOutput* node);
|
||||
virtual void ConnectViewer(ViewerOutput* node);
|
||||
virtual void DisconnectViewer(ViewerOutput* node);
|
||||
|
||||
/**
|
||||
* @brief Function called when there are frames in the queue to cache
|
||||
|
||||
@@ -112,12 +112,17 @@ void VideoRenderBackend::CloseInternal()
|
||||
cache_frame_load_buffer_.clear();
|
||||
}
|
||||
|
||||
void VideoRenderBackend::ViewerNodeChangedEvent(ViewerOutput *node)
|
||||
void VideoRenderBackend::ConnectViewer(ViewerOutput *node)
|
||||
{
|
||||
if (node != nullptr) {
|
||||
// FIXME: Hardcoded format, mode, and divider
|
||||
SetParameters(VideoRenderingParams(node->video_params(), olive::PIX_FMT_RGBA16F, olive::kOffline, 2));
|
||||
}
|
||||
connect(node, SIGNAL(VideoChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
|
||||
// FIXME: Hardcoded format, mode, and divider
|
||||
SetParameters(VideoRenderingParams(node->video_params(), olive::PIX_FMT_RGBA16F, olive::kOffline, 2));
|
||||
}
|
||||
|
||||
void VideoRenderBackend::DisconnectViewer(ViewerOutput *node)
|
||||
{
|
||||
disconnect(node, SIGNAL(VideoChangedBetween(const rational&, const rational&)), this, SLOT(InvalidateCache(const rational&, const rational&)));
|
||||
}
|
||||
|
||||
const VideoRenderingParams &VideoRenderBackend::params() const
|
||||
|
||||
@@ -71,7 +71,9 @@ protected:
|
||||
QByteArray hash;
|
||||
};
|
||||
|
||||
virtual void ViewerNodeChangedEvent(ViewerOutput* node) override;
|
||||
virtual void ConnectViewer(ViewerOutput* node) override;
|
||||
|
||||
virtual void DisconnectViewer(ViewerOutput* node) override;
|
||||
|
||||
const char *GetCachedFrame(const rational& time);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user