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:
@@ -74,7 +74,13 @@ void ViewerOutput::InvalidateCache(const rational &start_range, const rational &
|
||||
{
|
||||
Node::InvalidateCache(start_range, end_range, from);
|
||||
|
||||
emit TextureChangedBetween(start_range, end_range);
|
||||
if (from == texture_input()) {
|
||||
emit VideoChangedBetween(start_range, end_range);
|
||||
} else if (from == samples_input()) {
|
||||
emit AudioChangedBetween(start_range, end_range);
|
||||
} else if (from == length_input()) {
|
||||
emit LengthChanged(Length());
|
||||
}
|
||||
|
||||
SendInvalidateCache(start_range, end_range);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,11 @@ public:
|
||||
signals:
|
||||
void TimebaseChanged(const rational&);
|
||||
|
||||
void TextureChangedBetween(const rational&, const rational&);
|
||||
void VideoChangedBetween(const rational&, const rational&);
|
||||
|
||||
void AudioChangedBetween(const rational&, const rational&);
|
||||
|
||||
void LengthChanged(const rational& length);
|
||||
|
||||
void SizeChanged(int width, int height);
|
||||
|
||||
|
||||
@@ -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