[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24559] trunk/blender: - sequencer speed effect back using fcurves, still needs manual reloading to refresh.

Campbell Barton ideasman42 at gmail.com
Sat Nov 14 15:58:19 CET 2009


Revision: 24559
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24559
Author:   campbellbarton
Date:     2009-11-14 15:58:19 +0100 (Sat, 14 Nov 2009)

Log Message:
-----------
- sequencer speed effect back using fcurves, still needs manual reloading to refresh.
- added a function id_data_find_fcurve() to get the fcurve without RNA vars. Aligorith: this could be made to use a path rather then a property name.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_sequencer.py
    trunk/blender/source/blender/blenkernel/BKE_fcurve.h
    trunk/blender/source/blender/blenkernel/BKE_sequence.h
    trunk/blender/source/blender/blenkernel/intern/fcurve.c
    trunk/blender/source/blender/blenkernel/intern/seqeffects.c
    trunk/blender/source/blender/blenkernel/intern/sequence.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/makesrna/intern/rna_sequence.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/release/scripts/ui/space_sequencer.py	2009-11-14 14:58:19 UTC (rev 24559)
@@ -426,7 +426,11 @@
             col.itemR(strip, "rotation_start", text="Start")
             col.itemR(strip, "rotation_end", text="End")
 
+        col = layout.column(align=True)
+        col.itemR(strip, "factor_0", text="Anim0")
+        col.itemR(strip, "factor_1", text="Anim1")
 
+
 class SEQUENCER_PT_input(SequencerButtonsPanel):
     bl_label = "Strip Input"
 

Modified: trunk/blender/source/blender/blenkernel/BKE_fcurve.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_fcurve.h	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/blenkernel/BKE_fcurve.h	2009-11-14 14:58:19 UTC (rev 24559)
@@ -34,6 +34,7 @@
 struct DriverTarget;
 
 struct BezTriple;
+struct StructRNA;
 
 #include "DNA_curve_types.h"
 
@@ -155,6 +156,9 @@
 /* find matching F-Curve in the given list of F-Curves */
 struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
 
+/* high level function to get an fcurve from C without having the rna */
+struct FCurve *id_data_find_fcurve(ID* id, void *data, struct StructRNA *type, char *prop_name, int index);
+
 /* Binary search algorithm for finding where to 'insert' BezTriple with given frame number.
  * Returns the index to insert at (data already at that index will be offset if replace is 0)
  */

Modified: trunk/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequence.h	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/blenkernel/BKE_sequence.h	2009-11-14 14:58:19 UTC (rev 24559)
@@ -163,7 +163,7 @@
 /* seqeffects.c */
 // intern?
 struct SeqEffectHandle get_sequence_blend(struct Sequence *seq);
-void sequence_effect_speed_rebuild_map(struct Sequence *seq, int force);
+void sequence_effect_speed_rebuild_map(struct Scene *scene, struct Sequence *seq, int force);
 
 // extern
 struct SeqEffectHandle get_sequence_effect(struct Sequence *seq);
@@ -183,7 +183,7 @@
 int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
 int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test);
 int shuffle_seq_time(ListBase * seqbasep);
-void free_imbuf_seq(struct ListBase * seqbasep, int check_mem_usage);
+void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
 
 void seq_update_sound(struct Sequence *seq);
 

Modified: trunk/blender/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/fcurve.c	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/blenkernel/intern/fcurve.c	2009-11-14 14:58:19 UTC (rev 24559)
@@ -47,6 +47,8 @@
 #include "BLI_noise.h"
 
 #include "BKE_fcurve.h"
+#include "BKE_animsys.h"
+
 #include "BKE_curve.h" 
 #include "BKE_global.h"
 #include "BKE_idprop.h"
@@ -177,6 +179,49 @@
 
 /* --------------------- Finding -------------------------- */
 
