clip: fixed waveform issues with speed and in trimming

This commit is contained in:
itsmattkc
2022-04-11 16:41:14 -07:00
parent 80d53c6d0c
commit 60e5241f05
2 changed files with 12 additions and 10 deletions
+11 -9
View File
@@ -110,7 +110,7 @@ void ClipBlock::set_length_and_media_in(const rational &length)
if (!reverse()) {
// Calculate media_in adjustment
rational proposed_media_in = SequenceToMediaTime(this->length() - length);
rational proposed_media_in = SequenceToMediaTime(this->length() - length, false, true);
waveform_.TrimIn(proposed_media_in - media_in());
@@ -133,7 +133,7 @@ void ClipBlock::set_media_in(const rational &media_in)
SetStandardValue(kMediaInInput, QVariant::fromValue(media_in));
}
rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool ignore_reverse) const
rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool ignore_reverse, bool ignore_speed) const
{
// These constants are not considered "values" per se, so we don't modify them
if (sequence_time == RATIONAL_MIN || sequence_time == RATIONAL_MAX) {
@@ -142,13 +142,15 @@ rational ClipBlock::SequenceToMediaTime(const rational &sequence_time, bool igno
rational media_time = sequence_time;
double speed_value = speed();
if (qIsNull(speed_value)) {
// Effectively holds the frame at the in point
media_time = 0;
} else if (!qFuzzyCompare(speed_value, 1.0)) {
// Multiply time
media_time = rational::fromDouble(media_time.toDouble() * speed_value);
if (!ignore_speed) {
double speed_value = speed();
if (qIsNull(speed_value)) {
// Effectively holds the frame at the in point
media_time = 0;
} else if (!qFuzzyCompare(speed_value, 1.0)) {
// Multiply time
media_time = rational::fromDouble(media_time.toDouble() * speed_value);
}
}
if (reverse() && !ignore_reverse) {
+1 -1
View File
@@ -133,7 +133,7 @@ protected:
virtual void Hash(QCryptographicHash &hash, const NodeGlobals &globals, const VideoParams& video_params) const override;
private:
rational SequenceToMediaTime(const rational& sequence_time, bool ignore_reverse = false) const;
rational SequenceToMediaTime(const rational& sequence_time, bool ignore_reverse = false, bool ignore_speed = false) const;
rational MediaToSequenceTime(const rational& media_time) const;