[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18467] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Mon Jan 12 20:02:11 CET 2009


Revision: 18467
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18467
Author:   ton
Date:     2009-01-12 20:02:08 +0100 (Mon, 12 Jan 2009)

Log Message:
-----------
2.5

12k lines of sequencer back! Only seqaudio.c skipped for now.
Notes:

- it only draws now, nothing refreshes or edits.
- fixed bug in view2d.c with vertical grid step being 0.0f
- render code and fileselect code is #ifdeffed out
- sequence evaluation code moved to blenkernel, so it can
  be used for render without bad level calls

General note; sequencer code is very untidy, mixing styles too
much. Tried to clean it some, but it would be nice if formatting
is kept consistant from now on.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c
    branches/blender2.5/blender/source/blender/blenlib/intern/bpath.c
    branches/blender2.5/blender/source/blender/editors/interface/view2d.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/Makefile
    branches/blender2.5/blender/source/blender/editors/space_sequencer/SConscript
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    branches/blender2.5/blender/source/blender/editors/space_sequencer/space_sequencer.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/blenkernel/intern/seqeffects.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/editseq.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_scopes.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h	2009-01-12 18:07:55 UTC (rev 18466)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h	2009-01-12 19:02:08 UTC (rev 18467)
@@ -33,12 +33,18 @@
 
 struct Editing;
 struct Sequence;
+struct Strip;
+struct StripElem;
+struct ImBuf;
+struct Scene;
 
-/* free */
+#define MAXSEQ          32
 
-void seq_free_sequence(struct Sequence *seq);
-void seq_free_editing(struct Editing *ed);
+#define BUILD_SEQAR_COUNT_NOTHING  0
+#define BUILD_SEQAR_COUNT_CURRENT  1
+#define BUILD_SEQAR_COUNT_CHILDREN 2
 
+
 /* sequence iterator */
 
 typedef struct SeqIterator {
@@ -49,16 +55,21 @@
 	int valid;
 } SeqIterator;
 
-void seq_begin(struct Editing *ed, SeqIterator *iter);
+void seq_begin(struct Editing *ed, SeqIterator *iter, int use_pointer);
 void seq_next(SeqIterator *iter);
 void seq_end(SeqIterator *iter);
+void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int use_pointer);
 
