From da9cdbd29e7162c289ec87abff34f3a2531d7f4d Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 12 Apr 2021 10:35:02 +1000 Subject: [PATCH] block: disable connecting and keyframing speed parameter We're going to replace keyframing this with a time remap node because that will be much simpler to implement. Fixes #1192. Fixes #1204. --- app/node/block/block.cpp | 39 ++++++++++++++-------------------- app/render/renderprocessor.cpp | 18 ++++++---------- 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/app/node/block/block.cpp b/app/node/block/block.cpp index 4ce6ec91b..8cee4b959 100644 --- a/app/node/block/block.cpp +++ b/app/node/block/block.cpp @@ -50,8 +50,9 @@ Block::Block() : AddInput(kEnabledInput, NodeValue::kBoolean, true, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); - AddInput(kSpeedInput, NodeValue::kFloat, 1.0); + AddInput(kSpeedInput, NodeValue::kFloat, 1.0, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); SetInputProperty(kSpeedInput, QStringLiteral("view"), FloatSlider::kPercentage); + SetInputProperty(kSpeedInput, QStringLiteral("min"), 0.0); IgnoreHashingFrom(kSpeedInput); // A block's length must be greater than 0 @@ -126,18 +127,14 @@ rational Block::SequenceToMediaTime(const rational &sequence_time) const rational local_time = sequence_time; // FIXME: Doesn't handle reversing - if (IsInputStatic(kSpeedInput)) { - double speed_value = GetStandardValue(kSpeedInput).toDouble(); + double speed_value = GetStandardValue(kSpeedInput).toDouble(); - if (qIsNull(speed_value)) { - // Effectively holds the frame at the in point - local_time = 0; - } else if (!qFuzzyCompare(speed_value, 1.0)) { - // Multiply time - local_time = rational::fromDouble(local_time.toDouble() * speed_value); - } - } else { - // FIXME: We'll need to calculate the speed hoo boy + if (qIsNull(speed_value)) { + // Effectively holds the frame at the in point + local_time = 0; + } else if (!qFuzzyCompare(speed_value, 1.0)) { + // Multiply time + local_time = rational::fromDouble(local_time.toDouble() * speed_value); } return local_time + media_in(); @@ -153,18 +150,14 @@ rational Block::MediaToSequenceTime(const rational &media_time) const rational sequence_time = media_time - media_in(); // FIXME: Doesn't handle reversing - if (IsInputKeyframing(kSpeedInput) || IsInputConnected(kSpeedInput)) { - // FIXME: We'll need to calculate the speed hoo boy - } else { - double speed_value = GetStandardValue(kSpeedInput).toDouble(); + double speed_value = GetStandardValue(kSpeedInput).toDouble(); - if (qIsNull(speed_value)) { - // Effectively holds the frame at the in point, also prevents divide by zero - sequence_time = 0; - } else if (!qFuzzyCompare(speed_value, 1.0)) { - // Multiply time - sequence_time = rational::fromDouble(sequence_time.toDouble() / speed_value); - } + if (qIsNull(speed_value)) { + // Effectively holds the frame at the in point, also prevents divide by zero + sequence_time = 0; + } else if (!qFuzzyCompare(speed_value, 1.0)) { + // Multiply time + sequence_time = rational::fromDouble(sequence_time.toDouble() / speed_value); } return sequence_time; diff --git a/app/render/renderprocessor.cpp b/app/render/renderprocessor.cpp index 63bad549c..c600ad43d 100644 --- a/app/render/renderprocessor.cpp +++ b/app/render/renderprocessor.cpp @@ -227,18 +227,14 @@ NodeValueTable RenderProcessor::GenerateBlockTable(const Track *track, const Tim } // FIXME: Doesn't handle reversing - if (b->IsInputKeyframing(Block::kSpeedInput) || b->IsInputConnected(Block::kSpeedInput)) { - // FIXME: We'll need to calculate the speed hoo boy - } else { - double speed_value = b->GetStandardValue(Block::kSpeedInput).toDouble(); + double speed_value = b->GetStandardValue(Block::kSpeedInput).toDouble(); - if (qIsNull(speed_value)) { - // Just silence, don't think there's any other practical application of 0 speed audio - samples_from_this_block->fill(0); - } else if (!qFuzzyCompare(speed_value, 1.0)) { - // Multiply time - samples_from_this_block->speed(speed_value); - } + if (qIsNull(speed_value)) { + // Just silence, don't think there's any other practical application of 0 speed audio + samples_from_this_block->fill(0); + } else if (!qFuzzyCompare(speed_value, 1.0)) { + // Multiply time + samples_from_this_block->speed(speed_value); } int copy_length = qMin(max_dest_sz, samples_from_this_block->sample_count());