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

Peter Schlaile peter at schlaile.de
Tue May 26 14:57:17 CEST 2009


Revision: 20423
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20423
Author:   schlaile
Date:     2009-05-26 14:57:16 +0200 (Tue, 26 May 2009)

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

This adds a per preview option to set render sizes (which proxy size is used).
That makes it possible to have 
* several small preview screens which update really fast using the proxy files
* one large output screen that operates in full resolution

Since most of the time not all input strips are considered when calculating
an output screen, this is a big win.

Also: one can disable a preview screen completely using this option.

Other use cases: vector + chromaviews don't always need full resolution 
pictures and work equally well on proxy files!

This option finally makes my working setup _completely_ realtime :)

Modified Paths:
--------------
    trunk/blender/source/blender/include/BSE_sequence.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/src/drawseq.c
    trunk/blender/source/blender/src/header_seq.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-05-26 10:44:14 UTC (rev 20422)
+++ trunk/blender/source/blender/include/BSE_sequence.h	2009-05-26 12:57:16 UTC (rev 20423)
@@ -68,18 +68,20 @@
 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 ImBuf *give_ibuf_seq(int rectx, int recty, int cfra, int chansel); 
+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)*/
 struct ImBuf *give_ibuf_seq_direct(int rectx, int recty, int cfra,
-				   struct Sequence * seq);
+				   int render_size, struct Sequence * seq);
 
 /* sequence prefetch API */
 void seq_start_threads();
 void seq_stop_threads();
-void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown);
+void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown,
+				int render_size);
 void seq_wait_for_prefetch_ready();
 struct ImBuf * give_ibuf_seq_threaded(int rectx, int recty, int cfra, 
-				      int chanshown);
+				      int chanshown, int render_size);
 
 
 void free_imbuf_seq_except(int cfra);

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2009-05-26 10:44:14 UTC (rev 20422)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2009-05-26 12:57:16 UTC (rev 20423)
@@ -146,7 +146,8 @@
 	View2D v2d;
 	
 	float xof, yof;	/* offset for drawing the image preview */
-	short mainb, pad;
+	short mainb;
+	short render_size;
 	short chanshown;
 	short zebra;
 	int flag;

Modified: trunk/blender/source/blender/src/drawseq.c
===================================================================
--- trunk/blender/source/blender/src/drawseq.c	2009-05-26 10:44:14 UTC (rev 20422)
+++ trunk/blender/source/blender/src/drawseq.c	2009-05-26 12:57:16 UTC (rev 20423)
@@ -849,6 +849,7 @@
 	static int recursive= 0;
 	float zoom;
 	float zoomx, zoomy;
+	int render_size = 0;
 
 	glClearColor(0.0, 0.0, 0.0, 0.0);
 	glClear(GL_COLOR_BUFFER_BIT);
@@ -856,9 +857,17 @@
 	sseq= sa->spacedata.first;
 	if(sseq==0) return;
 
-	rectx= (G.scene->r.size*G.scene->r.xsch)/100;
-	recty= (G.scene->r.size*G.scene->r.ysch)/100;
+	render_size = sseq->render_size;
+	if (render_size == 0) {
+		render_size = G.scene->r.size;
+	}
+	if (render_size < 0) {
+		return;
+	}
 
