[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45184] trunk/blender/source/blender: Fix crash of Refresh Sequencer when some Movie / MovieClip strips doesn' t have animation opened

Sergey Sharybin sergey.vfx at gmail.com
Mon Mar 26 17:57:06 CEST 2012


Revision: 45184
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45184
Author:   nazgul
Date:     2012-03-26 15:57:00 +0000 (Mon, 26 Mar 2012)
Log Message:
-----------
Fix crash of Refresh Sequencer when some Movie / MovieClip strips doesn't have animation opened

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/movieclip.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-03-26 15:29:27 UTC (rev 45183)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2012-03-26 15:57:00 UTC (rev 45184)
@@ -348,4 +348,6 @@
 extern ListBase seqbase_clipboard;
 extern int seqbase_clipboard_frame;
 
+void seq_update_sequence_length(struct Scene *scene, struct Editing *ed, struct Sequence *seq);
+
 #endif // __BKE_SEQUENCER_H__

Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-03-26 15:29:27 UTC (rev 45183)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c	2012-03-26 15:57:00 UTC (rev 45184)
@@ -213,11 +213,8 @@
 	return ibuf;
 }
 
-static ImBuf *movieclip_load_movie_file(MovieClip *clip, MovieClipUser *user, int framenr, int flag)
+static void movieclip_open_anim_file(MovieClip *clip)
 {
-	ImBuf *ibuf = NULL;
-	int tc = get_timecode(clip, flag);
-	int proxy = rendersize_to_proxy(user, flag);
 	char str[FILE_MAX];
 
 	if (!clip->anim) {
@@ -236,7 +233,16 @@
 			}
 		}
 	}
+}
 
+static ImBuf *movieclip_load_movie_file(MovieClip *clip, MovieClipUser *user, int framenr, int flag)
+{
+	ImBuf *ibuf = NULL;
+	int tc = get_timecode(clip, flag);
+	int proxy = rendersize_to_proxy(user, flag);
+
+	movieclip_open_anim_file(clip);
+
 	if (clip->anim) {
 		int dur;
 		int fra;
@@ -258,8 +264,12 @@
 
 static void movieclip_calc_length(MovieClip *clip)
 {
-	if (clip->anim) {
-		clip->len = IMB_anim_get_duration(clip->anim, clip->proxy.tc);
+	if (clip->source == MCLIP_SRC_MOVIE) {
+		movieclip_open_anim_file(clip);
+
+		if (clip->anim) {
+			clip->len = IMB_anim_get_duration(clip->anim, clip->proxy.tc);
+		}
 	}
 	else if (clip->source == MCLIP_SRC_SEQUENCE) {
 		int framenr = 1;

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-03-26 15:29:27 UTC (rev 45183)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2012-03-26 15:57:00 UTC (rev 45184)
@@ -4007,3 +4007,31 @@
 		}
 	}
 }
+
+void seq_update_sequence_length(Scene *scene, Editing *ed, Sequence *seq)
+{
+	int changed = FALSE;
+
+	switch (seq->type) {
+		case SEQ_SCENE:
+			seq->len = seq->scene->r.efra - seq->scene->r.sfra + 1;
+			changed = TRUE;
+			break;
+		case SEQ_MOVIECLIP:
+			seq->len = BKE_movieclip_get_duration(seq->clip);
+			changed = TRUE;
+			break;
+		case SEQ_MOVIE:
+			seq_open_anim_file(seq);
+			seq->len = IMB_anim_get_duration(seq->anim, IMB_TC_RECORD_RUN);
+			changed = TRUE;
+			break;
+	}
+
+	if (changed) {
+		calc_sequence_disp(scene, seq);
+
+		if (seq_test_overlap(ed->seqbasep, seq))
+			shuffle_seq(ed->seqbasep, seq, scene);
+	}
+}

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2012-03-26 15:29:27 UTC (rev 45183)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2012-03-26 15:57:00 UTC (rev 45184)
@@ -1863,7 +1863,7 @@
 		short h = prv->h[1];
 		unsigned int *rect = prv->rect[1];
 		/* don't write out large previews if not requested */
-		if (!(U.flag & USER_SAVE_PREVIEWS) ) {
+		if (!(U.flag & USER_SAVE_PREVIEWS)) {
 			prv->w[1] = 0;
 			prv->h[1] = 0;
 			prv->rect[1] = NULL;

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2012-03-26 15:29:27 UTC (rev 45183)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2012-03-26 15:57:00 UTC (rev 45184)
@@ -1311,29 +1311,7 @@
 	Sequence *seq;
 
 	SEQP_BEGIN(ed, seq) {
-		int changed = FALSE;
-
-		switch (seq->type) {
-			case SEQ_SCENE:
-				seq->len = seq->scene->r.efra - seq->scene->r.sfra + 1;
-				changed = TRUE;
-				break;
-			case SEQ_MOVIECLIP:
-				seq->len = BKE_movieclip_get_duration(seq->clip);
-				changed = TRUE;
-				break;
-			case SEQ_MOVIE:
-				seq->len = IMB_anim_get_duration(seq->anim, IMB_TC_RECORD_RUN);
-				changed = TRUE;
-				break;
-		}
-
-		if (changed) {
-			calc_sequence_disp(scene, seq);
-
-			if (seq_test_overlap(ed->seqbasep, seq))
-				shuffle_seq(ed->seqbasep, seq, scene);
-		}
+		seq_update_sequence_length(scene, ed, seq);
 	}
 	SEQ_END
 }




More information about the Bf-blender-cvs mailing list