Fix T97507: Crash when deleting adjustment layer

Issue was not properly fixed in 3cef9ebaf8 due to oversight.
`SEQ_get_channels_by_seq` returned pointer to `seqbase` instead of `channels`.
This commit is contained in:
2022-05-02 18:20:56 +02:00
parent e4e5d7781e
commit 38a4d96a90
3 changed files with 8 additions and 6 deletions

View File

@@ -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
}

View File

@@ -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;
}
}

View File

@@ -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