-void seq_array(struct Editing *ed, struct Sequence ***array, int *tot);
-
+#define SEQP_BEGIN(ed, seq) \
+{ \
+	SeqIterator iter;\
+		for(seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \
+			seq= iter.seq;
+			
 #define SEQ_BEGIN(ed, seq) \
 	{ \
 		SeqIterator iter;\
-		for(seq_begin(ed, &iter); iter.valid; seq_next(&iter)) { \
+		for(seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \
 			seq= iter.seq;
 
 #define SEQ_END \
@@ -68,3 +79,89 @@
 
 #endif
 
+
+/* Wipe effect */
+enum {DO_SINGLE_WIPE, DO_DOUBLE_WIPE, DO_BOX_WIPE, DO_CROSS_WIPE,
+	DO_IRIS_WIPE,DO_CLOCK_WIPE};
+
+
+struct SeqEffectHandle {
+	/* constructors & destructor */
+	/* init & init_plugin are _only_ called on first creation */
+	void (*init)(struct Sequence *seq);
+	void (*init_plugin)(struct Sequence *seq, const char *fname);
+	
+	/* number of input strips needed 
+		(called directly after construction) */
+	int (*num_inputs)();
+	
+	/* load is called first time after readblenfile in
+		get_sequence_effect automatically */
+	void (*load)(struct Sequence *seq);
+	
+	/* duplicate */
+	void (*copy)(struct Sequence *dst, struct Sequence *src);
+	
+	/* destruct */
+	void (*free)(struct Sequence *seq);
+	
+	/* returns: -1: no input needed,
+	0: no early out, 
+	1: out = ibuf1, 
+	2: out = ibuf2 */
+	int (*early_out)(struct Sequence *seq,
+					 float facf0, float facf1); 
+	
+	/* stores the y-range of the effect IPO */
+	void (*store_icu_yrange)(struct Sequence * seq,
+							 short adrcode, float *ymin, float *ymax);
+	
+	/* stores the default facf0 and facf1 if no IPO is present */
+	void (*get_default_fac)(struct Sequence *seq, int cfra,
+							float * facf0, float * facf1);
+	
+	/* execute the effect
+		sequence effects are only required to either support
+		float-rects or byte-rects 
+		(mixed cases are handled one layer up...) */
+	
+	void (*execute)(struct Sequence *seq, int cfra,
+					float facf0, float facf1,
+					int x, int y,
+					struct ImBuf *ibuf1, struct ImBuf *ibuf2,
+					struct ImBuf *ibuf3, struct ImBuf *out);
+};
+
+/* ********************* prototypes *************** */
+
+/* sequence.c */
+
+// extern
+void seq_free_sequence(struct Sequence *seq);
+void seq_free_strip(struct Strip *strip);
+void seq_free_editing(struct Editing *ed);
+char *give_seqname(struct Sequence *seq);
+struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown);
+struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int recty, int cfra, int chanshown);
+struct ImBuf *give_ibuf_seq_direct(struct Scene *scene, int rectx, int recty, int cfra, struct Sequence *seq);
+void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown);
+void calc_sequence(struct Sequence *seq);
+void new_tstripdata(struct Sequence *seq);
+void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq);
+void sort_seq(struct Scene *scene);
+void build_seqar_cb(struct ListBase *seqbase, struct Sequence  ***seqar, int *totseq,
+					int (*test_func)(struct Sequence * seq));
+int evaluate_seq_frame(struct Scene *scene, int cfra);
+struct StripElem *give_stripelem(struct Sequence *seq, int cfra);
+
+// intern?
+void update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change);
+
+/* seqeffects.c */
+// intern?
+struct SeqEffectHandle get_sequence_blend(struct Sequence *seq);
+void sequence_effect_speed_rebuild_map(struct Scene *scene, struct Sequence *seq, int force);
+
+// extern
+struct SeqEffectHandle get_sequence_effect(struct Sequence *seq);
+int get_sequence_effect_num_inputs(int seq_type);

