[Bf-blender-cvs] [5891dba] multiview: Sequencer: Implement 'Use Multi-View' for sequencer strips as well.

Dalai Felinto noreply at git.blender.org
Wed Feb 25 20:48:25 CET 2015


Commit: 5891dba59f17148f6b3808c60b435aa6c49365ef
Author: Dalai Felinto
Date:   Tue Feb 24 21:55:47 2015 -0300
Branches: multiview
https://developer.blender.org/rB5891dba59f17148f6b3808c60b435aa6c49365ef

Sequencer: Implement 'Use Multi-View' for sequencer strips as well.

Note: Sequencer still needs the same cleanup we did for Image/Movie
datablocks regarding the load functions.

The Sequencer code flow is very differnt than regular image I/O though. So
I'm leaving the sequencer cleanup for after I get the other suggested
changes implemented in the Image code (i.e., more separation be image
and Scene/RenderData).

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

M	release/scripts/startup/bl_ui/space_sequencer.py
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/editors/space_sequencer/sequencer_add.c
M	source/blender/makesdna/DNA_sequence_types.h
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_sequencer.c

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

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 21955d9..e33a34c 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -658,6 +658,7 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
+        scene = context.scene
 
         strip = act_strip(context)
 
@@ -671,7 +672,7 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
 
             # Current element for the filename
 
-            elem = strip.strip_elem_from_frame(context.scene.frame_current)
+            elem = strip.strip_elem_from_frame(scene.frame_current)
             if elem:
                 split = layout.split(percentage=0.2)
                 split.label(text="File:")
@@ -717,6 +718,19 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
         col.prop(strip, "frame_offset_start", text="Start")
         col.prop(strip, "frame_offset_end", text="End")
 
+        if scene.render.use_multiview and seq_type in {'IMAGE', 'MOVIE'}:
+            layout.prop(strip, "use_multiview")
+
+            col = layout.column()
+            col.active = strip.use_multiview
+
+            col.label(text="Views Format:")
+            col.row().prop(strip, "views_format", expand=True)
+
+            box = col.box()
+            box.active = strip.views_format == 'STEREO_3D'
+            box.template_image_stereo_3d(strip.stereo_3d_format)
+
 
 class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
     bl_label = "Sound"
