[Bf-blender-cvs] [dea1c1b9eb4] blender-v2.83-release: Fix T75495: Blender crashes opening a VSE .blend file

Richard Antalik noreply at git.blender.org
Sun Apr 26 23:43:33 CEST 2020


Commit: dea1c1b9eb4378bcf4d2f097f3b90a90076f8edd
Author: Richard Antalik
Date:   Sun Apr 26 23:35:56 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBdea1c1b9eb4378bcf4d2f097f3b90a90076f8edd

Fix T75495: Blender crashes opening a VSE .blend file

During scene copy modifier mask strips are relinked to point to strips in
new scene. If strip used as mask is in different seqbase, this can fail,
if seqbase is not copied yet.

Add SEQ_DUPE_IS_RECURSIVE_CALL flag to avoid relinking modifiers during recursive call.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7412

===================================================================

M	source/blender/blenkernel/BKE_sequencer.h
M	source/blender/blenkernel/intern/sequencer.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 9268fdf1391..939fcb33b2d 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -496,6 +496,7 @@ typedef struct SeqLoadInfo {
 #define SEQ_DUPE_CONTEXT (1 << 1)
 #define SEQ_DUPE_ANIM (1 << 2)
 #define SEQ_DUPE_ALL (1 << 3) /* otherwise only selected are copied */
+#define SEQ_DUPE_IS_RECURSIVE_CALL (1 << 4)
 
 /* use as an api function */
 typedef struct Sequence *(*SeqLoadFn)(struct bContext *, ListBase *, struct SeqLoadInfo *);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 93e5a3bbd74..d3d885fccd9 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -5818,7 +5818,7 @@ void BKE_sequence_base_dupli_recursive(const Scene *scene_src,
   Sequence *seqn = NULL;
   Sequence *last_seq = BKE_sequencer_active_get((Scene *)scene_src);
   /* always include meta's strips */
-  int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL;
+  int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL | SEQ_DUPE_IS_RECURSIVE_CALL;
 
   for (seq = seqbase->first; seq; seq = seq->next) {
     seq->tmp = NULL;
@@ -5844,6 +5844,12 @@ void BKE_sequence_base_dupli_recursive(const Scene *scene_src,
     }
   }
 
+  /* Fix modifier links recursively from the top level only, when all sequences have been
+   * copied. */
+  if (dupe_flag & SEQ_DUPE_IS_RECURSIVE_CALL) {
+    return;
+  }
+
   /* fix modifier linking */
   for (seq = nseqbase->first; seq; seq = seq->next) {
     seq_new_fix_links_recursive(seq);



More information about the Bf-blender-cvs mailing list