Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenloader/intern/versioning_300.c63
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c1
-rw-r--r--source/blender/sequencer/intern/strip_time.c25
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);
}