Fix issues when adding retiming key outside of strip boundary

When retiming key is added to frame before strip starts, this causes
crash on null dereference. After adding null check, this creates
retiming data, even though operation is not valid. To prevent creating
empty retiming data, `SEQ_retiming_data_ensure()` is only executed, when
operator actually adds a keyframe.
This commit is contained in:
Richard Antalik
2023-10-19 01:55:38 +02:00
parent e11f031d62
commit d4fd65ffc9

View File

@@ -202,11 +202,10 @@ static bool retiming_key_add_new_for_seq(bContext *C,
const int timeline_frame)
{
Scene *scene = CTX_data_scene(C);
SEQ_retiming_data_ensure(seq);
const int frame_index = BKE_scene_frame_get(scene) - SEQ_time_start_frame_get(seq);
const SeqRetimingKey *key = SEQ_retiming_find_segment_start_key(seq, frame_index);
if (SEQ_retiming_key_is_transition_start(key)) {
if (key != nullptr && SEQ_retiming_key_is_transition_start(key)) {
BKE_report(op->reports, RPT_WARNING, "Can not create key inside of speed transition");
return false;
}
@@ -216,6 +215,7 @@ static bool retiming_key_add_new_for_seq(bContext *C,
return false;
}
SEQ_retiming_data_ensure(seq);
SEQ_retiming_add_key(scene, seq, timeline_frame);
return true;
}