[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29684] trunk/blender/source/blender: - duplicating a scene now duplicates its sequence strips too.

Campbell Barton ideasman42 at gmail.com
Fri Jun 25 14:04:04 CEST 2010


Revision: 29684
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29684
Author:   campbellbarton
Date:     2010-06-25 14:04:04 +0200 (Fri, 25 Jun 2010)

Log Message:
-----------
- duplicating a scene now duplicates its sequence strips too.
- bugfix for copying a scene with FFMPEG properties set (wasnt copying the ID properties, could crash blender)
- relative path option for adding sequence strips and replaceing images.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_buttons/buttons_ops.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-06-25 12:04:04 UTC (rev 29684)
@@ -191,14 +191,14 @@
 int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
 int seqbase_isolated_sel_check(struct ListBase *seqbase);
 void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
-struct Sequence	*seq_dupli_recursive(struct Scene *scene, struct Sequence * seq);
+struct Sequence	*seq_dupli_recursive(struct Scene *scene, struct Sequence * seq, int dupe_flag);
 int seq_swap(struct Sequence *seq_a, struct Sequence *seq_b);
 
 void seq_update_sound(struct Scene* scene, struct Sequence *seq);
 void seq_update_muting(struct Scene* scene, struct Editing *ed);
 void seqbase_sound_reload(Scene *scene, ListBase *seqbase);
 void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
-void seqbase_dupli_recursive(struct Scene *scene, ListBase *nseqbase, ListBase *seqbase, int do_context);
+void seqbase_dupli_recursive(struct Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
 
 void clear_scene_in_allseqs(struct Scene *sce);
 
@@ -228,6 +228,11 @@
 #define SEQ_LOAD_MOVIE_SOUND	1<<2
 #define SEQ_LOAD_SOUND_CACHE	1<<3
 
+
+/* seq_dupli' flags */
+#define SEQ_DUPE_UNIQUE_NAME	1<<0
+#define SEQ_DUPE_CONTEXT		1<<1
+
 /* use as an api function */
 typedef struct Sequence *(*SeqLoadFunc)(struct bContext *, ListBase *, struct SeqLoadInfo *);
 

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2010-06-25 12:04:04 UTC (rev 29684)
@@ -198,6 +198,10 @@
 		scen->r.qtcodecdata->cdParms = MEM_dupallocN(scen->r.qtcodecdata->cdParms);
 	}
 	
+	if(sce->r.ffcodecdata.properties) { /* intentionally check scen not sce. */
+		scen->r.ffcodecdata.properties= IDP_CopyProperty(scen->r.ffcodecdata.properties);
+	}
+
 	/* NOTE: part of SCE_COPY_LINK_DATA and SCE_COPY_FULL operations
 	 * are done outside of blenkernel with ED_objects_single_users! */
 
@@ -212,6 +216,12 @@
 			id_us_plus((ID *)scen->world);
 			scen->world= copy_world(scen->world);
 		}
+
+		if(sce->ed) {
+			scen->ed= MEM_callocN( sizeof(Editing), "addseq");
+			scen->ed->seqbasep= &scen->ed->seqbase;
+			seqbase_dupli_recursive(sce, &scen->ed->seqbase, &sce->ed->seqbase, 0);
+		}
 	}
 
 	sound_create_scene(scen);

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-06-25 12:04:04 UTC (rev 29684)
@@ -3991,7 +3991,7 @@
 
 	AUD_SoundInfo info;
 
-	sound = sound_new_file(CTX_data_main(C), seq_load->path);
+	sound = sound_new_file(CTX_data_main(C), seq_load->path); /* handles relative paths */
 
 	if (sound==NULL || sound->playback_handle == NULL) {
 		//if(op)
@@ -4039,6 +4039,7 @@
 Sequence *sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoadInfo *seq_load)
 {
 	Scene *scene= CTX_data_scene(C); /* only for sound */
+	char path[sizeof(seq_load->path)];
 
 	Sequence *seq, *soundseq;	/* generic strip vars */
 	Strip *strip;
@@ -4046,8 +4047,11 @@
 
 	struct anim *an;
 
-	an = openanim(seq_load->path, IB_rect);
+	BLI_strncpy(path, seq_load->path, sizeof(path));
+	BLI_path_abs(path, G.sce);
 
+	an = openanim(path, IB_rect);
+
 	if(an==NULL)
 		return NULL;
 
@@ -4088,7 +4092,7 @@
 }
 
 
-static Sequence *dupli_seq(struct Scene *scene, Sequence *seq)
+static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
 {
 	Sequence *seqn = MEM_dupallocN(seq);
 
@@ -4164,18 +4168,19 @@
 						" now...\n");
 	}
 
-	seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
+	if(dupe_flag & SEQ_DUPE_UNIQUE_NAME)
+		seqbase_unique_name_recursive(&scene->ed->seqbase, seqn);
 
 	return seqn;
 }
 
-Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq)
+Sequence * seq_dupli_recursive(struct Scene *scene, Sequence * seq, int dupe_flag)
 {
-	Sequence * seqn = dupli_seq(scene, seq);
+	Sequence * seqn = seq_dupli(scene, seq, dupe_flag);
 	if (seq->type == SEQ_META) {
-		Sequence * s;
+		Sequence *s;
 		for(s= seq->seqbase.first; s; s = s->next) {
-			Sequence *n = seq_dupli_recursive(scene, s);
+			Sequence *n = seq_dupli_recursive(scene, s, dupe_flag);
 			if (n) {
 				BLI_addtail(&seqn->seqbase, n);
 			}
@@ -4184,7 +4189,7 @@
 	return seqn;
 }
 
-void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase, int do_context)
+void seqbase_dupli_recursive(Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag)
 {
 	Sequence *seq;
 	Sequence *seqn = 0;
@@ -4193,18 +4198,18 @@
 	for(seq= seqbase->first; seq; seq= seq->next) {
 		seq->tmp= NULL;
 		if(seq->flag & SELECT) {
-			seqn = dupli_seq(scene, seq);
+			seqn = seq_dupli(scene, seq, dupe_flag);
 			if (seqn) { /*should never fail */
-				if(do_context) {
+				if(dupe_flag & SEQ_DUPE_CONTEXT) {
 					seq->flag &= ~SEQ_ALLSEL;
 					seqn->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL+SEQ_LOCK);
 				}
 
 				BLI_addtail(nseqbase, seqn);
 				if(seq->type==SEQ_META)
-					seqbase_dupli_recursive(scene, &seqn->seqbase, &seq->seqbase, do_context);
+					seqbase_dupli_recursive(scene, &seqn->seqbase, &seq->seqbase, dupe_flag);
 
-				if(do_context) {
+				if(dupe_flag & SEQ_DUPE_CONTEXT) {
 					if (seq == last_seq) {
 						seq_active_set(scene, seqn);
 					}

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_ops.c	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_ops.c	2010-06-25 12:04:04 UTC (rev 29684)
@@ -30,6 +30,7 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "DNA_userdef_types.h"
 
 #include "BKE_context.h"
 
@@ -129,6 +130,10 @@
 	RNA_string_set(op->ptr, "filepath", str);
 	MEM_freeN(str);
 
+	if(RNA_struct_find_property(op->ptr, "relative_path"))
+		if(!RNA_property_is_set(op->ptr, "relative_path"))
+			RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
 	WM_event_add_fileselect(C, op); 
 	
 	return OPERATOR_RUNNING_MODAL;
@@ -147,6 +152,6 @@
 	ot->cancel= file_browse_cancel;
 
 	/* properties */
-	WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, 0);
+	WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
 }
 

Modified: trunk/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_ops.c	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/editors/space_image/image_ops.c	2010-06-25 12:04:04 UTC (rev 29684)
@@ -780,7 +780,6 @@
 static int replace_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
 	SpaceImage *sima= CTX_wm_space_image(C);
-	char *path= (sima->image)? sima->image->name: U.textudir;
 
 	if(!sima->image)
 		return OPERATOR_CANCELLED;
@@ -788,8 +787,11 @@
 	if(RNA_property_is_set(op->ptr, "filepath"))
 		return replace_exec(C, op);
 
-	image_filesel(C, op, path);
+	if(!RNA_property_is_set(op->ptr, "relative_path"))
+		RNA_boolean_set(op->ptr, "relative_path", (strncmp(sima->image->name, "//", 2))==0);
 
+	image_filesel(C, op, sima->image->name);
+
 	return OPERATOR_RUNNING_MODAL;
 }
 
@@ -808,7 +810,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	/* properties */
-	WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+	WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
 }
 
 /******************** save image as operator ********************/

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c	2010-06-25 11:56:12 UTC (rev 29683)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c	2010-06-25 12:04:04 UTC (rev 29684)
@@ -43,6 +43,7 @@
 
 
 #include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
 
 #include "BKE_context.h"
 #include "BKE_global.h"
@@ -313,6 +314,9 @@
 		return OPERATOR_CANCELLED;
 	}
 
+	if(!RNA_property_is_set(op->ptr, "relative_path"))
+		RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
 	sequencer_generic_invoke_xy__internal(C, op, event, 0);
 	return WM_operator_filesel(C, op, event);
 	//return sequencer_add_movie_strip_exec(C, op);
@@ -336,7 +340,7 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
-	WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, 0); //XXX TODO, relative_path
+	WM_operator_properties_filesel(ot, FOLDERFILE|MOVIEFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
 	sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILES);
 	RNA_def_boolean(ot->srna, "sound", TRUE, "Sound", "Load sound with the movie");
 }
@@ -355,6 +359,9 @@
 		return OPERATOR_CANCELLED;
 	}
 
+	if(!RNA_property_is_set(op->ptr, "relative_path"))
+		RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
+
 	sequencer_generic_invoke_xy__internal(C, op, event, 0);
 	return WM_operator_filesel(C, op, event);
 	//return sequencer_add_sound_strip_exec(C, op);
@@ -378,7 +385,7 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
-	WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_OPENFILE, 0);  //XXX TODO, relative_path
+	WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_OPENFILE, FILE_RELPATH);
 	sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_FILES);
 	RNA_def_boolean(ot->srna, "cache", FALSE, "Cache", "Cache the sound in memory.");
 }
@@ -446,6 +453,9 @@
 		return OPERATOR_CANCELLED;
 	}
 
+	if(!RNA_property_is_set(op->ptr, "relative_path"))

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list