move clamping code from clip to track
Fixes severe regression related to audio transitions
This commit is contained in:
@@ -464,29 +464,7 @@ TimeRange ClipBlock::InputTimeAdjustment(const QString& input, int element, cons
|
||||
Q_UNUSED(element)
|
||||
|
||||
if (input == kBufferIn) {
|
||||
rational in = input_time.in();
|
||||
rational out = input_time.out();
|
||||
|
||||
if (clamp) {
|
||||
rational minimum = 0;
|
||||
rational maximum = length();
|
||||
|
||||
if (in_transition_) {
|
||||
minimum -= in_transition_->length();
|
||||
}
|
||||
|
||||
if (out_transition_) {
|
||||
maximum += out_transition_->length();
|
||||
}
|
||||
|
||||
in = std::max(in, minimum);
|
||||
out = std::min(out, maximum);
|
||||
}
|
||||
|
||||
in = SequenceToMediaTime(in);
|
||||
out = SequenceToMediaTime(out);
|
||||
|
||||
return TimeRange(in, out);
|
||||
return TimeRange(SequenceToMediaTime(input_time.in()), SequenceToMediaTime(input_time.out()));
|
||||
}
|
||||
|
||||
return super::InputTimeAdjustment(input, element, input_time, clamp);
|
||||
|
||||
@@ -292,12 +292,8 @@ TimeRange TransitionBlock::InputTimeAdjustment(const QString &input, int element
|
||||
if (input == kInBlockInput || input == kOutBlockInput) {
|
||||
Block* block = dynamic_cast<Block*>(GetConnectedOutput(input));
|
||||
if (block) {
|
||||
TimeRange range = input_time;
|
||||
if (clamp) {
|
||||
range.set_range(std::max(rational(0), range.in()), std::min(this->length(), range.out()));
|
||||
}
|
||||
range = range + in() - block->in();
|
||||
return range;
|
||||
// Retransform time as if it came from the track
|
||||
return input_time + in() - block->in();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +152,14 @@ TimeRange Track::InputTimeAdjustment(const QString& input, int element, const Ti
|
||||
int cache_index = GetCacheIndexFromArrayIndex(element);
|
||||
|
||||
if (cache_index > -1) {
|
||||
return TransformRangeForBlock(blocks_.at(cache_index), input_time);
|
||||
TimeRange r = input_time;
|
||||
Block *b = blocks_.at(cache_index);
|
||||
|
||||
if (clamp) {
|
||||
r.set_range(std::max(r.in(), b->in()), std::min(r.out(), b->out()));
|
||||
}
|
||||
|
||||
return TransformRangeForBlock(b, r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user