From b5be11a93bfb02dd4782c01faec9ee8c74a7911b Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Sun, 9 Jan 2022 22:21:10 -0800 Subject: [PATCH] push null texture if footage time is NaN Fixes #1767 --- app/node/traverser.cpp | 16 ++++++++++++---- app/node/traverser.h | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/node/traverser.cpp b/app/node/traverser.cpp index 1ff952be2..00239a9e6 100644 --- a/app/node/traverser.cpp +++ b/app/node/traverser.cpp @@ -281,7 +281,7 @@ TexturePtr NodeTraverser::ProcessVideoFootage(const FootageJob &stream, const ra Q_UNUSED(input_time) // Create dummy texture with footage params - return std::make_shared(stream.video_params()); + return CreateDummyTexture(stream.video_params()); } SampleBufferPtr NodeTraverser::ProcessAudioFootage(const FootageJob& stream, const TimeRange &input_time) @@ -301,7 +301,7 @@ TexturePtr NodeTraverser::ProcessShader(const Node *node, const TimeRange &range // Create dummy texture with sequence params VideoParams tex_params = video_params_; tex_params.set_channel_count(GetChannelCountFromJob(job)); - return std::make_shared(tex_params); + return CreateDummyTexture(tex_params); } SampleBufferPtr NodeTraverser::ProcessSamples(const Node *node, const TimeRange &range, const SampleJob &job) @@ -321,7 +321,7 @@ TexturePtr NodeTraverser::ProcessFrameGeneration(const Node *node, const Generat // Create dummy texture with sequence params VideoParams tex_params = video_params_; tex_params.set_channel_count(GetChannelCountFromJob(job)); - return std::make_shared(tex_params); + return CreateDummyTexture(tex_params); } void NodeTraverser::SaveCachedTexture(const QByteArray &hash, TexturePtr texture) @@ -396,7 +396,10 @@ void NodeTraverser::PostProcessTable(const Node *node, const Node::ValueHint &hi if (job.type() == Track::kVideo) { rational footage_time = Footage::AdjustTimeByLoopMode(range.in(), job.loop_mode(), job.length(), job.video_params().video_type(), job.video_params().frame_rate_as_time_base()); - if (!footage_time.isNaN()) { + if (footage_time.isNaN()) { + // Push dummy texture + output_params.Push(NodeValue::kTexture, QVariant::fromValue(CreateDummyTexture(job.video_params())), node, v.array(), v.tag()); + } else { output_params.Push(NodeValue::kTexture, QVariant::fromValue(ProcessVideoFootage(job, footage_time)), node, v.array(), v.tag()); } } @@ -434,4 +437,9 @@ void NodeTraverser::PostProcessTable(const Node *node, const Node::ValueHint &hi } } +TexturePtr NodeTraverser::CreateDummyTexture(const VideoParams &p) +{ + return std::make_shared(p); +} + } diff --git a/app/node/traverser.h b/app/node/traverser.h index 058afa7ee..839c8561b 100644 --- a/app/node/traverser.h +++ b/app/node/traverser.h @@ -111,6 +111,8 @@ protected: private: void PostProcessTable(const Node *node, const Node::ValueHint &hint, const TimeRange &range, NodeValueTable &output_params); + TexturePtr CreateDummyTexture(const VideoParams &p); + VideoParams video_params_; const QAtomicInt *cancel_;