[Bf-blender-cvs] [b6f853a] multiview: Sequencer Proxy: image sequence in a working state

Dalai Felinto noreply at git.blender.org
Wed Jan 14 21:58:21 CET 2015


Commit: b6f853a4fc4cc311a93eeffb6486914b5a70da84
Author: Dalai Felinto
Date:   Wed Jan 14 12:00:01 2015 -0200
Branches: multiview
https://developer.blender.org/rBb6f853a4fc4cc311a93eeffb6486914b5a70da84

Sequencer Proxy: image sequence in a working state

Tested: mono, top-bottom and individual views (_L, _R) image sequences

We are creating a proxy file for each individual view, even when the
image is 3D encoded (e.g., a top-bottom image will generate 2 proxy
files).

On-going Development Notes:

1) 3D Movies relying on individual files (_R, _L) are not generating the
proxies correctly at the moment (probably due to name clashing and the
fact that movie names are handled depth inside the code - which is a
known cause for another issue to be fixed when the user tries to export
a movie animation in the Invidual Views mode).

2) At the moment we are looping over all possible available views,
instead of getting from the current Sequencer. We should probably change
that.

===================================================================

M	source/blender/blenkernel/intern/sequencer.c

===================================================================

diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 8360734..0451beb 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -1502,7 +1502,7 @@ monoview:
 	}
 }
 
-static bool seq_proxy_get_fname(Sequence *seq, int cfra, int render_size, char *name)
+static bool seq_proxy_get_fname(Sequence *seq, int cfra, int render_size, char *name, const size_t view_id)
 {
 	int frameno;
 	char dir[PROXY_MAXFILE];
@@ -1533,6 +1533,7 @@ static bool seq_proxy_get_fname(Sequence *seq, int cfra, int render_size, char *
 		BLI_join_dirfile(name, PROXY_MAXFILE,
 		                 dir, seq->strip->proxy->file);
 		BLI_path_abs(name, G.main->name);
+		BLI_snprintf(name, PROXY_MAXFILE, "%s_%zu", name, view_id);
 
 		return true;
 	}
@@ -1540,13 +1541,13 @@ static bool seq_proxy_get_fname(Sequence *seq, int cfra, int render_size, char *
 	/* generate a separate proxy directory for each preview size */
 
 	if (seq->type == SEQ_TYPE_IMAGE) {
-		BLI_snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir, render_size,
-		             BKE_sequencer_give_stripelem(seq, cfra)->name);
+		BLI_snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy_%zu", dir, render_size,
+		             BKE_sequencer_give_stripelem(seq, cfra)->name, view_id);
 		frameno = 1;
 	}
 	else {
 		frameno = (int)give_stripelem_index(seq, cfra) + seq->anim_startofs;
-		BLI_snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, render_size);
+		BLI_snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####_%zu", dir, render_size, view_id);
 	}
 
 	BLI_path_abs(name, G.main->name);
@@ -1584,7 +1585,7 @@ static ImBuf *seq_proxy_fetch(const SeqRenderData *context, Sequence *seq, int c
 		StripAnim *sanim;
 		int frameno = (int)give_stripelem_index(seq, cfra) + seq->anim_startofs;
 		if (seq->strip->proxy->anim == NULL) {
-			if (seq_proxy_get_fname(seq, cfra, render_size, name) == 0) {
+			if (seq_proxy_get_fname(seq, cfra, render_size, name, context->view_id) == 0) {
 				return NULL;
 			}
 
@@ -1603,7 +1604,7 @@ static ImBuf *seq_proxy_fetch(const SeqRenderData *context, Sequence *seq, int c
 		return IMB_anim_absolute(seq->strip->proxy->anim, frameno, IMB_TC_NONE, IMB_PROXY_NONE);
 	}
  
-	if (seq_proxy_get_fname(seq, cfra, render_size, name) == 0) {
+	if (seq_proxy_get_fname(seq, cfra, render_size, name, context->view_id) == 0) {
 		return NULL;
 	}
 
@@ -1628,7 +1629,7 @@ static void seq_proxy_build_frame(const SeqRenderData *context, Sequence *seq, i
 	int ok;
 	ImBuf *ibuf_tmp, *ibuf;
 
-	if (!seq_proxy_get_fname(seq, cfra, proxy_render_size, name)) {
+	if (!seq_proxy_get_fname(seq, cfra, proxy_render_size, name, context->view_id)) {
 		return;
 	}
 
@@ -1714,6 +1715,8 @@ void BKE_sequencer_proxy_rebuild(SeqIndexBuildContext *context, short *stop, sho
 	Scene *scene = context->scene;
 	Main *bmain = context->bmain;
 	int cfra;
+	const size_t num_views = BKE_scene_num_views_get(&scene->r);
+	size_t view_id;
 
 	if (seq->type == SEQ_TYPE_MOVIE) {
 		if (context->index_context) {
@@ -1743,22 +1746,30 @@ void BKE_sequencer_proxy_rebuild(SeqIndexBuildContext *context, short *stop, sho
 	render_context.skip_cache = true;
 	render_context.is_proxy_render = true;
 
-	for (cfra = seq->startdisp + seq->startstill;  cfra < seq->enddisp - seq->endstill; cfra++) {
-		if (context->size_flags & IMB_PROXY_25) {
-			seq_proxy_build_frame(&render_context, seq, cfra, 25);
-		}
-		if (context->size_flags & IMB_PROXY_50) {
-			seq_proxy_build_frame(&render_context, seq, cfra, 50);
-		}
-		if (context->size_flags & IMB_PROXY_75) {
-			seq_proxy_build_frame(&render_context, seq, cfra, 75);
-		}
-		if (context->size_flags & IMB_PROXY_100) {
-			seq_proxy_build_frame(&render_context, seq, cfra, 100);
-		}
+	for (view_id = 0; view_id < num_views; view_id++) {
+		render_context.view_id = view_id;
+
+		for (cfra = seq->startdisp + seq->startstill;  cfra < seq->enddisp - seq->endstill; cfra++) {
+			if (context->size_flags & IMB_PROXY_25) {
+				seq_proxy_build_frame(&render_context, seq, cfra, 25);
+			}
+			if (context->size_flags & IMB_PROXY_50) {
+				seq_proxy_build_frame(&render_context, seq, cfra, 50);
+			}
+			if (context->size_flags & IMB_PROXY_75) {
+				seq_proxy_build_frame(&render_context, seq, cfra, 75);
+			}
+			if (context->size_flags & IMB_PROXY_100) {
+				seq_proxy_build_frame(&render_context, seq, cfra, 100);
+			}
 
-		*progress = (float) (cfra - seq->startdisp - seq->startstill) / (seq->enddisp - seq->endstill - seq->startdisp - seq->startstill);
-		*do_update = true;
+			*progress = (float) (cfra - seq->startdisp - seq->startstill) / (seq->enddisp - seq->endstill - seq->startdisp - seq->startstill);
+			*progress = (*progress + (float) view_id) / num_views;
+			*do_update = true;
+
+			if (*stop || G.is_break)
+				break;
+		}
 
 		if (*stop || G.is_break)
 			break;




More information about the Bf-blender-cvs mailing list