[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12999] trunk/blender/source/blender: == Sequencer ==

Peter Schlaile peter at schlaile.de
Tue Dec 25 21:31:07 CET 2007


Revision: 12999
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12999
Author:   schlaile
Date:     2007-12-25 21:31:07 +0100 (Tue, 25 Dec 2007)

Log Message:
-----------
== Sequencer ==

* Make Lock flag work for metastrips
* Fixes: flags are cleared on exit of metastrips
* Fixes (hopefully): red picture on big endian

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/intern/anim.c
    trunk/blender/source/blender/include/BSE_sequence.h
    trunk/blender/source/blender/src/editseq.c
    trunk/blender/source/blender/src/sequence.c

Modified: trunk/blender/source/blender/imbuf/intern/anim.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/anim.c	2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/imbuf/intern/anim.c	2007-12-25 20:31:07 UTC (rev 12999)
@@ -721,6 +721,7 @@
 					dst[0] + (anim->y - 1)*dstStride[0],
 					0, 0, 0 };
 				int i;
+				unsigned char* r;
 
 				sws_scale(anim->img_convert_ctx,
 					  anim->pFrame->data,
@@ -731,8 +732,12 @@
 					  dstStride2);
 				
 				/* workaround: sws_scale sets alpha = 0... */
+				
+				r = (unsigned char*) ibuf->rect;
+
 				for (i = 0; i < ibuf->x * ibuf->y; i++) {
-					ibuf->rect[i] |= 0xff000000;
+					r[3] = 0xff;
+					r+=4;
 				}
 
 				av_free_packet(&packet);

Modified: trunk/blender/source/blender/include/BSE_sequence.h
===================================================================
--- trunk/blender/source/blender/include/BSE_sequence.h	2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/include/BSE_sequence.h	2007-12-25 20:31:07 UTC (rev 12999)
@@ -50,6 +50,13 @@
 void new_tstripdata(struct Sequence *seq);
 void free_sequence(struct Sequence *seq);
 void build_seqar(struct ListBase *seqbase, struct Sequence  ***seqar, int *totseq);
+
+#define BUILD_SEQAR_COUNT_NOTHING  0
+#define BUILD_SEQAR_COUNT_CURRENT  1
+#define BUILD_SEQAR_COUNT_CHILDREN 2
+
+void build_seqar_cb(struct ListBase *seqbase, struct Sequence  ***seqar, 
+		    int *totseq, int (*test_func)(struct Sequence * seq));
 void free_editing(struct Editing *ed);
 void calc_sequence(struct Sequence *seq);
 void calc_sequence_disp(struct Sequence *seq);

Modified: trunk/blender/source/blender/src/editseq.c
===================================================================
--- trunk/blender/source/blender/src/editseq.c	2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/src/editseq.c	2007-12-25 20:31:07 UTC (rev 12999)
@@ -2269,8 +2269,8 @@
 			seqn = dupli_seq(seq);
 			if (seqn) { /*should never fail */
 				seq->flag &= SEQ_DESEL;
-				seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL);
-				
+				seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
+
 				BLI_addtail(new, seqn);
 				if(seq->type==SEQ_META)
 					recurs_dupli_seq(&seq->seqbase,&seqn->seqbase);
@@ -2619,7 +2619,7 @@
 		}
 		seq= seq->next;
 	}
-	if(tot < 2) return;
+	if(tot < 1) return;
 
 	if(okee("Make Meta Strip")==0) return;
 
@@ -2763,7 +2763,7 @@
 
 	set_last_seq(ms->parseq);
 
-	ms->parseq->flag= SELECT;
+	ms->parseq->flag |= SELECT;
 	recurs_sel_seq(ms->parseq);
 
 	MEM_freeN(ms);
@@ -2859,6 +2859,21 @@
 	}
 }
 
