diff options
-rw-r--r-- | source/blender/blenloader/intern/versioning_300.c | 63 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_sequencer.c | 1 | ||||
-rw-r--r-- | source/blender/sequencer/intern/strip_time.c | 25 |
3 files changed, 61 insertions, 28 deletions
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c index 35b1367ca1e..f6cc413d220 100644 --- a/source/blender/blenloader/intern/versioning_300.c +++ b/source/blender/blenloader/intern/versioning_300.c @@ -595,6 +595,39 @@ static bNodeTree *add_realize_node_tree(Main *bmain) return node_tree; } +static void seq_speed_factor_fix_rna_path(Sequence *seq, ListBase *fcurves) +{ + char name_esc[(sizeof(seq->name) - 2) * 2]; + BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc)); + char *path = BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].pitch", name_esc); + FCurve *fcu = BKE_fcurve_find(&fcurves, path, 0); + if (fcu != NULL) { + MEM_freeN(fcu->rna_path); + fcu->rna_path = BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].speed_factor", name_esc); + } + MEM_freeN(path); +} + +static bool seq_speed_factor_set(Sequence *seq, void *user_data) +{ + const Scene *scene = user_data; + if (seq->type == SEQ_TYPE_SOUND_RAM) { + /* Move `pitch` animation to `speed_factor` */ + if (scene->adt && scene->adt->action) { + seq_speed_factor_fix_rna_path(seq, &scene->adt->action->curves); + } + if (scene->adt && !BLI_listbase_is_empty(&scene->adt->drivers)) { + seq_speed_factor_fix_rna_path(seq, &scene->adt->drivers); + } + + seq->speed_factor = seq->pitch; + } + else { + seq->speed_factor = 1.0f; + } + return true; +} + void do_versions_after_linking_300(Main *bmain, ReportList *UNUSED(reports)) { if (MAIN_VERSION_ATLEAST(bmain, 300, 0) && !MAIN_VERSION_ATLEAST(bmain, 300, 1)) { @@ -819,6 +852,17 @@ void do_versions_after_linking_300(Main *bmain, ReportList *UNUSED(reports)) } } } + + if (!MAIN_VERSION_ATLEAST(bmain, 303, 5)) { + LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { + Editing *ed = SEQ_editing_get(scene); + if (ed == NULL) { + continue; + } + SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, scene); + } + } + /** * Versioning code until next subversion bump goes here. * @@ -1235,17 +1279,6 @@ static bool version_merge_still_offsets(Sequence *seq, void *UNUSED(user_data)) return true; } -static bool seq_speed_factor_set(Sequence *seq, void *UNUSED(user_data)) -{ - if (seq->type == SEQ_TYPE_SOUND_RAM) { - seq->speed_factor = seq->pitch; - } - else { - seq->speed_factor = 1.0f; - } - return true; -} - /* Those `version_liboverride_rnacollections_*` functions mimic the old, pre-3.0 code to find * anchor and source items in the given list of modifiers, constraints etc., using only the * `subitem_local` data of the override property operation. @@ -3223,14 +3256,6 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain) } } } - - LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { - Editing *ed = SEQ_editing_get(scene); - if (ed == NULL) { - continue; - } - SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, NULL); - } } /** * Versioning code until next subversion bump goes here. diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index f9dfb8544ca..04037a64426 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -2331,7 +2331,6 @@ static void rna_def_speed_factor(StructRNA *srna) RNA_def_property_float_default(prop, 1.0f); RNA_def_property_range(prop, 0.1f, FLT_MAX); RNA_def_property_ui_range(prop, 1.0f, 100.0f, 10.0, 3); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Speed Factor", "Multiply playback speed"); RNA_def_property_float_funcs( prop, NULL, "rna_Sequence_speed_factor_set", NULL); /* overlap test */ diff --git a/source/blender/sequencer/intern/strip_time.c b/source/blender/sequencer/intern/strip_time.c index d4357fe28b6..aa51813c9b8 100644 --- a/source/blender/sequencer/intern/strip_time.c +++ b/source/blender/sequencer/intern/strip_time.c @@ -437,15 +437,20 @@ bool SEQ_time_strip_intersects_frame(const Scene *scene, void SEQ_time_speed_factor_set(const Scene *scene, Sequence *seq, const float speed_factor) { - const float left_handle_frame = SEQ_time_left_handle_frame_get(scene, seq); - const float unity_start_offset = seq->startofs * seq->speed_factor; - const float unity_end_offset = seq->endofs * seq->speed_factor; - /* Left handle is pivot point for content scaling - it must always show same frame. */ - seq->speed_factor = speed_factor; - seq->startofs = unity_start_offset / speed_factor; - seq->start = left_handle_frame - seq->startofs; - seq->endofs = unity_end_offset / speed_factor; + if (seq->type == SEQ_TYPE_SOUND_RAM) { + seq->speed_factor = speed_factor; + } + else { + const float left_handle_frame = SEQ_time_left_handle_frame_get(scene, seq); + const float unity_start_offset = seq->startofs * seq->speed_factor; + const float unity_end_offset = seq->endofs * seq->speed_factor; + /* Left handle is pivot point for content scaling - it must always show same frame. */ + seq->speed_factor = speed_factor; + seq->startofs = unity_start_offset / speed_factor; + seq->start = left_handle_frame - seq->startofs; + seq->endofs = unity_end_offset / speed_factor; + } SEQ_time_update_meta_strip_range(scene, seq_sequence_lookup_meta_by_seq(scene, seq)); seq_time_update_effects_strip_range(scene, seq_sequence_lookup_effects_by_seq(scene, seq)); @@ -471,6 +476,10 @@ bool SEQ_time_has_still_frames(const Scene *scene, const Sequence *seq) * factor */ int SEQ_time_strip_length_get(const Scene *scene, const Sequence *seq) { + if (seq->type == SEQ_TYPE_SOUND_RAM) { + return seq->len; + } + return seq->len / seq_time_playback_rate_factor_get(scene, seq); } |