Fix: Crash when multiview movie right view is missing.
Ultimately this was due to missing nullptr check before trying to process the image, but this should have been caught when loading ImBufAnims. If any is missing, cancel multiview loading and load movie as if it was single view only.
This commit is contained in:
@@ -1245,7 +1245,7 @@ static ImBuf *seq_render_movie_strip(const SeqRenderData *context,
|
||||
SeqRenderData localcontext = *context;
|
||||
localcontext.view_id = view_id;
|
||||
|
||||
if (view_id != context->view_id) {
|
||||
if (view_id != context->view_id && ibuf_arr[view_id]) {
|
||||
ibuf_arr[view_id] = seq_render_preprocess_ibuf(
|
||||
&localcontext, seq, ibuf_arr[view_id], timeline_frame, true, false);
|
||||
}
|
||||
|
||||
@@ -257,7 +257,7 @@ static void index_dir_set(Editing *ed, Sequence *seq, StripAnim *sanim)
|
||||
seq_proxy_index_dir_set(sanim->anim, proxy_dirpath);
|
||||
}
|
||||
|
||||
static bool open_anim_file_multiview(Scene *scene, Sequence *seq, char *filepath, bool openfile)
|
||||
static bool open_anim_file_multiview(Scene *scene, Sequence *seq, char *filepath)
|
||||
{
|
||||
char prefix[FILE_MAX];
|
||||
const char *ext = nullptr;
|
||||
@@ -277,10 +277,11 @@ static bool open_anim_file_multiview(Scene *scene, Sequence *seq, char *filepath
|
||||
SNPRINTF(filepath_view, "%s%s%s", prefix, suffix, ext);
|
||||
|
||||
StripAnim *sanim = static_cast<StripAnim *>(MEM_mallocN(sizeof(StripAnim), "Strip Anim"));
|
||||
open_anim_filepath(seq, sanim, filepath_view, openfile);
|
||||
/* Multiview files must be loaded, otherwise it is not possible to detect failure. */
|
||||
open_anim_filepath(seq, sanim, filepath_view, true);
|
||||
|
||||
if (sanim->anim == nullptr) {
|
||||
MEM_freeN(sanim);
|
||||
SEQ_relations_sequence_free_anim(seq);
|
||||
return false; /* Multiview render failed. */
|
||||
}
|
||||
|
||||
@@ -313,7 +314,7 @@ void seq_open_anim_file(Scene *scene, Sequence *seq, bool openfile)
|
||||
bool multiview_is_loaded = false;
|
||||
|
||||
if (is_multiview) {
|
||||
multiview_is_loaded = open_anim_file_multiview(scene, seq, filepath, openfile);
|
||||
multiview_is_loaded = open_anim_file_multiview(scene, seq, filepath);
|
||||
}
|
||||
|
||||
if (!is_multiview || !multiview_is_loaded) {
|
||||
|
||||
Reference in New Issue
Block a user