VSE: Improve retiming code readability

Add utility function to convert timeline frame to frame index.

This also fixes unreported incorrect math in
`SEQ_retiming_transition_key_frame_set()`.

Pull Request: https://projects.blender.org/blender/blender/pulls/131659
This commit is contained in:
Richard Antalik
2024-12-11 08:47:53 +01:00
committed by Richard Antalik
parent 918398f0fa
commit a4ca725d86

View File

@@ -53,6 +53,15 @@ int SEQ_retiming_key_index_get(const Sequence *seq, const SeqRetimingKey *key)
return key - seq->retiming_keys;
}
static int content_frame_index_get(const Scene *scene,
const Sequence *seq,
const int timeline_frame)
{
const int sound_offset = SEQ_time_get_rounded_sound_offset(scene, seq);
return (timeline_frame - SEQ_time_start_frame_get(seq) - sound_offset) *
SEQ_time_media_playback_rate_factor_get(scene, seq);
}
SeqRetimingKey *SEQ_retiming_key_get_by_timeline_frame(const Scene *scene,
const Sequence *seq,
const int timeline_frame)
@@ -348,11 +357,7 @@ static SeqRetimingKey *seq_retiming_add_key(Sequence *seq, float frame_index)
SeqRetimingKey *SEQ_retiming_add_key(const Scene *scene, Sequence *seq, const int timeline_frame)
{
const int sound_offset = SEQ_time_get_rounded_sound_offset(scene, seq);
const float frame_index = (timeline_frame - SEQ_time_start_frame_get(seq) - sound_offset) *
SEQ_time_media_playback_rate_factor_get(scene, seq);
return seq_retiming_add_key(seq, frame_index);
return seq_retiming_add_key(seq, content_frame_index_get(scene, seq, timeline_frame));
}
void SEQ_retiming_transition_key_frame_set(const Scene *scene,
@@ -364,8 +369,7 @@ void SEQ_retiming_transition_key_frame_set(const Scene *scene,
SeqRetimingKey *key_end = key_start + 1;
const int start_frame_index = key_start->strip_frame_index;
const int midpoint = key_start->original_strip_frame_index;
const int new_frame_index = (timeline_frame - SEQ_time_start_frame_get(seq)) *
SEQ_time_media_playback_rate_factor_get(scene, seq);
const int new_frame_index = content_frame_index_get(scene, seq, timeline_frame);
int new_midpoint_offset = new_frame_index - midpoint;
const float prev_segment_step = seq_retiming_segment_step_get(key_start - 1);
const float next_segment_step = seq_retiming_segment_step_get(key_end);