@@ -1098,35 +1112,5 @@ class SEQUENCER_PT_grease_pencil_tools(GreasePencilToolsPanel, SequencerButtonsP
     # toolbar, which doesn't exist here...
 
 
-class SEQUENCER_PT_stereo_3d(SequencerButtonsPanel, Panel):
-    bl_label = "Stereoscopy"
-    bl_options = {'DEFAULT_CLOSED'}
-
-    @classmethod
-    def poll(cls, context):
-        if not cls.has_sequencer(context):
-            return False
-
-        strip = act_strip(context)
-        if not strip:
-            return False
-
-        return (strip.type in {'IMAGE', 'MOVIE'} and
-                context.scene.render.use_multiview)
-
-    def draw(self, context):
-        layout = self.layout
-
-        strip = act_strip(context)
-
-        col = layout
-        col.label(text="Views Format:")
-        col.row().prop(strip, "views_format", expand=True)
-
-        box = col.box()
-        box.active = strip.views_format == 'STEREO_3D'
-        box.template_image_stereo_3d(strip.stereo_3d_format)
-
-
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 15e9a34..f6fc756 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -94,7 +94,7 @@ static ImBuf *seq_render_strip_stack(const SeqRenderData *context, ListBase *seq
 static ImBuf *seq_render_strip(const SeqRenderData *context, Sequence *seq, float cfra);
 static void seq_free_animdata(Scene *scene, Sequence *seq);
 static ImBuf *seq_render_mask(const SeqRenderData *context, Mask *mask, float nr, bool make_float);
-static size_t seq_num_files(Scene *scene, char views_format);
+static size_t seq_num_files(Scene *scene, char views_format, const bool is_multiview);
 static void seq_anim_add_suffix(Scene *scene, struct anim *anim, const size_t view_id);
 
 /* **** XXX ******** */
@@ -836,7 +836,8 @@ void BKE_sequence_reload_new_file(Scene *scene, Sequence *seq, const bool lock_r
 		case SEQ_TYPE_MOVIE:
 		{
 			StripAnim *sanim;
-			const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
+			const bool is_multiview = (seq->flag & SEQ_USE_VIEWS) != 0 &&
+			                          (scene->r.scemode & R_MULTIVIEW) != 0;
 
 			BLI_join_dirfile(path, sizeof(path), seq->strip->dir,
 			                 seq->strip->stripdata->name);
@@ -847,7 +848,7 @@ void BKE_sequence_reload_new_file(Scene *scene, Sequence *seq, const bool lock_r
 			if (is_multiview && (seq->views_format == R_IMF_VIEWS_INDIVIDUAL)) {
 				char prefix[FILE_MAX] = {'\0'};
 				char *ext = NULL;
-				size_t totfiles = seq_num_files(scene, seq->views_format);
+				size_t totfiles = seq_num_files(scene, seq->views_format, true);
 				int i = 0;
 
 				BKE_scene_view_prefix_get(scene, path, prefix, &ext);
@@ -1409,10 +1410,8 @@ static double seq_rendersize_to_scale_factor(int size)
 }
 
 /* the number of files will vary according to the stereo format */
-static size_t seq_num_files(Scene *scene, char views_format)
+static size_t seq_num_files(Scene *scene, char views_format, const bool is_multiview)
 {
-	const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
-
 	if (!is_multiview) {
 		return 1;
 	}
@@ -1430,7 +1429,7 @@ static void seq_open_anim_file(Scene *scene, Sequence *seq, bool openfile)
 	char dir[FILE_MAX];
 	char name[FILE_MAX];
 	StripProxy *proxy;
-	const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
+	const bool is_multiview = (seq->flag & SEQ_USE_VIEWS) != 0 && (scene->r.scemode & R_MULTIVIEW) != 0;
 
 	if ((seq->anims.first != NULL) && (((StripAnim *)seq->anims.first)->anim != NULL)) {
 		return;
@@ -1451,7 +1450,7 @@ static void seq_open_anim_file(Scene *scene, Sequence *seq, bool openfile)
 	}
 
 	if (is_multiview && seq->views_format == R_IMF_VIEWS_INDIVIDUAL) {
-		size_t totfiles = seq_num_files(scene, seq->views_format);
+		size_t totfiles = seq_num_files(scene, seq->views_format, true);
 		char prefix[FILE_MAX] = {'\0'};
 		char *ext = NULL;
 		int i;
@@ -3016,7 +3015,8 @@ static ImBuf *do_render_strip_uncached(const SeqRenderData *context, Sequence *s
 
 		case SEQ_TYPE_IMAGE:
 		{
-			bool is_multiview = (context->scene->r.scemode & R_MULTIVIEW) != 0;
+			bool is_multiview = (seq->flag & SEQ_USE_VIEWS) != 0 &&
+			                    (context->scene->r.scemode & R_MULTIVIEW) != 0;
 			StripElem *s_elem = BKE_sequencer_give_stripelem(seq, cfra);
 			int flag;
 
@@ -3033,7 +3033,7 @@ static ImBuf *do_render_strip_uncached(const SeqRenderData *context, Sequence *s
 				/* don't do anything */
 			}
 			else if (is_multiview) {
-				size_t totfiles = seq_num_files(context->scene, seq->views_format);
+				size_t totfiles = seq_num_files(context->scene, seq->views_format, true);
 				size_t totviews;
 				struct ImBuf **ibufs_arr;
 				char prefix[FILE_MAX] = {'\0'};
@@ -3120,7 +3120,8 @@ monoview_image:
 		case SEQ_TYPE_MOVIE:
 		{
 			StripAnim *sanim;
-			bool is_multiview = (context->scene->r.scemode & R_MULTIVIEW) != 0;
+			bool is_multiview = (seq->flag & SEQ_USE_VIEWS) != 0 &&
+			                    (context->scene->r.scemode & R_MULTIVIEW) != 0;
 
 			/* load all the videos */
 			seq_open_anim_file(context->scene, seq, false);
@@ -3128,7 +3129,7 @@ monoview_image:
 			if (is_multiview) {
 				ImBuf **ibuf_arr;
 				size_t totviews;
-				size_t totfiles = seq_num_files(context->scene, seq->views_format);
+				size_t totfiles = seq_num_files(context->scene, seq->views_format, true);
 				int i;
 
 				if (totfiles != BLI_listbase_count_ex(&seq->anims, totfiles + 1))
@@ -4832,6 +4833,7 @@ Sequence *BKE_sequencer_add_image_strip(bContext *C, ListBase *seqbasep, SeqLoad
 		*seq->stereo3d_format = *seq_load->stereo3d_format;
 
 	seq->views_format = seq_load->views_format;
+	seq->flag |= seq_load->flag & SEQ_USE_VIEWS;
 
 	seq_load_apply(scene, seq, seq_load);
 
@@ -4927,8 +4929,8 @@ Sequence *BKE_sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoad
 	Strip *strip;
 	StripElem *se;
 	char colorspace[64] = "\0"; /* MAX_COLORSPACE_NAME */
-	size_t totfiles = seq_num_files(scene, seq_load->views_format);
-	bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
+	bool is_multiview = (seq_load->flag & SEQ_USE_VIEWS) != 0;
+	size_t totfiles = seq_num_files(scene, seq_load->views_format, is_multiview);
 	struct anim **anim_arr;
 	int i;
 
@@ -4981,6 +4983,7 @@ monoview:
 		*seq->stereo3d_format = *seq_load->stereo3d_format;
 		seq->views_format = seq_load->views_format;
 	}
+	seq->flag |= seq_load->flag & SEQ_USE_VIEWS;
 
 	seq->type = SEQ_TYPE_MOVIE;
 	seq->blend_mode = SEQ_TYPE_CROSS; /* so alpha adjustment fade to the strip below */
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index e744372..8bd8903 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -234,6 +234,7 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op)
 			ImageFormatData *imf = &sad->im_format;
 
 			seq_load->views_format = imf->views_format;
+			seq_load->flag |= SEQ_USE_VIEWS;
 
 			/* operator custom data is always released after the SeqLoadInfo, no need to handle the memory here */
 			seq_load->stereo3d_format = &imf->stereo3d_format;
@@ -648,9 +649,9 @@ static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, const w
 	sequencer_add_init(C, op);
 
 	/* show multiview save options only if scene has multiviews */
-	prop = RNA_struct_find_property(op->ptr, "use_multiview");
+	prop = RNA_struct_find_property(op->ptr, "show_multiview");
 	RNA_property_boolean_set(op->ptr, prop, (scene->r.scemode & R_MULTIVIEW) != 0);
-	
+
 	WM_event_add_fileselect(C, op);
 	return OPERATOR_RUNNING_MODAL;
 
@@ -663,7 +664,6 @@ static void sequencer_add_draw(bContext *UNUSED(C), wmOperator *op)
 	SequencerAddData *sad = op->customdata;
 	ImageFormatData *imf = &sad->im_format;
 	PointerRNA imf_ptr, ptr;
-	const bool is_multiview = RNA_boolean_get(op->ptr, "use_multiview");
 
 	/* main draw call */
 	RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr);
@@ -673,8 +673,8 @@ static void sequencer_add_draw(bContext *UNUSED(C), wmOperator *op)
 	RNA_pointer_create(NULL, &RNA_ImageFormatSettings, imf, &imf_ptr);
 
 	/* multiview template */
-	if (is_multiview)
-		uiTemplateImageFormatViews(layout, &imf_ptr);
+	if (RNA_boolean_get(op->ptr, "show_multiview"))
+		uiTemplateImageFormatViews(layout, &imf_ptr, op->ptr);
 }
 
 void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot)
@@ -831,

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list