Copied: branches/blender2.5/blender/source/blender/blenkernel/intern/seqeffects.c (from rev 18462, trunk/blender/source/blender/src/seqeffects.c)
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/seqeffects.c	                        (rev 0)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/seqeffects.c	2009-01-12 19:02:08 UTC (rev 18467)
@@ -0,0 +1,3145 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): 
+ * - Blender Foundation, 2003-2009
+ * - Peter Schlaile <peter [at] schlaile [dot] de> 2005/2006
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+#include "PIL_dynlib.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_sequence_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+
+#include "BKE_global.h"
+#include "BKE_ipo.h"
+#include "BKE_plugin_types.h"
+#include "BKE_sequence.h"
+#include "BKE_texture.h"
+#include "BKE_utildefines.h"
+
+#include "IMB_imbuf_types.h"
+#include "IMB_imbuf.h"
+
+/* **** XXX **** */
+static void error() {}
+
+#define INT	96
+#define FLO	128
+
+/* **** XXX **** */
+
+/* Glow effect */
+enum {
+	GlowR=0,
+	GlowG=1,
+	GlowB=2,
+	GlowA=3
+};
+
+
+/* **********************************************************************
+   PLUGINS
+   ********************************************************************** */
+
+static void open_plugin_seq(PluginSeq *pis, const char *seqname)
+{
+	int (*version)();
+	void* (*alloc_private)();
+	char *cp;
+
+	/* to be sure: (is tested for) */
+	pis->doit= 0;
+	pis->pname= 0;
+	pis->varstr= 0;
+	pis->cfra= 0;
+	pis->version= 0;
+	pis->instance_private_data = 0;
+
+	/* clear the error list */
+	PIL_dynlib_get_error_as_string(NULL);
+
+	/* if(pis->handle) PIL_dynlib_close(pis->handle); */
+	/* pis->handle= 0; */
+
+	/* open the needed object */
+	pis->handle= PIL_dynlib_open(pis->name);
+	if(test_dlerr(pis->name, pis->name)) return;
+
+	if (pis->handle != 0) {
+		/* find the address of the version function */
+		version= (int (*)())PIL_dynlib_find_symbol(pis->handle, "plugin_seq_getversion");
+		if (test_dlerr(pis->name, "plugin_seq_getversion")) return;
+
+		if (version != 0) {
+			pis->version= version();
+			if (pis->version >= 2 && pis->version <= 6) {
+				int (*info_func)(PluginInfo *);
+				PluginInfo *info= (PluginInfo*) MEM_mallocN(sizeof(PluginInfo), "plugin_info");
+
+				info_func= (int (*)(PluginInfo *))PIL_dynlib_find_symbol(pis->handle, "plugin_getinfo");
+
+				if(info_func == NULL) error("No info func");
+				else {
+					info_func(info);
+
+					pis->pname= info->name;
+					pis->vars= info->nvars;
+					pis->cfra= info->cfra;
+
+					pis->varstr= info->varstr;
+
+					pis->doit= (void(*)(void))info->seq_doit;
+					if (info->init)
+						info->init();
+				}
+				MEM_freeN(info);
+
+				cp= PIL_dynlib_find_symbol(pis->handle, "seqname");
+				if(cp) strncpy(cp, seqname, 21);
+			} else {
+				printf ("Plugin returned unrecognized version number\n");
+				return;
+			}
+		}
+		alloc_private = (void* (*)())PIL_dynlib_find_symbol(
+			pis->handle, "plugin_seq_alloc_private_data");
+		if (alloc_private) {
+			pis->instance_private_data = alloc_private();
+		}
+		
+		pis->current_private_data = (void**) 
+			PIL_dynlib_find_symbol(
+				pis->handle, "plugin_private_data");
+	}
+}
+
+static PluginSeq *add_plugin_seq(const char *str, const char *seqname)
+{
+	PluginSeq *pis;
+	VarStruct *varstr;
+	int a;
+
+	pis= MEM_callocN(sizeof(PluginSeq), "PluginSeq");
+
+	strncpy(pis->name, str, FILE_MAXDIR+FILE_MAXFILE);
+	open_plugin_seq(pis, seqname);
+
+	if(pis->doit==0) {
+		if(pis->handle==0) error("no plugin: %s", str);
+		else error("in plugin: %s", str);
+		MEM_freeN(pis);
+		return 0;
+	}
+
+	/* default values */
+	varstr= pis->varstr;
+	for(a=0; a<pis->vars; a++, varstr++) {
+		if( (varstr->type & FLO)==FLO)
+			pis->data[a]= varstr->def;
+		else if( (varstr->type & INT)==INT)
+			*((int *)(pis->data+a))= (int) varstr->def;
+	}
+
+	return pis;
+}
+
+static void free_plugin_seq(PluginSeq *pis)
+{
+	if(pis==0) return;
+
+	/* no PIL_dynlib_close: same plugin can be opened multiple times with 1 handle */
+
+	if (pis->instance_private_data) {
+		void (*free_private)(void *);
+
+		free_private = (void (*)(void *))PIL_dynlib_find_symbol(
+			pis->handle, "plugin_seq_free_private_data");
+		if (free_private) {
+			free_private(pis->instance_private_data);
+		}
+	}
+
+	MEM_freeN(pis);
+}
+
+static void init_plugin(Sequence * seq, const char * fname)
+{
+	seq->plugin= (PluginSeq *)add_plugin_seq(fname, seq->name+2);
+}
+
+/* 
+ * FIXME: should query plugin! Could be generator, that needs zero inputs...
+ */
+static int num_inputs_plugin()
+{
+	return 1;
+}
+
+static void load_plugin(Sequence * seq)
+{
+	if (seq) {
+		open_plugin_seq(seq->plugin, seq->name+2);
+	}
+}
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list