5db102e9868ccaafdde2a6542842584d5084688a
[blender-staging.git] / source / blender / makesdna / DNA_sequence_types.h
1 /**
2  * blenlib/DNA_sequence_types.h (mar-2001 nzc)
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef DNA_SEQUENCE_TYPES_H
35 #define DNA_SEQUENCE_TYPES_H
36
37 #include "DNA_listBase.h"
38
39 /* needed for sound support */
40 #include "DNA_sound_types.h"
41
42 struct Ipo;
43 struct Scene;
44
45 /* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */
46
47 typedef struct StripElem {
48         char name[80];
49         struct ImBuf *ibuf;
50         struct StripElem *se1, *se2, *se3;
51         short ok;
52         short pad;
53         int nr;
54 } StripElem;
55
56 typedef struct Strip {
57         struct Strip *next, *prev;
58         int rt, len, us, done;
59         StripElem *stripdata;
60         char dir[160];
61         int orx, ory;
62 } Strip;
63
64
65 typedef struct PluginSeq {
66         char name[256];
67         void *handle;
68
69         char *pname;
70
71         int vars, version;
72
73         void *varstr;
74         float *cfra;
75
76         float data[32];
77
78         void *instance_private_data;
79         void **current_private_data;
80
81         void (*doit)(void);
82
83         void (*callback)(void);
84 } PluginSeq;
85
86 /* The sequence structure is the basic struct used by any strip. each of the strips uses a different sequence structure.*/
87 /* WATCH IT: first part identical to ID (for use in ipo's) */
88
89 typedef struct Sequence {
90
91         struct Sequence *next, *prev, *newseq;
92         void *lib;
93         char name[24];
94
95         short flag, type;       /*flags bitmap (see below) and the type of sequence*/
96         int len;
97         int start, startofs, endofs;
98         int startstill, endstill;
99         int machine, depth;
100         int startdisp, enddisp; /*starting and ending points in the sequence*/
101         float mul, handsize;
102         int sfra;               /* starting frame according to the timeline of the scene */
103
104         Strip *strip;
105         StripElem *curelem;
106
107         struct Ipo *ipo;
108         struct Scene *scene;
109         struct anim *anim;
110         float facf0, facf1;
111
112         PluginSeq *plugin;
113
114         /* pointers for effects: */
115         struct Sequence *seq1, *seq2, *seq3;
116
117         /* meta */
118         ListBase seqbase;
119
120         struct bSound *sound;   /* the linked "bSound" object */
121         struct hdaudio *hdaudio; /* external hdaudio object */
122         float level, pan;       /* level in dB (0=full), pan -1..1 */
123         int curpos;             /* last sample position in audio_fill() */
124         float strobe;
125
126         void *effectdata;       /* Struct pointer for effect settings */
127
128         int anim_preseek;
129         int pad;
130 } Sequence;
131
132 typedef struct MetaStack {
133         struct MetaStack *next, *prev;
134         ListBase *oldbasep;
135         Sequence *parseq;
136 } MetaStack;
137
138 typedef struct Editing {
139         ListBase *seqbasep;
140         ListBase seqbase;
141         ListBase metastack;
142         short flag;
143         short pad;
144         int rt;
145 } Editing;
146
147 /* ************* Effect Variable Structs ********* */
148 typedef struct WipeVars {
149         float edgeWidth,angle;
150         short forward, wipetype;
151 } WipeVars;
152
153 typedef struct GlowVars {       
154         float fMini;    /*      Minimum intensity to trigger a glow */
155         float fClamp;
156         float fBoost;   /*      Amount to multiply glow intensity */
157     float dDist;        /*      Radius of glow blurring */
158         int     dQuality;
159         int     bNoComp;        /*      SHOW/HIDE glow buffer */
160 } GlowVars;
161
162 typedef struct TransformVars {
163         float ScalexIni;
164         float ScaleyIni;
165         float ScalexFin;
166         float ScaleyFin;
167         float xIni;
168         float xFin;
169         float yIni;
170         float yFin;
171         float rotIni;
172         float rotFin;
173         int percent;
174         int interpolation;
175 } TransformVars;
176
177 typedef struct SolidColorVars {
178         float col[3];
179         float pad;
180 } SolidColorVars;
181
182 typedef struct SpeedControlVars {
183         float * frameMap;
184         float globalSpeed;
185         int flags;
186         int length;
187         int pad;
188 } SpeedControlVars;
189
190 /* SpeedControlVars->flags */
191 #define SEQ_SPEED_INTEGRATE      1
192 #define SEQ_SPEED_BLEND          2
193 #define SEQ_SPEED_COMPRESS_IPO_Y 4
194
195 /* ***************** SEQUENCE ****************** */
196
197 /* seq->flag */
198 #define SEQ_LEFTSEL                             2
199 #define SEQ_RIGHTSEL                    4
200 #define SEQ_OVERLAP                             8
201 #define SEQ_FILTERY                             16
202 #define SEQ_MUTE                                32
203 #define SEQ_MAKE_PREMUL                 64
204 #define SEQ_REVERSE_FRAMES              128
205 #define SEQ_IPO_FRAME_LOCKED    256
206 #define SEQ_EFFECT_NOT_LOADED   512
207 #define SEQ_FLAG_DELETE                 1024
208
209 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */
210 #define SEQ_IMAGE               0
211 #define SEQ_META                1
212 #define SEQ_SCENE               2
213 #define SEQ_MOVIE               3
214 #define SEQ_RAM_SOUND           4
215 #define SEQ_HD_SOUND            5
216 #define SEQ_MOVIE_AND_HD_SOUND  6 /* helper for add_sequence */
217
218 #define SEQ_EFFECT              8
219 #define SEQ_CROSS               8
220 #define SEQ_ADD                 9
221 #define SEQ_SUB                 10
222 #define SEQ_ALPHAOVER   11
223 #define SEQ_ALPHAUNDER  12
224 #define SEQ_GAMCROSS    13
225 #define SEQ_MUL                 14
226 #define SEQ_OVERDROP    15
227 #define SEQ_PLUGIN              24
228 #define SEQ_WIPE                25
229 #define SEQ_GLOW                26
230 #define SEQ_TRANSFORM           27
231 #define SEQ_COLOR               28
232 #define SEQ_SPEED               29
233
234
235 #endif
236