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

Peter Schlaile peter at schlaile.de
Fri Jun 26 09:32:25 CEST 2009


Revision: 21165
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21165
Author:   schlaile
Date:     2009-06-26 09:32:24 +0200 (Fri, 26 Jun 2009)

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

This fixes several issues with the Speed Control Effect:
* IPO curve-deletion resulted in non-working effect
* easy retiming only allowed enlarging of strips,
  now shrinking is also possible (easy retiming:
  use the right display handle of input strip and
  shrink or enlarge, will make the speed of the
  strip exactly fit the effect strip's length)
* frames after end-of-display of input strips can
  now be accessed (which is necessary for fix #2)
  
=> just use easy retiming from now on, it's fun :)

Modified Paths:
--------------
    trunk/blender/source/blender/include/BSE_sequence.h
    trunk/blender/source/blender/src/buttons_scene.c
    trunk/blender/source/blender/src/editseq.c
    trunk/blender/source/blender/src/seqeffects.c
    trunk/blender/source/blender/src/sequence.c

Modified: trunk/blender/source/blender/include/BSE_sequence.h
===================================================================
--- trunk/blender/source/blender/include/BSE_sequence.h	2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/include/BSE_sequence.h	2009-06-26 07:32:24 UTC (rev 21165)
@@ -66,8 +66,10 @@
 char *give_seqname(struct Sequence *seq);
 
 int evaluate_seq_frame(int cfra);
-struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
-struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra);
+struct StripElem *give_stripelem(struct Sequence *seq, int cfra,
+				 int in_display_range);
+struct TStripElem *give_tstripelem(struct Sequence *seq, int cfra,
+				   int in_display_range);
 struct ImBuf *give_ibuf_seq(int rectx, int recty, int cfra, int chansel,
 			    int render_size); 
 /* chansel: render this channel. Default=0 (renders end result)*/

Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c	2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/buttons_scene.c	2009-06-26 07:32:24 UTC (rev 21165)
@@ -767,7 +767,7 @@
 	if(last_seq->type==SEQ_IMAGE) {
 		if (last_seq->len > 1) {
 			/* CURRENT */
-			StripElem * se= give_stripelem(last_seq, CFRA);
+			StripElem * se= give_stripelem(last_seq, CFRA, TRUE);
 			StripElem * last;
 
 			/* FIRST AND LAST */
@@ -809,7 +809,8 @@
 		}
 	}
 	else if(last_seq->type==SEQ_SCENE) {
-		TStripElem * se= give_tstripelem(last_seq,  (G.scene->r.cfra));
+		TStripElem * se= give_tstripelem(last_seq,  (G.scene->r.cfra),
+						 TRUE);
 		if(se && last_seq->scene) {
 			sprintf(str, "First: %d\nLast: %d\nCur: %d\n", last_seq->sfra+se->nr, last_seq->sfra, last_seq->sfra+last_seq->len-1); 
 		}
@@ -882,7 +883,7 @@
 			cfra = last_seq->enddisp - 1;
 		}
 
-		se = give_stripelem(last_seq, cfra);
+		se = give_stripelem(last_seq, cfra, TRUE);
 
 		if (se) {
 			uiDefBut(block, TEX, 

Modified: trunk/blender/source/blender/src/editseq.c
===================================================================
--- trunk/blender/source/blender/src/editseq.c	2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/editseq.c	2009-06-26 07:32:24 UTC (rev 21165)
@@ -3720,7 +3720,7 @@
 			
 			while (cfra < frame_end) {
 				/* new seq */
-				se = give_stripelem(seq, cfra);
+				se = give_stripelem(seq, cfra, TRUE);
 				
 				seq_new= alloc_sequence(((Editing *)G.scene->ed)->seqbasep, start_ofs, seq->machine);
 				seq_new->type= SEQ_IMAGE;

Modified: trunk/blender/source/blender/src/seqeffects.c
===================================================================
--- trunk/blender/source/blender/src/seqeffects.c	2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/seqeffects.c	2009-06-26 07:32:24 UTC (rev 21165)
@@ -32,6 +32,7 @@
 #include "MEM_guardedalloc.h"
 #include "PIL_dynlib.h"
 
+#include "DNA_ipo_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_sequence_types.h"
 
@@ -2805,20 +2806,11 @@
 	/* if there is no IPO, try to make retiming easy by stretching the
 	   strip */
 
-	if (!seq->ipo && seq->seq1 && seq->seq1->enddisp != seq->seq1->start
+	if ((!seq->ipo || !seq->ipo->curve.first) && 
+	    seq->seq1 && seq->seq1->enddisp != seq->seq1->start
 	    && seq->seq1->len != 0) {
 		fallback_fac = (float) seq->seq1->len / 
 			(float) (seq->seq1->enddisp - seq->seq1->start);
-		/* FIXME: this strip stretching gets screwed by stripdata
-		   handling one layer up.
-		   
-		   So it currently works by enlarging, never by shrinking!
-
-		   (IPOs still work, if used correctly)
-		*/
-		if (fallback_fac > 1.0) {
-			fallback_fac = 1.0;
-		}
 	}
 
 	if ((v->flags & SEQ_SPEED_INTEGRATE) != 0) {
@@ -2828,7 +2820,7 @@
 		v->lastValidFrame = 0;
 
 		for (cfra = 1; cfra < v->length; cfra++) {
-			if(seq->ipo) {
+			if(seq->ipo && seq->ipo->curve.first) {
 				if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
 					ctime = frame_to_float(seq->startdisp
 							       + cfra);
@@ -2848,7 +2840,7 @@
 
 			cursor += seq->facf0;
 
-			if (cursor >= v->length) {
+			if (cursor >= seq->seq1->len) {
 				v->frameMap[cfra] = v->length - 1;
 			} else {
 				v->frameMap[cfra] = cursor;
@@ -2858,7 +2850,7 @@
 	} else {
 		v->lastValidFrame = 0;
 		for (cfra = 0; cfra < v->length; cfra++) {
-			if(seq->ipo) {
+			if(seq->ipo && seq->ipo->curve.first) {
 				if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
 					ctime = frame_to_float(seq->startdisp
 							       + cfra);
@@ -2876,11 +2868,11 @@
 			if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
 				seq->facf0 *= v->length;
 			}
-			if (!seq->ipo) {
+			if ((!seq->ipo || !seq->ipo->curve.first)) {
 				seq->facf0 = (float) cfra * fallback_fac;
 			}
 			seq->facf0 *= v->globalSpeed;
-			if (seq->facf0 >= v->length) {
+			if (seq->facf0 >= seq->seq1->len) {
 				seq->facf0 = v->length - 1;
 			} else {
 				v->lastValidFrame = cfra;

Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c	2009-06-26 02:49:47 UTC (rev 21164)
+++ trunk/blender/source/blender/src/sequence.c	2009-06-26 07:32:24 UTC (rev 21165)
@@ -838,11 +838,13 @@
 		   se->ibuf);
 }
 
-static int give_stripelem_index(Sequence *seq, int cfra)
+static int give_stripelem_index(Sequence *seq, int cfra, int in_display_range)
 {
 	int nr;
 
-	if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
+	if (in_display_range) {
+		if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
+	}
 	if(seq->len == 0) return -1;
 	if(seq->flag&SEQ_REVERSE_FRAMES) {	
 		/*reverse frame in this sequence */
@@ -872,7 +874,7 @@
 	return se;
 }
 
-TStripElem *give_tstripelem(Sequence *seq, int cfra)
+TStripElem *give_tstripelem(Sequence *seq, int cfra, int in_display_range)
 {
 	TStripElem *se;
 	int nr;
@@ -882,7 +884,7 @@
 		se = seq->strip->tstripdata = alloc_tstripdata(seq->len,
 							       "tstripelems");
 	}
-	nr = give_stripelem_index(seq, cfra);
+	nr = give_stripelem_index(seq, cfra, in_display_range);
 
 	if (nr == -1) return 0;
 	if (se == 0) return 0;
@@ -943,13 +945,13 @@
 	return se;
 }
 
-StripElem *give_stripelem(Sequence *seq, int cfra)
+StripElem *give_stripelem(Sequence *seq, int cfra, int in_display_range)
 {
 	StripElem *se;
 	int nr;
 
 	se = seq->strip->stripdata;
-	nr = give_stripelem_index(seq, cfra);
+	nr = give_stripelem_index(seq, cfra, in_display_range);
 
 	if (nr == -1) return 0;
 	if (se == 0) return 0;
@@ -1051,7 +1053,7 @@
 #define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE)
 
 static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name,
-			       int render_size)
+			       int render_size, int in_display_range)
 {
 	int frameno;
 	char dir[FILE_MAXDIR];
@@ -1060,7 +1062,8 @@
 		return FALSE;
 	}
 
-	if (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
+	if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) ||
+	    (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) {
 		strcpy(dir, seq->strip->proxy->dir);
 	} else {
 		if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) {
@@ -1082,12 +1085,12 @@
 	/* generate a seperate proxy directory for each preview size */
 
 	if (seq->type == SEQ_IMAGE) {
-		StripElem * se = give_stripelem(seq, cfra);
+		StripElem * se = give_stripelem(seq, cfra, in_display_range);
 		snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy",
 			 dir, render_size, se->name);
 		frameno = 1;
 	} else if (seq->type == SEQ_MOVIE) {
-		TStripElem * tse = give_tstripelem(seq, cfra);
+		TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
 
 		frameno = tse->nr + seq->anim_startofs;
 
@@ -1095,7 +1098,7 @@
 			 seq->strip->stripdata->name,
 			 render_size);
 	} else {
-		TStripElem * tse = give_tstripelem(seq, cfra);
+		TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
 
 		frameno = tse->nr + seq->anim_startofs;
 
@@ -1113,7 +1116,7 @@
 }
 
 static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra,
-				      int render_size)
+				      int render_size, int in_display_range)
 {
 	char name[PROXY_MAXFILE];
 
@@ -1127,10 +1130,11 @@
 	}
 
 	if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) {
-		TStripElem * tse = give_tstripelem(seq, cfra);
+		TStripElem * tse = give_tstripelem(seq, cfra,in_display_range);
 		int frameno = tse->nr + seq->anim_startofs;
 		if (!seq->strip->proxy->anim) {
-			if (!seq_proxy_get_fname(seq, cfra,name,render_size)) {
+			if (!seq_proxy_get_fname(seq, cfra,name,render_size,
+						 in_display_range)) {
 				return 0;
 			}
 
@@ -1143,7 +1147,8 @@
 		return IMB_anim_absolute(seq->strip->proxy->anim, frameno);
 	}
 
-	if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
+	if (!seq_proxy_get_fname(seq, cfra, name, render_size,
+				 in_display_range)) {
 		return 0;
 	}
 
@@ -1155,7 +1160,8 @@
 }
 
 static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
-			      int build_proxy_run, int render_size);
+			      int build_proxy_run, int render_size,
+			      int in_display_range);
 
 static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size)
 {
@@ -1180,11 +1186,11 @@
 		return;
 	}
 
-	if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
+	if (!seq_proxy_get_fname(seq, cfra, name, render_size, TRUE)) {
 		return;
 	}
 
-	se = give_tstripelem(seq, cfra);
+	se = give_tstripelem(seq, cfra, TRUE);
 	if (!se) {
 		return;
 	}
@@ -1194,7 +1200,7 @@
 		se->ibuf = 0;
 	}
 	
-	do_build_seq_ibuf(seq, se, cfra, TRUE, render_size);
+	do_build_seq_ibuf(seq, se, cfra, TRUE, render_size, TRUE);
 
 	if (!se->ibuf) {
 		return;
@@ -1244,7 +1250,7 @@
 	 */
 
 	for (cfra = seq->startdisp; cfra < seq->enddisp; cfra++) {
-		TStripElem * tse = give_tstripelem(seq, cfra);
+		TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
 
 		tse->flag &= ~STRIPELEM_PREVIEW_DONE;
 	}
@@ -1256,7 +1262,7 @@
 	if (seq->flag & SEQ_REVERSE_FRAMES) {
 		for (cfra = seq->enddisp-seq->endstill-1; 
 		     cfra >= seq->startdisp + seq->startstill; cfra--) {
-			TStripElem * tse = give_tstripelem(seq, cfra);
+			TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
 
 			if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {
 				set_timecursor(cfra);
@@ -1270,7 +1276,7 @@
 	} else {
 		for (cfra = seq->startdisp + seq->startstill; 
 		     cfra < seq->enddisp - seq->endstill; cfra++) {
-			TStripElem * tse = give_tstripelem(seq, cfra);
+			TStripElem * tse = give_tstripelem(seq, cfra, TRUE);
 
 			if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list