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/sequencer/intern/animation.c')
-rw-r--r--source/blender/sequencer/intern/animation.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/source/blender/sequencer/intern/animation.c b/source/blender/sequencer/intern/animation.c
index 27f7316e042..82dc5970a7f 100644
--- a/source/blender/sequencer/intern/animation.c
+++ b/source/blender/sequencer/intern/animation.c
@@ -48,9 +48,13 @@ GSet *SEQ_fcurves_by_strip_get(const Sequence *seq, ListBase *fcurve_base)
char rna_path[SEQ_RNAPATH_MAXSTR];
size_t rna_path_len = sequencer_rna_path_prefix(rna_path, seq->name + 2);
- GSet *fcurves = BLI_gset_ptr_new(__func__);
+ /* Only allocate `fcurves` if it's needed as it's possible there is no animation for `seq`. */
+ GSet *fcurves = NULL;
LISTBASE_FOREACH (FCurve *, fcurve, fcurve_base) {
if (STREQLEN(fcurve->rna_path, rna_path, rna_path_len)) {
+ if (fcurves == NULL) {
+ fcurves = BLI_gset_ptr_new(__func__);
+ }
BLI_gset_add(fcurves, fcurve);
}
}
@@ -65,8 +69,11 @@ void SEQ_offset_animdata(Scene *scene, Sequence *seq, int ofs)
if (!seq_animation_curves_exist(scene) || ofs == 0) {
return;
}
-
GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves);
+ if (fcurves == NULL) {
+ return;
+ }
+
GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) {
unsigned int i;
if (fcu->bezt) {
@@ -95,8 +102,11 @@ void SEQ_free_animdata(Scene *scene, Sequence *seq)
if (!seq_animation_curves_exist(scene)) {
return;
}
-
GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves);
+ if (fcurves == NULL) {
+ return;
+ }
+
GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) {
BLI_remlink(&scene->adt->action->curves, fcu);
BKE_fcurve_free(fcu);
@@ -126,10 +136,18 @@ void SEQ_animation_restore_original(Scene *scene, ListBase *list)
void SEQ_animation_duplicate(Scene *scene, Sequence *seq, ListBase *list)
{
+ if (BLI_listbase_is_empty(list)) {
+ return;
+ }
GSet *fcurves = SEQ_fcurves_by_strip_get(seq, list);
+ if (fcurves == NULL) {
+ return;
+ }
+
GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) {
FCurve *fcu_cpy = BKE_fcurve_copy(fcu);
BLI_addtail(&scene->adt->action->curves, fcu_cpy);
}
GSET_FOREACH_END();
+ BLI_gset_free(fcurves, NULL);
}