[Bf-blender-cvs] [d354eea] master: Placeholder image strips feedback session changes no.2:

Antony Riakiotakis noreply at git.blender.org
Wed Apr 22 14:12:05 CEST 2015


Commit: d354eeab7460ba76f92f3dcce3eea069010635b3
Author: Antony Riakiotakis
Date:   Mon Apr 20 18:07:34 2015 +0200
Branches: master
https://developer.blender.org/rBd354eeab7460ba76f92f3dcce3eea069010635b3

Placeholder image strips feedback session changes no.2:

Change paths operator can also have the same placeholder logic now

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

M	source/blender/editors/space_sequencer/sequencer_add.c
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/space_sequencer/sequencer_intern.h

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

diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 27346ce..f4b1afb 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -752,64 +752,108 @@ void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot)
 	RNA_def_boolean(ot->srna, "cache", false, "Cache", "Cache the sound in memory");
 }
 
-/* add image operator */
-static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
+int sequencer_image_seq_get_minmax_frame(wmOperator *op, int sfra, int *r_minframe)
 {
-	/* cant use the generic function for this */
 	int minframe = INT32_MAX, maxframe = INT32_MIN;
-	Scene *scene = CTX_data_scene(C); /* only for sound */
-	Editing *ed = BKE_sequencer_editing_get(scene, true);
-	SeqLoadInfo seq_load;
-	Sequence *seq;
 
-	Strip *strip;
-	StripElem *se;
-	int i;
-	bool use_placeholders = RNA_boolean_get(op->ptr, "use_placeholders");
+	RNA_BEGIN (op->ptr, itemptr, "files")
+	{
+		char *filename = NULL, *filename_stripped;
+		int frame;
+		/* just get the first filename */
+		filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
 
-	seq_load_operator_info(&seq_load, op);
+		if (filename) {
+			bool is_numeric;
 
-	/* images are unique in how they handle this - 1 per strip elem */
-	if (use_placeholders) {
+			filename_stripped = filename;
 
-		RNA_BEGIN (op->ptr, itemptr, "files")
-		{
-			char *filename = NULL, *filename_stripped;
-			int frame;
-			/* just get the first filename */
-			filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
+			/* strip numeric extensions */
+			while (*filename_stripped && isdigit(*filename_stripped)) {
+				filename_stripped++;
+			}
 
-			if (filename) {
-				bool is_numeric;
+			is_numeric = (filename_stripped != filename && *filename_stripped == '.');
 
-				filename_stripped = filename;
+			if (is_numeric) {
+				/* was the number really an extension? */
+				*filename_stripped = 0;
+				frame = atoi(filename);
+				minframe = min_ii(minframe, frame);
+				maxframe = max_ii(maxframe, frame);
+			}
 
-				/* strip numeric extensions */
-				while (*filename_stripped && isdigit(*filename_stripped)) {
-					filename_stripped++;
-				}
+			MEM_freeN(filename);
+		}
+	}
+	RNA_END;
 
-				is_numeric = (filename_stripped != filename && *filename_stripped == '.');
+	if (minframe == INT32_MAX) {
+		minframe = sfra;
+		maxframe = minframe + 1;
+	}
 
-				if (is_numeric) {
-					/* was the number really an extension? */
-					*filename_stripped = 0;
-					frame = atoi(filename);
-					minframe = min_ii(minframe, frame);
-					maxframe = max_ii(maxframe, frame);
-				}
+	*r_minframe = minframe;
 
-				MEM_freeN(filename);
-			}
+	return maxframe - minframe + 1;
+}
+
+void sequencer_image_seq_reserve_frames(wmOperator *op, StripElem *se, int len, int minframe)
+{
+	int i;
+	char *filename = NULL, *filename_stripped;
+	RNA_BEGIN (op->ptr, itemptr, "files")
+	{
+		/* just get the first filename */
+		filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
+		break;
+	}
+	RNA_END;
+
+	filename_stripped = filename;
+
+	if (filename_stripped) {
+
+		/* strip numeric extensions */
+		while (*filename_stripped && isdigit(*filename_stripped)) {
+			filename_stripped++;
+		}
+
+		/* was the number really an extension? */
+		if (*filename_stripped == '.')
+			filename_stripped++;
+		else {
+			filename_stripped = filename;
 		}
-		RNA_END;
 
-		if (minframe == INT32_MAX) {
-			minframe = seq_load.start_frame;
-			maxframe = minframe + 1;
+		for (i = 0; i < len; i++, se++) {
+			BLI_snprintf(se->name, sizeof(se->name), "%04d.%s", minframe + i, filename_stripped);
 		}
 
-		seq_load.len = 	maxframe - minframe + 1;
+		MEM_freeN(filename);
+	}
+}
+
+
+/* add image operator */
+static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
+{
+	int minframe;
+	/* cant use the generic function for this */
+	Scene *scene = CTX_data_scene(C); /* only for sound */
+	Editing *ed = BKE_sequencer_editing_get(scene, true);
+	SeqLoadInfo seq_load;
+	Sequence *seq;
+
+	Strip *strip;
+	StripElem *se;
+	const bool use_placeholders = RNA_boolean_get(op->ptr, "use_placeholders");
+
+	seq_load_operator_info(&seq_load, op);
+
+	/* images are unique in how they handle this - 1 per strip elem */
+	if (use_placeholders) {
+		seq_load.len = sequencer_image_seq_get_minmax_frame(op, seq_load.start_frame, &minframe);
 	}
 	else {
 		seq_load.len = RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files"));
@@ -827,37 +871,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
 	se = strip->stripdata;
 
 	if (use_placeholders) {
-		char *filename = NULL, *filename_stripped;
-		RNA_BEGIN (op->ptr, itemptr, "files")
-		{
-			/* just get the first filename */
-			filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
-			break;
-		}
-		RNA_END;
-
-		filename_stripped = filename;
-
-		if (filename_stripped) {
-
-			/* strip numeric extensions */
-			while (*filename_stripped && isdigit(*filename_stripped)) {
-				filename_stripped++;
-			}
-
-			/* was the number really an extension? */
-			if (*filename_stripped == '.')
-				filename_stripped++;
-			else {
-				filename_stripped = filename;
-			}
-
-			for (i = 0; i < seq_load.len; i++, se++) {
-				BLI_snprintf(se->name, sizeof(se->name), "%04d.%s", minframe + i, filename_stripped);
-			}
-
-			MEM_freeN(filename);
-		}
+		sequencer_image_seq_reserve_frames(op, se, seq_load.len, minframe);
 	}
 	else {
 		RNA_BEGIN (op->ptr, itemptr, "files")
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 138d9b9..39023f5 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -3694,12 +3694,21 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op)
 	Editing *ed = BKE_sequencer_editing_get(scene, false);
 	Sequence *seq = BKE_sequencer_active_get(scene);
 	const bool is_relative_path = RNA_boolean_get(op->ptr, "relative_path");
+	const bool use_placeholders = RNA_boolean_get(op->ptr, "use_placeholders");
+	int minframe;
 
 	if (seq->type == SEQ_TYPE_IMAGE) {
 		char directory[FILE_MAX];
-		const int len = RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files"));
+		int len;
 		StripElem *se;
 
+		/* need to find min/max frame for placeholders */
+		if (use_placeholders) {
+			len = sequencer_image_seq_get_minmax_frame(op, seq->sfra, &minframe);
+		}
+		else {
+			len = RNA_property_collection_length(op->ptr, RNA_struct_find_property(op->ptr, "files"));
+		}
 		if (len == 0)
 			return OPERATOR_CANCELLED;
 
@@ -3717,14 +3726,19 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op)
 		}
 		seq->strip->stripdata = se = MEM_callocN(len * sizeof(StripElem), "stripelem");
 
-		RNA_BEGIN (op->ptr, itemptr, "files")
-		{
-			char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
-			BLI_strncpy(se->name, filename, sizeof(se->name));
-			MEM_freeN(filename);
-			se++;
+		if (use_placeholders) {
+			sequencer_image_seq_reserve_frames(op, se, len, minframe);
+		}
+		else {
+			RNA_BEGIN (op->ptr, itemptr, "files")
+			{
+				char *filename = RNA_string_get_alloc(&itemptr, "name", NULL, 0);
+				BLI_strncpy(se->name, filename, sizeof(se->name));
+				MEM_freeN(filename);
+				se++;
+			}
+			RNA_END;
 		}
-		RNA_END;
 
 		/* reset these else we wont see all the images */
 		seq->anim_startofs = seq->anim_endofs = 0;
@@ -3799,4 +3813,5 @@ void SEQUENCER_OT_change_path(struct wmOperatorType *ot)
 	WM_operator_properties_filesel(ot, FILE_TYPE_FOLDER | FILE_TYPE_IMAGE | FILE_TYPE_MOVIE, FILE_SPECIAL, FILE_OPENFILE,
 	                               WM_FILESEL_DIRECTORY | WM_FILESEL_RELPATH | WM_FILESEL_FILEPATH | WM_FILESEL_FILES,
 	                               FILE_DEFAULTDISPLAY);
+	RNA_def_boolean(ot->srna, "use_placeholders", false, "Use Placeholders", "Use placeholders for missing frames of the strip");
 }
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 7825550..0158a2d 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -45,6 +45,8 @@ struct ARegion;
 struct ARegionType;
 struct Scene;
 struct Main;
+struct wmOperator;
+struct StripElem;
 
 /* space_sequencer.c */
 struct ARegion *sequencer_has_buttons_region(struct ScrArea *sa);
@@ -202,5 +204,9 @@ void SEQUENCER_OT_sample(struct wmOperatorType *ot);
 /* sequencer_preview.c */
 void sequencer_preview_add_sound(const struct bContext *C, struct Sequence *seq);
 
+/* sequencer_add */
+int sequencer_image_seq_get_minmax_frame(struct wmOperator *op, int sfra, int *r_minframe);
+void sequencer_image_seq_reserve_frames(struct wmOperator *op, struct StripElem *se, int len, int minframe);
+
 #endif /* __SEQUENCER_INTERN_H__ */




More information about the Bf-blender-cvs mailing list