VSE: Implement sanity check for files with more channels than supported
This is a follow up to 8fecc2a852
.
This makes sure future .blend files that have more channels than the
limit won't break Blender.
It can be backported to LTS.
This is part of https://developer.blender.org/D12645
Differential Revision: https://developer.blender.org/D12648
This commit is contained in:
parent
7cd43a9d28
commit
a64782b133
Notes:
blender-bot
2024-04-11 14:26:06 +02:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -63,6 +63,8 @@
|
|||
#include "BLI_threads.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BLO_readfile.h"
|
||||
|
||||
#include "BLT_translation.h"
|
||||
|
||||
#include "BKE_action.h"
|
||||
|
@ -993,8 +995,13 @@ static void link_recurs_seq(BlendDataReader *reader, ListBase *lb)
|
|||
{
|
||||
BLO_read_list(reader, lb);
|
||||
|
||||
LISTBASE_FOREACH (Sequence *, seq, lb) {
|
||||
if (seq->seqbase.first) {
|
||||
LISTBASE_FOREACH_MUTABLE (Sequence *, seq, lb) {
|
||||
/* Sanity check. */
|
||||
if ((seq->machine < 1) || (seq->machine > MAXSEQ)) {
|
||||
BLI_freelinkN(lb, seq);
|
||||
BLO_read_data_reports(reader)->count.vse_strips_skipped++;
|
||||
}
|
||||
else if (seq->seqbase.first) {
|
||||
link_recurs_seq(reader, &seq->seqbase);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,6 +121,8 @@ typedef struct BlendFileReadReport {
|
|||
int proxies_to_lib_overrides_success;
|
||||
/* Number of proxies that failed to convert to library overrides. */
|
||||
int proxies_to_lib_overrides_failures;
|
||||
/* Number of VSE strips that were not read because were in non-supported channels. */
|
||||
int vse_strips_skipped;
|
||||
} count;
|
||||
|
||||
/* Number of libraries which had overrides that needed to be resynced, and a single linked list
|
||||
|
|
|
@ -871,6 +871,14 @@ static void file_read_reports_finalize(BlendFileReadReport *bf_reports)
|
|||
bf_reports->count.linked_proxies);
|
||||
}
|
||||
|
||||
if (bf_reports->count.vse_strips_skipped != 0) {
|
||||
BKE_reportf(bf_reports->reports,
|
||||
RPT_ERROR,
|
||||
"%d sequence strips were not read because they were in a channel larger than %d",
|
||||
bf_reports->count.vse_strips_skipped,
|
||||
MAXSEQ);
|
||||
}
|
||||
|
||||
BLI_linklist_free(bf_reports->resynced_lib_overrides_libraries, NULL);
|
||||
bf_reports->resynced_lib_overrides_libraries = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue