renderer: optimizing and fixing code paths

Re-introducing some old concepts for the new structure.
This commit is contained in:
itsmattkc
2020-05-26 22:40:54 +10:00
parent 8b872e7c29
commit c907114b17
18 changed files with 750 additions and 714 deletions
+10 -26
View File
@@ -26,6 +26,7 @@
#include "decodercache.h"
#include "node/traverser.h"
#include "node/output/viewer/viewer.h"
#include "renderticket.h"
OLIVE_NAMESPACE_ENTER
@@ -37,14 +38,6 @@ class RenderWorker : public QObject, public NodeTraverser
public:
RenderWorker(RenderBackend* parent);
virtual ~RenderWorker() override;
void Init(ViewerOutput *viewer);
void Close();
void Queue(NodeInput* input);
void ProcessQueue();
bool IsAvailable() const
{
return available_;
@@ -55,11 +48,6 @@ public:
available_ = a;
}
ViewerOutput* GetViewer() const
{
return viewer_;
}
void SetVideoParams(const VideoRenderingParams& params)
{
video_params_ = params;
@@ -80,6 +68,11 @@ public:
audio_mode_is_preview_ = audio_mode_is_preview;
}
void SetCopyMap(QHash<Node*, Node*>* copy_map)
{
copy_map_ = copy_map;
}
/**
* @brief Return a unique ID for the image generated at this time
*
@@ -90,7 +83,7 @@ public:
*
* SHA-1 hash or empty QByteArray if no viewer node is set.
*/
QByteArray Hash(const rational &time, bool block_for_update);
void Hash(RenderTicketPtr ticket, ViewerOutput *viewer, const QList<rational>& times);
/**
* @brief Render the frame at this time
@@ -103,9 +96,9 @@ public:
* function will still return a blank frame with the same parameters. If no viewer node is set,
* nullptr is returned.
*/
FramePtr RenderFrame(const rational& time, bool block_for_update);
void RenderFrame(RenderTicketPtr ticket, ViewerOutput* viewer, const rational &time);
SampleBufferPtr RenderAudio(const TimeRange& range, bool block_for_update);
void RenderAudio(RenderTicketPtr ticket, ViewerOutput* viewer, const TimeRange& range);
protected:
virtual void TextureToFrame(const QVariant& texture, FramePtr frame, const QMatrix4x4 &mat) const = 0;
@@ -135,16 +128,10 @@ signals:
void FinishedJob();
private:
void UpdateData(bool block_for_update);
NodeValue GetDataFromStream(StreamPtr stream, const TimeRange& input_time);
DecoderPtr ResolveDecoderFromInput(StreamPtr stream);
void CopyNodeInputValue(NodeInput* input);
Node *CopyNodeConnections(Node *src_node);
void CopyNodeMakeConnection(NodeInput *src_input, NodeInput *dst_input);
RenderBackend* parent_;
VideoRenderingParams video_params_;
@@ -165,15 +152,12 @@ private:
DecoderCache decoder_cache_;
ViewerOutput* viewer_;
TimeRange audio_render_time_;
QList<NodeInput*> queued_updates_;
QHash<Node*, Node*> copy_map_;
bool available_;
bool audio_mode_is_preview_;
QMutex lock_;
QHash<Node*, Node*>* copy_map_;
};