diff --git a/app/render/backend/opengl/openglbackend.h b/app/render/backend/opengl/openglbackend.h index 6852fac93..5f9b8daf4 100644 --- a/app/render/backend/opengl/openglbackend.h +++ b/app/render/backend/opengl/openglbackend.h @@ -33,7 +33,7 @@ public: protected: virtual void TextureToFrame(const QVariant& texture, FramePtr frame) const override; - virtual QVariant FrameToTexture(FramePtr frame) const override; + virtual NodeValue FrameToTexture(FramePtr frame) const override; virtual void ProcessNodeEvent(const Node *node, const TimeRange &range, NodeValueDatabase &input_params, NodeValueTable &output_params) const override; diff --git a/app/render/backend/renderbackend.cpp b/app/render/backend/renderbackend.cpp index 3e7164722..d4faf3801 100644 --- a/app/render/backend/renderbackend.cpp +++ b/app/render/backend/renderbackend.cpp @@ -211,13 +211,22 @@ void RenderBackend::FootageProcessingEvent(StreamPtr stream, const TimeRange &in } else if (stream->type() != Stream::kAudio) { - NodeValue value = GetDataFromStream(stream, input_time); - - table->Push(value); + table->Push(GetDataFromStream(stream, input_time)); } } +NodeValue RenderBackend::GetDataFromStream(StreamPtr stream, const TimeRange &input_time) const +{ + DecoderPtr decoder = ResolveDecoderFromInput(stream); + + if (decoder) { + return FrameToTexture(decoder, stream, input_time); + } + + return NodeValue(); +} + NodeValueTable RenderBackend::GenerateBlockTable(const TrackOutput *track, const TimeRange &range) const { if (track->track_type() == Timeline::kTrackTypeAudio) { diff --git a/app/render/backend/renderbackend.h b/app/render/backend/renderbackend.h index ed2da09ce..cd226a0a6 100644 --- a/app/render/backend/renderbackend.h +++ b/app/render/backend/renderbackend.h @@ -42,8 +42,14 @@ public: void CancelQueue(); + /** + * @brief Asynchronously generate a hash at a given time + */ QFuture Hash(const rational& time); + /** + * @brief Asynchronously generate a frame at a given time + */ QFuture RenderFrame(const rational& time); void SetDivider(const int& divider); @@ -60,7 +66,7 @@ public slots: protected: virtual void TextureToFrame(const QVariant& texture, FramePtr frame) const = 0; - virtual QVariant FrameToTexture(FramePtr frame) const = 0; + virtual NodeValue FrameToTexture(FramePtr frame) const = 0; virtual void FootageProcessingEvent(StreamPtr stream, const TimeRange &input_time, NodeValueTable* table) const override; @@ -78,6 +84,10 @@ private: VideoRenderingParams video_params() const; + NodeValue GetDataFromStream(StreamPtr stream, const TimeRange& input_time) const; + + DecoderPtr ResolveDecoderFromInput(StreamPtr stream) const; + class CopyMap { public: CopyMap();