+	rectx= (render_size*G.scene->r.xsch)/100;
+	recty= (render_size*G.scene->r.ysch)/100;
+
 	/* BIG PROBLEM: the give_ibuf_seq() can call a rendering, which in turn calls redraws...
 	   this shouldn't belong in a window drawing....
 	   So: solve this once event based. 
@@ -870,16 +879,16 @@
 		recursive= 1;
 		if (special_seq_update) {
 			ibuf= give_ibuf_seq_direct(
-				rectx, recty, (G.scene->r.cfra),
+				rectx, recty, (G.scene->r.cfra), render_size,
 				special_seq_update);
 		} else if (!U.prefetchframes || (G.f & G_PLAYANIM) == 0) {
 			ibuf= (ImBuf *)give_ibuf_seq(
 				rectx, recty, (G.scene->r.cfra), 
-				sseq->chanshown);
+				sseq->chanshown, render_size);
 		} else {
 			ibuf= (ImBuf *)give_ibuf_seq_threaded(
 				rectx, recty, (G.scene->r.cfra), 
-				sseq->chanshown);
+				sseq->chanshown, render_size);
 		}
 		recursive= 0;
 		
@@ -930,7 +939,7 @@
 	
 	zoom= SEQ_ZOOM_FAC(sseq->zoom);
 	if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
-		zoom /= G.scene->r.size / 100.0;
+		zoom /= render_size / 100.0;
 		zoomx = zoom * ((float)G.scene->r.xasp / (float)G.scene->r.yasp);
 		zoomy = zoom;
 	} else {
@@ -1112,13 +1121,21 @@
 {
 	SpaceSeq *sseq= sa->spacedata.first;
 	int rectx, recty;
+	int render_size = sseq->render_size;
+	if (render_size == 0) {
+		render_size = G.scene->r.size;
+	}
+	if (render_size < 0) {
+		return;
+	}
 
-	rectx= (G.scene->r.size*G.scene->r.xsch)/100;
-	recty= (G.scene->r.size*G.scene->r.ysch)/100;
+	rectx= (render_size*G.scene->r.xsch)/100;
+	recty= (render_size*G.scene->r.ysch)/100;
 
 	if(sseq->mainb) {
 		give_ibuf_prefetch_request(
-			rectx, recty, (G.scene->r.cfra), sseq->chanshown);
+			rectx, recty, (G.scene->r.cfra), sseq->chanshown,
+			render_size);
 	}
 }
 

Modified: trunk/blender/source/blender/src/header_seq.c
===================================================================
--- trunk/blender/source/blender/src/header_seq.c	2009-05-26 10:44:14 UTC (rev 20422)
+++ trunk/blender/source/blender/src/header_seq.c	2009-05-26 12:57:16 UTC (rev 20423)
@@ -740,6 +740,22 @@
 		
 		xco+= 8 + XIC*3.5;
 
+		uiDefButS(block, MENU, B_REDR, 
+			  "Render size: %t"
+			  "|R 100 %x100"
+			  "|R 75  %x75"
+			  "|R 50  %x50"
+			  "|R 25  %x25"
+			  "|R Sce %x0"
+			  "|R Off %x-1", 
+			  xco,0,3.0 * XIC, YIC, &sseq->render_size, 
+			  0,0,0,0, 
+			  "Use different (proxy) render size "
+			  "for this preview screen, use scene render size "
+			  "or disable this preview completely");
+
+		xco+= 8 + XIC*3.0;
+
 		if (sseq->mainb == SEQ_DRAW_IMG_IMBUF) {
 			uiDefButS(block, MENU, B_REDR, 
 				  "Show zebra: %t"

Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c	2009-05-26 10:44:14 UTC (rev 20422)
+++ trunk/blender/source/blender/src/sequence.c	2009-05-26 12:57:16 UTC (rev 20423)
@@ -1047,7 +1047,8 @@
 
 #define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE)
 
-static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name)
+static int seq_proxy_get_fname(Sequence * seq, int cfra, char * name,
+			       int render_size)
 {
 	int frameno;
 	char dir[FILE_MAXDIR];
@@ -1080,7 +1081,7 @@
 	if (seq->type == SEQ_IMAGE) {
 		StripElem * se = give_stripelem(seq, cfra);
 		snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy",
-			 dir, G.scene->r.size, se->name);
+			 dir, render_size, se->name);
 		frameno = 1;
 	} else if (seq->type == SEQ_MOVIE) {
 		TStripElem * tse = give_tstripelem(seq, cfra);
@@ -1089,14 +1090,14 @@
 
 		snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir,
 			 seq->strip->stripdata->name,
-			 G.scene->r.size);
+			 render_size);
 	} else {
 		TStripElem * tse = give_tstripelem(seq, cfra);
 
 		frameno = tse->nr + seq->anim_startofs;
 
 		snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir,
-			 G.scene->r.size);
+			 render_size);
 	}
 
 	BLI_convertstringcode(name, G.sce);
@@ -1108,7 +1109,8 @@
 	return TRUE;
 }
 
-static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra)
+static struct ImBuf * seq_proxy_fetch(Sequence * seq, int cfra,
+				      int render_size)
 {
 	char name[PROXY_MAXFILE];
 
@@ -1117,7 +1119,7 @@
 	}
 
 	/* rendering at 100% ? No real sense in proxy-ing, right? */
-	if (G.scene->r.size == 100.0) {
+	if (render_size == 100) {
 		return 0;
 	}
 
@@ -1125,7 +1127,7 @@
 		TStripElem * tse = give_tstripelem(seq, cfra);
 		int frameno = tse->nr + seq->anim_startofs;
 		if (!seq->strip->proxy->anim) {
-			if (!seq_proxy_get_fname(seq, cfra, name)) {
+			if (!seq_proxy_get_fname(seq, cfra,name,render_size)) {
 				return 0;
 			}
 
@@ -1138,7 +1140,7 @@
 		return IMB_anim_absolute(seq->strip->proxy->anim, frameno);
 	}
 
-	if (!seq_proxy_get_fname(seq, cfra, name)) {
+	if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
 		return 0;
 	}
 
@@ -1150,9 +1152,9 @@
 }
 
 static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
-			      int build_proxy_run);
+			      int build_proxy_run, int render_size);
 
