[Bf-blender-cvs] [13b81c8] master: Fix T40373: Adding movie creates overlapping audio strips

Campbell Barton noreply at git.blender.org
Tue May 27 07:36:25 CEST 2014


Commit: 13b81c84a0d6ee4358f9393da5c130f026203b62
Author: Campbell Barton
Date:   Tue May 27 15:18:31 2014 +1000
https://developer.blender.org/rB13b81c84a0d6ee4358f9393da5c130f026203b62

Fix T40373: Adding movie creates overlapping audio strips

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

M	source/blender/blenkernel/BKE_sequencer.h
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/editors/space_sequencer/sequencer_add.c

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

diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 17193bb..de52c72 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -340,11 +340,14 @@ typedef struct SeqLoadInfo {
 	int channel;
 	int flag;   /* use sound, replace sel */
 	int type;
-	int tot_success;
-	int tot_error;
 	int len;        /* only for image strips */
 	char path[1024]; /* 1024 = FILE_MAX */
+
+	/* return values */
 	char name[64];
+	struct Sequence *seq_sound;  /* for movie's */
+	int tot_success;
+	int tot_error;
 } SeqLoadInfo;
 
 /* SeqLoadInfo.flag */
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index cf15b23..af761a3 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -4463,7 +4463,7 @@ Sequence *BKE_sequencer_add_movie_strip(bContext *C, ListBase *seqbasep, SeqLoad
 		int start_frame_back = seq_load->start_frame;
 		seq_load->channel++;
 
-		BKE_sequencer_add_sound_strip(C, seqbasep, seq_load);
+		seq_load->seq_sound = BKE_sequencer_add_sound_strip(C, seqbasep, seq_load);
 
 		seq_load->start_frame = start_frame_back;
 		seq_load->channel--;
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 8fe9dbe..345988c 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -226,6 +226,32 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op)
 	}
 }
 
+/**
+ * Apply generic operator options.
+ */
+static void sequencer_add_apply_overlap(bContext *C, wmOperator *op, Sequence *seq)
+{
+	Scene *scene = CTX_data_scene(C);
+	Editing *ed = BKE_sequencer_editing_get(scene, false);
+
+	if (RNA_boolean_get(op->ptr, "overlap") == false) {
+		if (BKE_sequence_test_overlap(ed->seqbasep, seq)) {
+			BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
+		}
+	}
+}
+
+static void sequencer_add_apply_replace_sel(bContext *C, wmOperator *op, Sequence *seq)
+{
+	Scene *scene = CTX_data_scene(C);
+
+	if (RNA_boolean_get(op->ptr, "replace_sel")) {
+		ED_sequencer_deselect_all(scene);
+		BKE_sequencer_active_set(scene, seq);
+		seq->flag |= SELECT;
+	}
+}
+
 /* add scene operator */
 static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
 {
@@ -268,15 +294,8 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
 	BKE_sequence_calc_disp(scene, seq);
 	BKE_sequencer_sort(scene);
 	
-	if (RNA_boolean_get(op->ptr, "replace_sel")) {
-		ED_sequencer_deselect_all(scene);
-		BKE_sequencer_active_set(scene, seq);
-		seq->flag |= SELECT;
-	}
-
-	if (RNA_boolean_get(op->ptr, "overlap") == false) {
-		if (BKE_sequence_test_overlap(ed->seqbasep, seq)) BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
-	}
+	sequencer_add_apply_replace_sel(C, op, seq);
+	sequencer_add_apply_overlap(C, op, seq);
 
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 	
@@ -363,15 +382,8 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op)
 	BKE_sequence_calc_disp(scene, seq);
 	BKE_sequencer_sort(scene);
 	
