[Bf-blender-cvs] [98990f6ba43] blender-v2.83-release: Fix T76033: VSE crash with prefetch, disk cache and meta strips

Richard Antalik noreply at git.blender.org
Fri May 1 21:24:06 CEST 2020


Commit: 98990f6ba439b496e8680d5043ebb18365b9e054
Author: Richard Antalik
Date:   Fri May 1 21:16:50 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rB98990f6ba439b496e8680d5043ebb18365b9e054

Fix T76033: VSE crash with prefetch, disk cache and meta strips

`BKE_sequencer_prefetch_get_original_sequence()` didn't look in metas
and returned NULL. This caused crash in disk cache that was trying to
read seq->name.

Add function that will look in meta strips recursively and condition
that seq must not be NULL.

Reviewed By: brecht

Maniphest Tasks: T76033

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

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

M	source/blender/blenkernel/intern/seqcache.c
M	source/blender/blenkernel/intern/seqprefetch.c

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

diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c
index f999a98faac..8a8b4d98c63 100644
--- a/source/blender/blenkernel/intern/seqcache.c
+++ b/source/blender/blenkernel/intern/seqcache.c
@@ -1225,6 +1225,10 @@ struct ImBuf *BKE_sequencer_cache_get(
     seq = BKE_sequencer_prefetch_get_original_sequence(seq, scene);
   }
 
+  if (!seq) {
+    return NULL;
+  }
+
   if (!scene->ed->cache) {
     seq_cache_create(context->bmain, scene);
   }
@@ -1287,6 +1291,10 @@ bool BKE_sequencer_cache_put_if_possible(const SeqRenderData *context,
     seq = BKE_sequencer_prefetch_get_original_sequence(seq, scene);
   }
 
+  if (!seq) {
+    return NULL;
+  }
+
   if (BKE_sequencer_cache_recycle_item(scene)) {
     BKE_sequencer_cache_put(context, seq, cfra, type, ibuf, cost, skip_disk_cache);
     return true;
diff --git a/source/blender/blenkernel/intern/seqprefetch.c b/source/blender/blenkernel/intern/seqprefetch.c
index 67ed40cd48f..dabfd26f5b0 100644
--- a/source/blender/blenkernel/intern/seqprefetch.c
+++ b/source/blender/blenkernel/intern/seqprefetch.c
@@ -134,19 +134,29 @@ static bool seq_prefetch_job_is_waiting(Scene *scene)
   return pfjob->waiting;
 }
 
-/* for cache context swapping */
-Sequence *BKE_sequencer_prefetch_get_original_sequence(Sequence *seq, Scene *scene)
+static Sequence *sequencer_prefetch_get_original_sequence(Sequence *seq, ListBase *seqbase)
 {
-  Editing *ed = scene->ed;
-  ListBase *seqbase = &ed->seqbase;
-  Sequence *seq_orig = NULL;
-
-  for (seq_orig = (Sequence *)seqbase->first; seq_orig; seq_orig = seq_orig->next) {
+  LISTBASE_FOREACH (Sequence *, seq_orig, seqbase) {
     if (strcmp(seq->name, seq_orig->name) == 0) {
-      break;
+      return seq_orig;
+    }
+
+    if (seq_orig->type == SEQ_TYPE_META) {
+      Sequence *match = sequencer_prefetch_get_original_sequence(seq, &seq_orig->seqbase);
+      if (match != NULL) {
+        return match;
+      }
     }
   }
-  return seq_orig;
+
+  return NULL;
+}
+
+/* for cache context swapping */
+Sequence *BKE_sequencer_prefetch_get_original_sequence(Sequence *seq, Scene *scene)
+{
+  Editing *ed = scene->ed;
+  return sequencer_prefetch_get_original_sequence(seq, &ed->seqbase);
 }
 
 /* for cache context swapping */



More information about the Bf-blender-cvs mailing list