Fix VSE retiming last key position incorrect
Last key is drawn on the right edge of the strip, but that is end of the frame, which it should be bound to. Because of this, drawing code and operators must consider, that this key is always displaced. This was not done in 86a0d0015a and caused issues like #113755 that was fixed incorrectly.
This commit is contained in:
parent
79b1eacba9
commit
dadbb5c5f7
@ -71,6 +71,9 @@ static float strip_y_rescale(const Sequence *seq, const float y_value)
|
||||
|
||||
static float key_x_get(const Scene *scene, const Sequence *seq, const SeqRetimingKey *key)
|
||||
{
|
||||
if (SEQ_retiming_is_last_key(seq, key)) {
|
||||
return SEQ_retiming_key_timeline_frame_get(scene, seq, key) + 1;
|
||||
}
|
||||
return SEQ_retiming_key_timeline_frame_get(scene, seq, key);
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@ void SEQ_retiming_data_ensure(Sequence *seq)
|
||||
|
||||
seq->retiming_keys = (SeqRetimingKey *)MEM_calloc_arrayN(2, sizeof(SeqRetimingKey), __func__);
|
||||
SeqRetimingKey *key = seq->retiming_keys + 1;
|
||||
key->strip_frame_index = seq->len;
|
||||
key->strip_frame_index = seq->len - 1;
|
||||
key->retiming_factor = 1.0f;
|
||||
seq->retiming_keys_num = 2;
|
||||
}
|
||||
@ -565,7 +565,7 @@ float SEQ_retiming_key_speed_get(const Sequence *seq, const SeqRetimingKey *key)
|
||||
|
||||
const SeqRetimingKey *key_prev = key - 1;
|
||||
|
||||
const int frame_index_max = seq->len;
|
||||
const int frame_index_max = seq->len - 1;
|
||||
const int frame_retimed_prev = round_fl_to_int(key_prev->retiming_factor * frame_index_max);
|
||||
const int frame_index_prev = key_prev->strip_frame_index;
|
||||
const int frame_retimed = round_fl_to_int(key->retiming_factor * frame_index_max);
|
||||
|
@ -504,8 +504,8 @@ int SEQ_time_strip_length_get(const Scene *scene, const Sequence *seq)
|
||||
if (SEQ_retiming_is_active(seq)) {
|
||||
const SeqRetimingKey *key_start = seq->retiming_keys;
|
||||
const SeqRetimingKey *key_end = seq->retiming_keys + (SEQ_retiming_keys_count(seq) - 1);
|
||||
return key_end->strip_frame_index / seq_time_media_playback_rate_factor_get(scene, seq) -
|
||||
(key_start->strip_frame_index) / seq_time_media_playback_rate_factor_get(scene, seq);
|
||||
return (key_end->strip_frame_index + 1) / seq_time_media_playback_rate_factor_get(scene, seq) -
|
||||
key_start->strip_frame_index / seq_time_media_playback_rate_factor_get(scene, seq);
|
||||
}
|
||||
|
||||
return seq->len / seq_time_media_playback_rate_factor_get(scene, seq);
|
||||
|
Loading…
Reference in New Issue
Block a user