-	if (RNA_boolean_get(op->ptr, "replace_sel")) {
-		ED_sequencer_deselect_all(scene);
-		BKE_sequencer_active_set(scene, seq);
-		seq->flag |= SELECT;
-	}
-
-	if (RNA_boolean_get(op->ptr, "overlap") == false) {
-		if (BKE_sequence_test_overlap(ed->seqbasep, seq)) BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
-	}
+	sequencer_add_apply_replace_sel(C, op, seq);
+	sequencer_add_apply_overlap(C, op, seq);
 
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 	
@@ -455,15 +467,8 @@ static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op)
 	BKE_sequence_calc_disp(scene, seq);
 	BKE_sequencer_sort(scene);
 
-	if (RNA_boolean_get(op->ptr, "replace_sel")) {
-		ED_sequencer_deselect_all(scene);
-		BKE_sequencer_active_set(scene, seq);
-		seq->flag |= SELECT;
-	}
-
-	if (RNA_boolean_get(op->ptr, "overlap") == false) {
-		if (BKE_sequence_test_overlap(ed->seqbasep, seq)) BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
-	}
+	sequencer_add_apply_replace_sel(C, op, seq);
+	sequencer_add_apply_overlap(C, op, seq);
 
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 
@@ -513,9 +518,7 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
 	Scene *scene = CTX_data_scene(C); /* only for sound */
 	Editing *ed = BKE_sequencer_editing_get(scene, true);
 	SeqLoadInfo seq_load;
-	Sequence *seq;
 	int tot_files;
-	const bool overlap = RNA_boolean_get(op->ptr, "overlap");
 
 	seq_load_operator_info(&seq_load, op);
 
@@ -536,6 +539,8 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
 
 		RNA_BEGIN (op->ptr, itemptr, "files")
 		{
+			Sequence *seq;
+
 			RNA_string_get(&itemptr, "name", file_only);
 			BLI_join_dirfile(seq_load.path, sizeof(seq_load.path), dir_only, file_only);
 
@@ -544,21 +549,23 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
 
 			seq = seq_load_func(C, ed->seqbasep, &seq_load);
 			if (seq) {
-				if (overlap == false) {
-					if (BKE_sequence_test_overlap(ed->seqbasep, seq))
-						BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
+				sequencer_add_apply_overlap(C, op, seq);
+				if (seq_load.seq_sound) {
+					sequencer_add_apply_overlap(C, op, seq_load.seq_sound);
 				}
 			}
 		}
 		RNA_END;
 	}
 	else {
+		Sequence *seq;
+
 		/* single file */
 		seq = seq_load_func(C, ed->seqbasep, &seq_load);
 		if (seq) {
-			if (overlap == false) {
-				if (BKE_sequence_test_overlap(ed->seqbasep, seq))
-					BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
+			sequencer_add_apply_overlap(C, op, seq);
+			if (seq_load.seq_sound) {
+				sequencer_add_apply_overlap(C, op, seq_load.seq_sound);
 			}
 		}
 	}
@@ -728,10 +735,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
 	/* last active name */
 	BLI_strncpy(ed->act_imagedir, strip->dir, sizeof(ed->act_imagedir));
 
-	if (RNA_boolean_get(op->ptr, "overlap") == false) {
-		if (BKE_sequence_test_overlap(ed->seqbasep, seq))
-			BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
-	}
+	sequencer_add_apply_overlap(C, op, seq);
 
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 
@@ -859,9 +863,8 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
 		}
 	}
 
-	if (RNA_boolean_get(op->ptr, "overlap") == false) {
-		if (BKE_sequence_test_overlap(ed->seqbasep, seq)) BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
-	}
+	sequencer_add_apply_replace_sel(C, op, seq);
+	sequencer_add_apply_overlap(C, op, seq);
 
 	BKE_sequencer_update_changed_seq_and_deps(scene, seq, 1, 1); /* runs BKE_sequence_calc */
 
@@ -870,12 +873,6 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
 	 * it was NOT called in blender 2.4x, but wont hurt */
 	BKE_sequencer_sort(scene); 
 
-	if (RNA_boolean_get(op->ptr, "replace_sel")) {
-		ED_sequencer_deselect_all(scene);
-		BKE_sequencer_active_set(scene, seq);
-		seq->flag |= SELECT;
-	}
-
 	WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;




More information about the Bf-blender-cvs mailing list