+FCurve *id_data_find_fcurve(ID *id, void *data, StructRNA *type, char *prop_name, int index)
+{
+	/* anim vars */
+	AnimData *adt;
+	FCurve *fcu= NULL;
+
+	/* rna vars */
+	PointerRNA ptr;
+	PropertyRNA *prop;
+	char *path;
+
+	adt= BKE_animdata_from_id(id);
+
+	/* only use the current action ??? */
+	if(adt==NULL || adt->action==NULL)
+		return NULL;
+
+	RNA_pointer_create(id, type, data, &ptr);
+	prop = RNA_struct_find_property(&ptr, prop_name);
+
+	if(prop) {
+		path= RNA_path_from_ID_to_property(&ptr, prop);
+
+		if(path) {
+			/* animation takes priority over drivers */
+			if(adt->action && adt->action->curves.first)
+				fcu= list_find_fcurve(&adt->action->curves, path, index);
+
+			/* if not animated, check if driven */
+#if 0
+			if(!fcu && (adt->drivers.first)) {
+				fcu= list_find_fcurve(&adt->drivers, path, but->rnaindex);
+			}
+#endif
+
+			MEM_freeN(path);
+		}
+	}
+
+	return fcu;
+}
+
+
 /* Find the F-Curve affecting the given RNA-access path + index, in the list of F-Curves provided */
 FCurve *list_find_fcurve (ListBase *list, const char rna_path[], const int array_index)
 {

Modified: trunk/blender/source/blender/blenkernel/intern/seqeffects.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/seqeffects.c	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/blenkernel/intern/seqeffects.c	2009-11-14 14:58:19 UTC (rev 24559)
@@ -36,11 +36,13 @@
 
 #include "DNA_scene_types.h"
 #include "DNA_sequence_types.h"
+#include "DNA_anim_types.h"
 
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
 
 #include "BKE_global.h"
+#include "BKE_fcurve.h"
 #include "BKE_plugin_types.h"
 #include "BKE_sequence.h"
 #include "BKE_texture.h"
@@ -49,6 +51,8 @@
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 
+#include "RNA_access.h"
+
 /* **** XXX **** */
 static void error() {}
 
@@ -2777,14 +2781,15 @@
 		}
 	}	
 }
-
-void sequence_effect_speed_rebuild_map(Sequence * seq, int force)
+extern float frame_to_float (Scene *scene, int cfra);
+void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
 {
 	float facf0 = seq->facf0;
-	//float ctime, div;
+	float ctime, div;
 	int cfra;
 	float fallback_fac;
 	SpeedControlVars * v = (SpeedControlVars *)seq->effectdata;
+	FCurve *fcu= NULL;
 
 	/* if not already done, load / initialize data */
 	get_sequence_effect(seq);
@@ -2797,6 +2802,11 @@
 		return;
 	}
 
