[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30510] trunk/blender/source/blender: == Sequencer ==

Peter Schlaile peter at schlaile.de
Mon Jul 19 22:01:18 CEST 2010


Revision: 30510
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30510
Author:   schlaile
Date:     2010-07-19 22:01:18 +0200 (Mon, 19 Jul 2010)

Log Message:
-----------
== Sequencer ==

Bugfix: free_imbuf_seq() was closing IMB anim handles on nearly every 
change of RNA variables. This can be *very* slow, if you twiddle with 
parameters during playback. Especially multicam editing...

Now: we close IMB anim handles only on refresh_all() and filepath 
changes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-07-19 19:57:28 UTC (rev 30509)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2010-07-19 20:01:18 UTC (rev 30510)
@@ -191,13 +191,13 @@
 int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
 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);
+void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage, int keep_file_handles);
 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_sound_reload(struct 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 dupe_flag);
 

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-19 19:57:28 UTC (rev 30509)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-07-19 20:01:18 UTC (rev 30510)
@@ -3267,64 +3267,13 @@
 	}
 }
 
-#if 0
-static void free_imbuf_seq_except(Scene *scene, int cfra)
+void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage,
+		    int keep_file_handles)
 {
-	Editing *ed= seq_give_editing(scene, FALSE);
 	Sequence *seq;
 	TStripElem *se;
 	int a;
 
-	if(ed==NULL) return;
-
-	SEQ_BEGIN(ed, seq) {
-		if(seq->strip) {
-			TStripElem * curelem = give_tstripelem(seq, cfra);
-
-			for(a = 0, se = seq->strip->tstripdata; 
-				a < seq->strip->len && se; a++, se++) {
-				if(se != curelem) {
-					free_imbuf_strip_elem(se);
-				}
-			}
-			for(a = 0, se = seq->strip->tstripdata_startstill;
-				a < seq->strip->startstill && se; a++, se++) {
-				if(se != curelem) {
-					free_imbuf_strip_elem(se);
-				}
-			}
-			for(a = 0, se = seq->strip->tstripdata_endstill;
-				a < seq->strip->endstill && se; a++, se++) {
-				if(se != curelem) {
-					free_imbuf_strip_elem(se);
-				}
-			}
-			if(seq->strip->ibuf_startstill) {
-				IMB_freeImBuf(seq->strip->ibuf_startstill);
-				seq->strip->ibuf_startstill = 0;
-			}
-
-			if(seq->strip->ibuf_endstill) {
-				IMB_freeImBuf(seq->strip->ibuf_endstill);
-				seq->strip->ibuf_endstill = 0;
-			}
-
-			if(seq->type==SEQ_MOVIE)
-				if(seq->startdisp > cfra || seq->enddisp < cfra)
-					free_anim_seq(seq);
-			free_proxy_seq(seq);
-		}
-	}
-	SEQ_END
-}
-#endif
-
-void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage)
-{
-	Sequence *seq;
-	TStripElem *se;
-	int a;
-
 	if (check_mem_usage) {
 		/* Let the cache limitor take care of this (schlaile) */
 		/* While render let's keep all memory available for render 
@@ -3374,14 +3323,15 @@
 				seq->strip->ibuf_endstill = 0;
 			}
 
-			if(seq->type==SEQ_MOVIE)
+			if(seq->type==SEQ_MOVIE && !keep_file_handles)
 				free_anim_seq(seq);
 			if(seq->type==SEQ_SPEED) {
 				sequence_effect_speed_rebuild_map(scene, seq, 1);
 			}
 		}
 		if(seq->type==SEQ_META) {
-			free_imbuf_seq(scene, &seq->seqbase, FALSE);
+			free_imbuf_seq(scene, &seq->seqbase, FALSE,
+				       keep_file_handles);
 		}
 		if(seq->type==SEQ_SCENE) {
 			/* FIXME: recurs downwards, 

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2010-07-19 19:57:28 UTC (rev 30509)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2010-07-19 20:01:18 UTC (rev 30510)
@@ -1415,7 +1415,7 @@
 	Scene *scene= CTX_data_scene(C);
 	Editing *ed= seq_give_editing(scene, FALSE);
 
-	free_imbuf_seq(scene, &ed->seqbase, FALSE);
+	free_imbuf_seq(scene, &ed->seqbase, FALSE, FALSE);
 
 	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2010-07-19 19:57:28 UTC (rev 30509)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2010-07-19 20:01:18 UTC (rev 30510)
@@ -460,7 +460,7 @@
 {
 	Editing *ed= seq_give_editing(scene, FALSE);
 
-	free_imbuf_seq(scene, &ed->seqbase, FALSE);
+	free_imbuf_seq(scene, &ed->seqbase, FALSE, TRUE);
 
 	if(RNA_struct_is_a(ptr->type, &RNA_SoundSequence))
 		seq_update_sound(scene, ptr->data);

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2010-07-19 19:57:28 UTC (rev 30509)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2010-07-19 20:01:18 UTC (rev 30510)
@@ -2510,7 +2510,7 @@
 		if (recurs_depth == 0) { /* with nested scenes, only free on toplevel... */
 			Editing * ed = re->scene->ed;
 			if (ed) {
-				free_imbuf_seq(re->scene, &ed->seqbase, TRUE);
+				free_imbuf_seq(re->scene, &ed->seqbase, TRUE, TRUE);
 			}
 		}
 	}





More information about the Bf-blender-cvs mailing list