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:
itsmattkc
2019-11-17 13:44:50 +09:00
parent b1f4bf3dbb
commit 9d154e1909
8 changed files with 48 additions and 20 deletions
+7 -1
View File
@@ -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);
}
+5 -1
View File
@@ -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);
+10 -5
View File
@@ -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)
+3 -1
View File
@@ -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
+8 -5
View File
@@ -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)
}
+2 -1
View File
@@ -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
+10 -5
View File
@@ -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
+3 -1
View File
@@ -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);