-static void seq_proxy_build_frame(Sequence * seq, int cfra)
+static void seq_proxy_build_frame(Sequence * seq, int cfra, int render_size)
 {
 	char name[PROXY_MAXFILE];
 	int quality;
@@ -1166,7 +1168,7 @@
 	}
 
 	/* rendering at 100% ? No real sense in proxy-ing, right? */
-	if (G.scene->r.size == 100.0) {
+	if (render_size == 100.0) {
 		return;
 	}
 
@@ -1175,7 +1177,7 @@
 		return;
 	}
 
-	if (!seq_proxy_get_fname(seq, cfra, name)) {
+	if (!seq_proxy_get_fname(seq, cfra, name, render_size)) {
 		return;
 	}
 
@@ -1189,14 +1191,14 @@
 		se->ibuf = 0;
 	}
 	
-	do_build_seq_ibuf(seq, se, cfra, TRUE);
+	do_build_seq_ibuf(seq, se, cfra, TRUE, render_size);
 
 	if (!se->ibuf) {
 		return;
 	}
 
-	rectx= (G.scene->r.size*G.scene->r.xsch)/100;
-	recty= (G.scene->r.size*G.scene->r.ysch)/100;
+	rectx= (render_size*G.scene->r.xsch)/100;
+	recty= (render_size*G.scene->r.ysch)/100;
 
 	ibuf = se->ibuf;
 
@@ -1251,7 +1253,8 @@
 			TStripElem * tse = give_tstripelem(seq, cfra);
 
 			if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {
-				seq_proxy_build_frame(seq, cfra);
+				seq_proxy_build_frame(seq, cfra,
+						      G.scene->r.size);
 				tse->flag |= STRIPELEM_PREVIEW_DONE;
 			}
 			if (blender_test_break()) {
@@ -1264,7 +1267,8 @@
 			TStripElem * tse = give_tstripelem(seq, cfra);
 
 			if (!(tse->flag & STRIPELEM_PREVIEW_DONE)) {
-				seq_proxy_build_frame(seq, cfra);
+				seq_proxy_build_frame(seq, cfra,
+						      G.scene->r.size);
 				tse->flag |= STRIPELEM_PREVIEW_DONE;
 			}
 			if (blender_test_break()) {
@@ -1752,10 +1756,10 @@
 }
 
 static TStripElem* do_build_seq_array_recursively(
-	ListBase *seqbasep, int cfra, int chanshown);
+	ListBase *seqbasep, int cfra, int chanshown, int render_size);
 
 static void do_build_seq_ibuf(Sequence * seq, TStripElem *se, int cfra,
-			      int build_proxy_run)
+			      int build_proxy_run, int render_size)
 {
 	char name[FILE_MAXDIR+FILE_MAXFILE];
 	int use_limiter = TRUE;
@@ -1769,7 +1773,7 @@
 		use_limiter = FALSE;
 
 		if (!build_proxy_run && se->ibuf == 0) {
-			se->ibuf = seq_proxy_fetch(seq, cfra);
+			se->ibuf = seq_proxy_fetch(seq, cfra, render_size);
 			if (se->ibuf) {
 				use_limiter = TRUE;
 				use_preprocess = TRUE;
@@ -1778,7 +1782,8 @@
 
 		if(!se->ibuf && seq->seqbase.first) {
 			meta_se = do_build_seq_array_recursively(
-				&seq->seqbase, seq->start + se->nr, 0);
+				&seq->seqbase, seq->start + se->nr, 0,
+				render_size);
 
 			check_limiter_refcount("do_build_seq_ibuf: for META",
 					       meta_se);
@@ -1820,7 +1825,7 @@
 		/* should the effect be recalculated? */
 		
 		if (!build_proxy_run && se->ibuf == 0) {
-			se->ibuf = seq_proxy_fetch(seq, cfra);
+			se->ibuf = seq_proxy_fetch(seq, cfra, render_size);
 		}
 
 		if(se->ibuf == 0) {
@@ -1841,7 +1846,8 @@
 			BLI_convertstringcode(name, G.sce);
 			BLI_convertstringframe(name, G.scene->r.cfra);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list