+	/* XXX - new in 2.5x. should we use the animation system this way?
+	 * The fcurve is needed because many frames need evaluating at once - campbell */
+	fcu= id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "factor_0", 0);
+
+
 	if (!v->frameMap || v->length != seq->len) {
 		if (v->frameMap) MEM_freeN(v->frameMap);
 
@@ -2811,8 +2821,7 @@
 	/* if there is no IPO, try to make retiming easy by stretching the
 	   strip */
 	// XXX old animation system - seq
-	if (/*!seq->ipo &&*/ seq->seq1->enddisp != seq->seq1->start
-	    && seq->seq1->len != 0) {
+	if (!fcu && seq->seq1->enddisp != seq->seq1->start && seq->seq1->len != 0) {
 		fallback_fac = (float) seq->seq1->len / 
 			(float) (seq->seq1->enddisp - seq->seq1->start);
 		/* FIXME: this strip stretching gets screwed by stripdata
@@ -2834,8 +2843,7 @@
 		v->lastValidFrame = 0;
 
 		for (cfra = 1; cfra < v->length; cfra++) {
-#if 0 // XXX old animation system
-			if(seq->ipo) {
+			if(fcu) {
 				if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
 					ctime = frame_to_float(scene, seq->startdisp + cfra);
 					div = 1.0;
@@ -2845,10 +2853,11 @@
 					if(div==0.0) return;
 				}
 		
-				calc_ipo(seq->ipo, ctime/div);
-				execute_ipo((ID *)seq, seq->ipo);
+//XXX OLD ANIMSYS
+//				calc_ipo(seq->ipo, ctime/div);
+//				execute_ipo((ID *)seq, seq->ipo);
+				seq->facf0 = evaluate_fcurve(fcu, ctime/div);
 			} else 
-#endif // XXX old animation system
 			{
 				seq->facf0 = fallback_fac;
 			}
@@ -2866,8 +2875,8 @@
 	} else {
 		v->lastValidFrame = 0;
 		for (cfra = 0; cfra < v->length; cfra++) {
-#if 0 // XXX old animation system
-			if(seq->ipo) {
+
+			if(fcu) {
 				if((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
 					ctime = frame_to_float(scene, seq->startdisp + cfra);
 					div = 1.0;
@@ -2877,15 +2886,16 @@
 					if(div==0.0) return;
 				}
 		
-				calc_ipo(seq->ipo, ctime/div);
-				execute_ipo((ID *)seq, seq->ipo);
+// XXX old animation system
+//				calc_ipo(seq->ipo, ctime/div);
+//				execute_ipo((ID *)seq, seq->ipo);
+				seq->facf0 = evaluate_fcurve(fcu, ctime/div);
 			}
-#endif // XXX old animation system
 			
 			if (v->flags & SEQ_SPEED_COMPRESS_IPO_Y) {
 				seq->facf0 *= v->length;
 			}
-			if (/*!seq->ipo*/ 1) { // XXX old animation system - seq
+			if (!fcu) {
 				seq->facf0 = (float) cfra * fallback_fac;
 			}
 			seq->facf0 *= v->globalSpeed;

Modified: trunk/blender/source/blender/blenkernel/intern/sequence.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-11-14 14:58:19 UTC (rev 24559)
@@ -2226,7 +2226,7 @@
 	TStripElem * se1 = 0;
 	TStripElem * se2 = 0;
 	
-	sequence_effect_speed_rebuild_map(seq, 0);
+	sequence_effect_speed_rebuild_map(scene, seq, 0);
 	
 	f_cfra = seq->start + s->frameMap[nr];
 	
@@ -3053,7 +3053,7 @@
 }
 #endif
 
-void free_imbuf_seq(ListBase * seqbase, int check_mem_usage)
+void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage)
 {
 	Sequence *seq;
 	TStripElem *se;
@@ -3111,11 +3111,11 @@
 			if(seq->type==SEQ_MOVIE)
 				free_anim_seq(seq);
 			if(seq->type==SEQ_SPEED) {
-				sequence_effect_speed_rebuild_map(seq, 1);
+				sequence_effect_speed_rebuild_map(scene, seq, 1);
 			}
 		}
 		if(seq->type==SEQ_META) {
-			free_imbuf_seq(&seq->seqbase, FALSE);
+			free_imbuf_seq(scene, &seq->seqbase, FALSE);
 		}
 		if(seq->type==SEQ_SCENE) {
 			/* FIXME: recurs downwards, 
@@ -3164,7 +3164,7 @@
 			if(seq->type == SEQ_MOVIE)
 				free_anim_seq(seq);
 			if(seq->type == SEQ_SPEED) {
-				sequence_effect_speed_rebuild_map(seq, 1);
+				sequence_effect_speed_rebuild_map(scene, seq, 1);
 			}
 		}
 		

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-11-14 14:58:19 UTC (rev 24559)
@@ -1701,7 +1701,7 @@
 	if(ed==NULL)
 		return OPERATOR_CANCELLED;
 
-	free_imbuf_seq(&ed->seqbase, FALSE);
+	free_imbuf_seq(scene, &ed->seqbase, FALSE);
 
 	ED_area_tag_redraw(CTX_wm_area(C));
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequence.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequence.c	2009-11-14 13:35:44 UTC (rev 24558)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequence.c	2009-11-14 14:58:19 UTC (rev 24559)
@@ -545,6 +545,17 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list