diff options
author | Richard Antalik <richardantalik@gmail.com> | 2021-06-16 01:29:17 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2021-06-16 01:29:17 +0300 |
commit | 1a5fa2b319e06ebbd2666987aa11240a371dcc09 (patch) | |
tree | fa19d3c2f8b603e302b063a600e78f16733b5c5d /source/blender/sequencer/intern/strip_add.c | |
parent | 143a81ccceaf7d3abccc5a9dd4bb3520813dd222 (diff) |
VSE: Improve animation evaluation performance
Use lookup string callback function for `sequences_all` RNA property
`rna_SequenceEditor_sequences_all_lookup_string` using a GHash for faster lookups.
When names are changed or strips are added/removed the lookup is tagged invalid.
The next time the lookup is used it will rebuild it.
Reviewed By: sergey, jbakker
Differential Revision: https://developer.blender.org/D11544
Diffstat (limited to 'source/blender/sequencer/intern/strip_add.c')
-rw-r--r-- | source/blender/sequencer/intern/strip_add.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/source/blender/sequencer/intern/strip_add.c b/source/blender/sequencer/intern/strip_add.c index 888220b7111..142991eeacf 100644 --- a/source/blender/sequencer/intern/strip_add.c +++ b/source/blender/sequencer/intern/strip_add.c @@ -56,6 +56,7 @@ #include "IMB_metadata.h" #include "SEQ_add.h" +#include "SEQ_edit.h" #include "SEQ_effects.h" #include "SEQ_relations.h" #include "SEQ_render.h" @@ -98,33 +99,32 @@ void SEQ_add_load_data_init(SeqLoadData *load_data, static void seq_add_generic_update(Scene *scene, ListBase *seqbase, Sequence *seq) { - SEQ_sequence_base_unique_name_recursive(seqbase, seq); + SEQ_sequence_base_unique_name_recursive(scene, seqbase, seq); SEQ_time_update_sequence_bounds(scene, seq); SEQ_sort(seqbase); SEQ_relations_invalidate_cache_composite(scene, seq); } -static void seq_add_set_name(Sequence *seq, SeqLoadData *load_data) +static void seq_add_set_name(Scene *scene, Sequence *seq, SeqLoadData *load_data) { if (load_data->name[0] != '\0') { - BLI_strncpy(seq->name + 2, load_data->name, sizeof(seq->name) - 2); + SEQ_edit_sequence_name_set(scene, seq, load_data->name); } else { if (seq->type == SEQ_TYPE_SCENE) { - BLI_strncpy(seq->name + 2, load_data->scene->id.name + 2, sizeof(seq->name) - 2); + SEQ_edit_sequence_name_set(scene, seq, load_data->scene->id.name + 2); } else if (seq->type == SEQ_TYPE_MOVIECLIP) { - BLI_strncpy(seq->name + 2, load_data->clip->id.name + 2, sizeof(seq->name) - 2); + SEQ_edit_sequence_name_set(scene, seq, load_data->clip->id.name + 2); } else if (seq->type == SEQ_TYPE_MASK) { - BLI_strncpy(seq->name + 2, load_data->mask->id.name + 2, sizeof(seq->name) - 2); + SEQ_edit_sequence_name_set(scene, seq, load_data->mask->id.name + 2); } else if ((seq->type & SEQ_TYPE_EFFECT) != 0) { - BLI_strncpy(seq->name + 2, SEQ_sequence_give_name(seq), sizeof(seq->name) - 2); + SEQ_edit_sequence_name_set(scene, seq, SEQ_sequence_give_name(seq)); } else { /* Image, sound and movie. */ - BLI_strncpy_utf8(seq->name + 2, load_data->name, sizeof(seq->name) - 2); - BLI_utf8_invalid_strip(seq->name + 2, strlen(seq->name + 2)); + SEQ_edit_sequence_name_set(scene, seq, load_data->name); } } } @@ -163,7 +163,7 @@ Sequence *SEQ_add_scene_strip(Scene *scene, ListBase *seqbase, struct SeqLoadDat seq->scene = load_data->scene; seq->len = load_data->scene->r.efra - load_data->scene->r.sfra + 1; id_us_ensure_real((ID *)load_data->scene); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; } @@ -184,7 +184,7 @@ Sequence *SEQ_add_movieclip_strip(Scene *scene, ListBase *seqbase, struct SeqLoa seq->clip = load_data->clip; seq->len = BKE_movieclip_get_duration(load_data->clip); id_us_ensure_real((ID *)load_data->clip); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; } @@ -205,7 +205,7 @@ Sequence *SEQ_add_mask_strip(Scene *scene, ListBase *seqbase, struct SeqLoadData seq->mask = load_data->mask; seq->len = BKE_mask_get_duration(load_data->mask); id_us_ensure_real((ID *)load_data->mask); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; } @@ -249,7 +249,7 @@ Sequence *SEQ_add_effect_strip(Scene *scene, ListBase *seqbase, struct SeqLoadDa } SEQ_relations_update_changed_seq_and_deps(scene, seq, 1, 1); /* Runs SEQ_time_update_sequence. */ - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; @@ -364,7 +364,7 @@ Sequence *SEQ_add_image_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqL /* Set Last active directory. */ BLI_strncpy(scene->ed->act_imagedir, seq->strip->dir, sizeof(scene->ed->act_imagedir)); seq_add_set_view_transform(scene, seq, load_data); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; @@ -426,7 +426,7 @@ Sequence *SEQ_add_sound_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqL /* Set Last active directory. */ BLI_strncpy(scene->ed->act_sounddir, strip->dir, FILE_MAXDIR); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); return seq; @@ -458,7 +458,7 @@ Sequence *SEQ_add_meta_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_ seqbase, load_data->start_frame, load_data->channel, SEQ_TYPE_META); /* Set name. */ - seq_add_set_name(seqm, load_data); + seq_add_set_name(scene, seqm, load_data); /* Set frames start and length. */ seqm->start = load_data->start_frame; @@ -590,7 +590,7 @@ Sequence *SEQ_add_movie_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqL BLI_split_dirfile(load_data->path, strip->dir, se->name, sizeof(strip->dir), sizeof(se->name)); seq_add_set_view_transform(scene, seq, load_data); - seq_add_set_name(seq, load_data); + seq_add_set_name(scene, seq, load_data); seq_add_generic_update(scene, seqbase, seq); MEM_freeN(anim_arr); |