[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54935] trunk/blender/source/blender/ blenkernel: Fix sequencer crash when pasteing strips after creating new file

Sergey Sharybin sergey.vfx at gmail.com
Thu Feb 28 15:25:10 CET 2013


Revision: 54935
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54935
Author:   nazgul
Date:     2013-02-28 14:25:09 +0000 (Thu, 28 Feb 2013)
Log Message:
-----------
Fix sequencer crash when pasteing strips after creating new file

Issue happened for scene. movie clip and mask strips, which contains
pointers to datablocks which are freeing on loading new file.

Also, scene strip would crash when pasted from clipboard after scene
was unlinked from file.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/mask.c
    trunk/blender/source/blender/blenkernel/intern/movieclip.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2013-02-28 14:25:00 UTC (rev 54934)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2013-02-28 14:25:09 UTC (rev 54935)
@@ -36,6 +36,7 @@
 struct ImBuf;
 struct Main;
 struct Mask;
+struct MovieClip;
 struct Scene;
 struct Sequence;
 struct SequenceModifierData;
@@ -322,6 +323,8 @@
 int  BKE_sequence_is_valid_check(struct Sequence *seq);
 
 void BKE_sequencer_clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce);
+void BKE_sequencer_clear_movieclip_in_clipboard(struct MovieClip *clip);
+void BKE_sequencer_clear_mask_in_clipboard(struct Mask *mask);
 
 struct Sequence *BKE_sequence_get_by_name(struct ListBase *seqbase, const char *name, int recursive);
 

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2013-02-28 14:25:00 UTC (rev 54934)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2013-02-28 14:25:09 UTC (rev 54935)
@@ -923,6 +923,8 @@
 	SpaceLink *sl;
 	Scene *scene;
 
+	BKE_sequencer_clear_mask_in_clipboard(mask);
+
 	for (scr = bmain->screen.first; scr; scr = scr->id.next) {
 		for (area = scr->areabase.first; area; area = area->next) {
 			for (sl = area->spacedata.first; sl; sl = sl->next) {

Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c	2013-02-28 14:25:00 UTC (rev 54934)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c	2013-02-28 14:25:09 UTC (rev 54935)
@@ -75,6 +75,7 @@
 #include "BKE_node.h"
 #include "BKE_image.h"  /* openanim */
 #include "BKE_tracking.h"
+#include "BKE_sequencer.h"
 
 #include "IMB_colormanagement.h"
 #include "IMB_imbuf_types.h"
@@ -1292,6 +1293,8 @@
 
 void BKE_movieclip_free(MovieClip *clip)
 {
+	BKE_sequencer_clear_movieclip_in_clipboard(clip);
+
 	free_buffers(clip);
 
 	BKE_tracking_free(&clip->tracking);

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-02-28 14:25:00 UTC (rev 54934)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-02-28 14:25:09 UTC (rev 54935)
@@ -290,6 +290,9 @@
 {
 	Base *base;
 
+	/* check all sequences */
+	BKE_sequencer_clear_scene_in_allseqs(G.main, sce);
+
 	base = sce->base.first;
 	while (base) {
 		base->object->id.us--;
@@ -693,9 +696,6 @@
 		if (sce1->set == sce)
 			sce1->set = NULL;
 	
-	/* check all sequences */
-	BKE_sequencer_clear_scene_in_allseqs(bmain, sce);
-
 	/* check render layer nodes in other scenes */
 	clear_scene_in_nodes(bmain, sce);
 	

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2013-02-28 14:25:00 UTC (rev 54934)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2013-02-28 14:25:09 UTC (rev 54935)
@@ -815,8 +815,35 @@
 			BKE_sequencer_base_recursive_apply(&scene_iter->ed->seqbase, clear_scene_in_allseqs_cb, scene);
 		}
 	}
+
+	/* also clear clipboard */
+	BKE_sequencer_base_recursive_apply(&seqbase_clipboard, clear_scene_in_allseqs_cb, scene);
 }
 
+static int clear_movieclip_in_clipboard_cb(Sequence *seq, void *arg_pt)
+{
+	if (seq->clip == (MovieClip *)arg_pt)
+		seq->clip = NULL;
+	return 1;
+}
+
+void BKE_sequencer_clear_movieclip_in_clipboard(MovieClip *clip)
+{
+	BKE_sequencer_base_recursive_apply(&seqbase_clipboard, clear_movieclip_in_clipboard_cb, clip);
+}
+
+static int clear_mask_in_clipboard_cb(Sequence *seq, void *arg_pt)
+{
+	if (seq->mask == (Mask *)arg_pt)
+		seq->mask = NULL;
+	return 1;
+}
+
+void BKE_sequencer_clear_mask_in_clipboard(Mask *mask)
+{
+	BKE_sequencer_base_recursive_apply(&seqbase_clipboard, clear_mask_in_clipboard_cb, mask);
+}
+
 typedef struct SeqUniqueInfo {
 	Sequence *seq;
 	char name_src[SEQ_NAME_MAXSTR];




More information about the Bf-blender-cvs mailing list