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:
authorRichard Antalik <richardantalik@gmail.com>2022-05-17 22:08:49 +0300
committerRichard Antalik <richardantalik@gmail.com>2022-05-17 22:22:21 +0300
commit35e73aa3472ab8c1e28feec1829fae79967322b5 (patch)
tree142ccb43c30bffb4118baa474c7abe3efc654928 /source/blender/sequencer
parentb48adbc9d79c55b8dac368865098b34c7536d74f (diff)
Fix T98021: Crash when using scene strip as sequencer input
Issue was caused by treating such strip as meta and using `seq->channels` directly, which is not valid for scene strips. Pointer to channels is now provided by function `SEQ_get_seqbase_from_sequence`.
Diffstat (limited to 'source/blender/sequencer')
-rw-r--r--source/blender/sequencer/SEQ_utils.h4
-rw-r--r--source/blender/sequencer/intern/render.c4
-rw-r--r--source/blender/sequencer/intern/utils.c4
3 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/sequencer/SEQ_utils.h b/source/blender/sequencer/SEQ_utils.h
index ec33bca87a3..ce3c81606ea 100644
--- a/source/blender/sequencer/SEQ_utils.h
+++ b/source/blender/sequencer/SEQ_utils.h
@@ -32,7 +32,9 @@ void SEQ_sequence_base_unique_name_recursive(struct Scene *scene,
struct ListBase *seqbasep,
struct Sequence *seq);
const char *SEQ_sequence_give_name(struct Sequence *seq);
-struct ListBase *SEQ_get_seqbase_from_sequence(struct Sequence *seq, int *r_offset);
+struct ListBase *SEQ_get_seqbase_from_sequence(struct Sequence *seq,
+ struct ListBase **channels,
+ int *r_offset);
const struct Sequence *SEQ_get_topmost_sequence(const struct Scene *scene, int frame);
/**
* In cases where we don't know the sequence's listbase.
diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c
index 8d8a13be09e..1b9e89a35d5 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -1586,10 +1586,10 @@ static ImBuf *do_render_strip_seqbase(const SeqRenderData *context,
{
ImBuf *ibuf = NULL;
ListBase *seqbase = NULL;
- ListBase *channels = &seq->channels;
+ ListBase *channels = NULL;
int offset;
- seqbase = SEQ_get_seqbase_from_sequence(seq, &offset);
+ seqbase = SEQ_get_seqbase_from_sequence(seq, &channels, &offset);
if (seqbase && !BLI_listbase_is_empty(seqbase)) {
diff --git a/source/blender/sequencer/intern/utils.c b/source/blender/sequencer/intern/utils.c
index da422c4228f..0cf47420d8f 100644
--- a/source/blender/sequencer/intern/utils.c
+++ b/source/blender/sequencer/intern/utils.c
@@ -225,13 +225,14 @@ const char *SEQ_sequence_give_name(Sequence *seq)
return name;
}
-ListBase *SEQ_get_seqbase_from_sequence(Sequence *seq, int *r_offset)
+ListBase *SEQ_get_seqbase_from_sequence(Sequence *seq, ListBase **r_channels, int *r_offset)
{
ListBase *seqbase = NULL;
switch (seq->type) {
case SEQ_TYPE_META: {
seqbase = &seq->seqbase;
+ *r_channels = &seq->channels;
*r_offset = seq->start;
break;
}
@@ -240,6 +241,7 @@ ListBase *SEQ_get_seqbase_from_sequence(Sequence *seq, int *r_offset)
Editing *ed = SEQ_editing_get(seq->scene);
if (ed) {
seqbase = &ed->seqbase;
+ *r_channels = &ed->channels;
*r_offset = seq->scene->r.sfra;
}
}