+static int can_transform_seq_test_func(Sequence * seq)
+{
+	if((seq->flag & SELECT) && !(seq->flag & SEQ_LOCK)) {
+		return BUILD_SEQAR_COUNT_CURRENT | BUILD_SEQAR_COUNT_CHILDREN;
+	}
+	if ((seq->flag & SEQ_LOCK) && !(seq->type & SEQ_EFFECT)) {
+		if (seq->type != SEQ_META) {
+			return BUILD_SEQAR_COUNT_NOTHING;
+		} else {
+			return BUILD_SEQAR_COUNT_CURRENT;
+		}
+	}
+	return BUILD_SEQAR_COUNT_CURRENT | BUILD_SEQAR_COUNT_CHILDREN;
+}
+
 void transform_seq(int mode, int context)
 {
 	SpaceSeq *sseq= curarea->spacedata.first;
@@ -2903,7 +2918,8 @@
 	if(ed==0) return;
 
 	/* Build the sequence array once, be sure to free it */
-	build_seqar( ed->seqbasep,  &seqar, &totseq_index );
+	build_seqar_cb( ed->seqbasep,  &seqar, &totseq_index, 
+			can_transform_seq_test_func );
 	
 	if (seqar) {
 		for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
@@ -2922,7 +2938,7 @@
 		if(seqar) MEM_freeN(seqar);
 		return;
 	}
-	
+
 	G.moving= 1;
 	
 	last_seq = get_last_seq();
@@ -3116,7 +3132,7 @@
 			if (mode=='g' && !snapskip) {
 				/* Grab */
 				for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-					if(seq->flag & SELECT) {
+					if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
 						int myofs;
 						// SEQ_DEBUG_INFO(seq);
 						
@@ -3168,7 +3184,7 @@
 				
 				/* Extend, Similar to grab but operate on one side of the cursor */
 				for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-					if(seq->flag & SELECT) {
+					if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
 						/* only move the contents of the metastrip otherwise the transformation is applied twice */
 						if (sequence_is_free_transformable(seq) && seq->type != SEQ_META) {
 							
@@ -3280,7 +3296,7 @@
 
 			/* test for effect and overlap */
 			for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-				if(seq->flag & SELECT) {
+				if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
 					seq->flag &= ~SEQ_OVERLAP;
 					if( test_overlap_seq(seq) ) {
 						seq->flag |= SEQ_OVERLAP;
@@ -3329,7 +3345,7 @@
 
 		ts= transmain;
 		for(seq_index=0, seq=seqar[0]; seq_index < totseq_index; seq=seqar[++seq_index]) {
-			if(seq->flag & SELECT) {
+			if(seq->flag & SELECT && !(seq->flag & SEQ_LOCK)) {
 				seq->start= ts->start;
 				seq->machine= ts->machine;
 				seq->startstill= ts->startstill;

Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c	2007-12-25 15:31:36 UTC (rev 12998)
+++ trunk/blender/source/blender/src/sequence.c	2007-12-25 20:31:07 UTC (rev 12999)
@@ -211,6 +211,66 @@
 	*seqar= tseqar;
 }
 
+static void do_seq_count_cb(ListBase *seqbase, int *totseq,
+			    int (*test_func)(Sequence * seq))
+{
+	Sequence *seq;
+
+	seq= seqbase->first;
+	while(seq) {
+		int test = test_func(seq);
+		if (test & BUILD_SEQAR_COUNT_CURRENT) {
+			(*totseq)++;
+		}
+		if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) {
+			do_seq_count_cb(&seq->seqbase, totseq, test_func);
+		}
+		seq= seq->next;
+	}
+}
+
+static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth,
+			      int (*test_func)(Sequence * seq))
+{
+	Sequence *seq;
+
+	seq= seqbase->first;
+	while(seq) {
+		int test = test_func(seq);
+		seq->depth= depth;
+
+		if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) {
+			do_build_seqar_cb(&seq->seqbase, seqar, depth+1, 
+					  test_func);
+		}
+		if (test & BUILD_SEQAR_COUNT_CURRENT) {
+			**seqar= seq;
+			(*seqar)++;
+		}
+		seq= seq->next;
+	}
+}
+
+void build_seqar_cb(ListBase *seqbase, Sequence  ***seqar, int *totseq,
+		    int (*test_func)(Sequence * seq))
+{
+	Sequence **tseqar;
+
+	*totseq= 0;
+	do_seq_count_cb(seqbase, totseq, test_func);
+
+	if(*totseq==0) {
+		*seqar= 0;
+		return;
+	}
+	*seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar");
+	tseqar= *seqar;
+
+	do_build_seqar_cb(seqbase, seqar, 0, test_func);
+	*seqar= tseqar;
+}
+
+
 void free_editing(Editing *ed)
 {
 	MetaStack *ms;





More information about the Bf-blender-cvs mailing list