[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18723] branches/blender2.5/blender/source /blender: * Was missing checks for scene-> ed which crashed blender when using the sequencer for the first time.

Campbell Barton ideasman42 at gmail.com
Wed Jan 28 23:36:38 CET 2009


Revision: 18723
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18723
Author:   campbellbarton
Date:     2009-01-28 23:36:34 +0100 (Wed, 28 Jan 2009)

Log Message:
-----------
* Was missing checks for scene->ed which crashed blender when using the sequencer for the first time.
* Added WM_OT_tweak_gesture operator for select, drag
* Sequencer select operator now returns OPERATOR_FINISHED|OPERATOR_PASS_THROUGH

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c
    branches/blender2.5/blender/source/blender/blenlib/intern/bpath.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_header.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_select.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h	2009-01-28 22:36:34 UTC (rev 18723)
@@ -140,6 +140,7 @@
 void seq_free_sequence(struct Editing *ed, struct Sequence *seq);
 void seq_free_strip(struct Strip *strip);
 void seq_free_editing(struct Editing *ed);
+struct Editing *seq_give_editing(struct Scene *scene, int alloc);
 char *give_seqname(struct Sequence *seq);
 struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown);
 struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int recty, int cfra, int chanshown);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -251,7 +251,7 @@
 	}
 	
 	while(scene) {
-		ed= scene->ed;
+		ed= seq_give_editing(scene, 0);
 		if(ed) {
 			seq= ed->seqbasep->first;
 			while(seq) {

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -184,6 +184,17 @@
 	MEM_freeN(seq);
 }
 
+Editing *seq_give_editing(Scene *scene, int alloc)
+{
+	if (scene->ed == NULL && alloc) {
+		Editing *ed;
+
+		ed= scene->ed= MEM_callocN( sizeof(Editing), "addseq");
+		ed->seqbasep= &ed->seqbase;
+	}
+	return scene->ed;
+}
+
 void seq_free_editing(Editing *ed)
 {
 	MetaStack *ms;
@@ -594,10 +605,10 @@
 {
 	/* all strips together per kind, and in order of y location ("machine") */
 	ListBase seqbase, effbase;
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq, *seqt;
 
-	ed= scene->ed;
+	
 	if(ed==NULL) return;
 
 	seqbase.first= seqbase.last= 0;
@@ -1036,14 +1047,11 @@
 
 int evaluate_seq_frame(Scene *scene, int cfra)
 {
-       Editing *ed;
-       Sequence *seq_arr[MAXSEQ+1];
+	Editing *ed= seq_give_editing(scene, FALSE);
+	Sequence *seq_arr[MAXSEQ+1];
 
-       ed= scene->ed;
-       if(ed==NULL) return 0;
-	
-       return evaluate_seq_frame_gen(seq_arr, ed->seqbasep, cfra);
-
+	if(ed==NULL) return 0;
+	return evaluate_seq_frame_gen(seq_arr, ed->seqbasep, cfra);
 }
 
 static int video_seq_is_rendered(Sequence * seq)
@@ -2403,12 +2411,12 @@
 
 static ImBuf *give_ibuf_seq_impl(Scene *scene, int rectx, int recty, int cfra, int chanshown)
 {
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	int count;
 	ListBase *seqbasep;
 	TStripElem *se;
 
-	ed= scene->ed;
+	
 	if(ed==NULL) return NULL;
 
 	count = BLI_countlist(&ed->metastack);
@@ -2818,7 +2826,7 @@
 
 void free_imbuf_seq_except(Scene *scene, int cfra)
 {
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq;
 	TStripElem *se;
 	int a;
@@ -2960,10 +2968,10 @@
 
 void update_changed_seq_and_deps(Scene *scene, Sequence *changed_seq, int len_change, int ibuf_change)
 {
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq;
 	
-	if (!ed) return;
+	if (ed==NULL) return;
 	
 	for (seq=ed->seqbase.first; seq; seq=seq->next)
 		update_changed_seq_recurs(scene, seq, changed_seq, len_change, ibuf_change);
@@ -2972,7 +2980,7 @@
 void free_imbuf_seq_with_ipo(Scene *scene, struct Ipo *ipo)
 {
 	/* force update of all sequences with this ipo, on ipo changes */
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq;
 
 	if(ed==NULL) return;

Modified: branches/blender2.5/blender/source/blender/blenlib/intern/bpath.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenlib/intern/bpath.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/blenlib/intern/bpath.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -201,7 +201,9 @@
 	return snd;
 }
 
-static struct Sequence *seq_stepdata__internal(struct BPathIterator *bpi, int step_next) {
+static struct Sequence *seq_stepdata__internal(struct BPathIterator *bpi, int step_next)
+{
+	Editing *ed;
 	Sequence *seq;
 	
 	/* Initializing */
@@ -214,11 +216,11 @@
 	}
 	
 	while (bpi->seqdata.scene) {
-		
-		if (bpi->seqdata.scene->ed) {
+		ed= seq_give_editing(bpi->seqdata.scene, 0);
+		if (ed) {
 			if (bpi->seqdata.seqar == NULL) {
 				/* allocate the sequencer array */
-				seq_array(bpi->seqdata.scene->ed, &bpi->seqdata.seqar, &bpi->seqdata.totseq, 0);		
+				seq_array(ed, &bpi->seqdata.seqar, &bpi->seqdata.totseq, 0);
 				bpi->seqdata.seq = 0;
 			}
 			

Modified: branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -1320,11 +1320,10 @@
 	}
 	else if(soops->outlinevis==SO_SEQUENCE) {
 		Sequence *seq;
-		Editing *ed;
+		Editing *ed= seq_give_editing(scene, FALSE);
 		int op;
 
-		ed= scene->ed;
-		if(!ed)
+		if(ed==NULL)
 			return;
 
 		seq= ed->seqbasep->first;
@@ -2129,7 +2128,7 @@
 static int tree_element_active_sequence_dup(Scene *scene, TreeElement *te, TreeStoreElem *tselem, int set)
 {
 	Sequence *seq, *p;
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 
 	seq= (Sequence*)te->directdata;
 	if(set==0) {
@@ -2139,7 +2138,6 @@
 	}
 
 // XXX	select_single_seq(seq, 1);
-	ed= scene->ed;
 	p= ed->seqbasep->first;
 	while(p) {
 		if((!p->strip) || (!p->strip->stripdata) || (!p->strip->stripdata->name)) {

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -143,7 +143,7 @@
 static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, TRUE);
 	
 	Scene *sce_seq;
 	char sce_name[MAX_ID_NAME-2];
@@ -230,7 +230,7 @@
 static int sequencer_add_movie_strip_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, TRUE);
 	
 	struct anim *an;
 	char filename[FILE_MAX];
@@ -317,7 +317,7 @@
 static int sequencer_add_sound_strip_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, TRUE);
 	
 	bSound *sound;
 
@@ -415,7 +415,7 @@
 static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, TRUE);
 
 
 	int tot_images= 1; //XXX FIXME, we need string arrays!
@@ -506,7 +506,7 @@
 static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, TRUE);
 
 	Sequence *seq;	/* generic strip vars */
 	Strip *strip;

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -988,12 +988,12 @@
 	Scene *scene= CTX_data_scene(C);
 	View2D *v2d= &ar->v2d;
 	View2DScrollers *scrollers;
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq;
 	float col[3];
 	int i;
 
-	ed= scene->ed;
+	
 
 	if(sseq->mainb != SEQ_DRAW_SEQUENCE) {
 		draw_image_seq(scene, ar, sseq);

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-01-28 21:43:43 UTC (rev 18722)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-01-28 22:36:34 UTC (rev 18723)
@@ -142,27 +142,25 @@
 
 Sequence *get_last_seq(Scene *scene)
 {
-	Editing *ed;
-	ed= scene->ed;
-	if(!ed) return NULL;
+	Editing *ed= seq_give_editing(scene, FALSE);
+	if(ed==NULL) return NULL;
 	return ed->act_seq;
 }
 
 void set_last_seq(Scene *scene, Sequence *seq)
 {
-	Editing *ed;
-	ed= scene->ed;
-	if(!ed) return;
+	Editing *ed= seq_give_editing(scene, FALSE);
+	if(ed==NULL) return;
 	
 	ed->act_seq= seq;
 }
 
 Sequence *get_forground_frame_seq(Scene *scene, int frame)
 {
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq, *best_seq=NULL;
 	int best_machine = -1;
-	ed= scene->ed;
+	
 	if(!ed) return NULL;
 	
 	for (seq=ed->seqbasep->first; seq; seq= seq->next) {
@@ -191,7 +189,7 @@
 
 static void change_plugin_seq(Scene *scene, char *str)	/* called from fileselect */
 {
-	Editing *ed= scene->ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	struct SeqEffectHandle sh;
 	Sequence *last_seq= get_last_seq(scene);
 
@@ -214,10 +212,10 @@
 void boundbox_seq(Scene *scene, rctf *rect)
 {
 	Sequence *seq;
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	float min[2], max[2];
 
-	ed= scene->ed;
+	
 	if(ed==NULL) return;
 
 	min[0]= 0.0;
@@ -262,10 +260,10 @@
 /*	looks to the left on lr==1, to the right on lr==2
 	sel - 0==unselected, 1==selected, -1==done care*/
 	Sequence *seq;
-	Editing *ed;
+	Editing *ed= seq_give_editing(scene, FALSE);
 
-	ed= scene->ed;
-	if(ed==NULL) return 0;
+	
+	if(ed==NULL) return NULL;
 
 	if (sel>0) sel = SELECT;
 	
@@ -299,13 +297,13 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list