[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