[Bf-blender-cvs] [38a4d96a906] blender-v3.2-release: Fix T97507: Crash when deleting adjustment layer

Richard Antalik noreply at git.blender.org
Tue May 3 09:08:59 CEST 2022


Commit: 38a4d96a9061808677d3bc770f1482766fe3f3ed
Author: Richard Antalik
Date:   Mon May 2 18:20:56 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rB38a4d96a9061808677d3bc770f1482766fe3f3ed

Fix T97507: Crash when deleting adjustment layer

Issue was not properly fixed in 3cef9ebaf81 due to oversight.
`SEQ_get_channels_by_seq` returned pointer to `seqbase` instead of `channels`.

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

M	source/blender/sequencer/SEQ_channels.h
M	source/blender/sequencer/intern/channels.c
M	source/blender/sequencer/intern/effects.c

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

diff --git a/source/blender/sequencer/SEQ_channels.h b/source/blender/sequencer/SEQ_channels.h
index 9436d5dfa32..dcfdb933940 100644
--- a/source/blender/sequencer/SEQ_channels.h
+++ b/source/blender/sequencer/SEQ_channels.h
@@ -29,7 +29,9 @@ char *SEQ_channel_name_get(struct ListBase *channels, const int channel_index);
 bool SEQ_channel_is_locked(const struct SeqTimelineChannel *channel);
 bool SEQ_channel_is_muted(const struct SeqTimelineChannel *channel);
 int SEQ_channel_index_get(const struct SeqTimelineChannel *channel);
-ListBase *SEQ_get_channels_by_seq(struct ListBase *seqbase, const struct Sequence *seq);
+ListBase *SEQ_get_channels_by_seq(struct ListBase *seqbase,
+                                  struct ListBase *channels,
+                                  const struct Sequence *seq);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/sequencer/intern/channels.c b/source/blender/sequencer/intern/channels.c
index 21e3461c7d0..5decee5a3bb 100644
--- a/source/blender/sequencer/intern/channels.c
+++ b/source/blender/sequencer/intern/channels.c
@@ -82,15 +82,15 @@ bool SEQ_channel_is_muted(const SeqTimelineChannel *channel)
   return (channel->flag & SEQ_CHANNEL_MUTE) != 0;
 }
 
-ListBase *SEQ_get_channels_by_seq(ListBase *seqbase, const Sequence *seq)
+ListBase *SEQ_get_channels_by_seq(ListBase *seqbase, ListBase *channels, const Sequence *seq)
 {
   ListBase *lb = NULL;
 
   LISTBASE_FOREACH (Sequence *, iseq, seqbase) {
     if (seq == iseq) {
-      return seqbase;
+      return channels;
     }
-    if ((lb = SEQ_get_channels_by_seq(&iseq->seqbase, seq))) {
+    if ((lb = SEQ_get_channels_by_seq(&iseq->seqbase, &iseq->channels, seq))) {
       return lb;
     }
   }
diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c
index f4fc79a6572..d4dd21add4e 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2432,7 +2432,7 @@ static ImBuf *do_multicam(const SeqRenderData *context,
     return NULL;
   }
   ListBase *seqbasep = SEQ_get_seqbase_by_seq(&ed->seqbase, seq);
-  ListBase *channels = SEQ_get_channels_by_seq(&ed->seqbase, seq);
+  ListBase *channels = SEQ_get_channels_by_seq(&ed->seqbase, &ed->channels, seq);
   if (!seqbasep) {
     return NULL;
   }
@@ -2468,7 +2468,7 @@ static ImBuf *do_adjustment_impl(const SeqRenderData *context, Sequence *seq, fl
   ed = context->scene->ed;
 
   ListBase *seqbasep = SEQ_get_seqbase_by_seq(&ed->seqbase, seq);
-  ListBase *channels = SEQ_get_channels_by_seq(&ed->seqbase, seq);
+  ListBase *channels = SEQ_get_channels_by_seq(&ed->seqbase, &ed->channels, seq);
 
   /* Clamp timeline_frame to strip range so it behaves as if it had "still frame" offset (last
    * frame is static after end of strip). This is how most strips behave. This way transition



More information about the Bf-blender-cvs mailing list