Two bugfixes:
[blender.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 } StripElem;
50
51 typedef struct TStripElem {
52         struct ImBuf *ibuf;
53         struct ImBuf *ibuf_comp;
54         struct TStripElem *se1, *se2, *se3;
55         short ok;
56         short pad;
57         int nr;
58 } TStripElem;
59
60 typedef struct StripCrop {
61         int top;
62         int bottom;
63         int left;
64         int right;
65 } StripCrop;
66
67 typedef struct StripTransform {
68         int xofs;
69         int yofs;
70 } StripTransform;
71
72 typedef struct StripProxy {
73         char dir[160];
74         int format;
75         int width;
76         int height;
77 } StripProxy;
78
79 typedef struct Strip {
80         struct Strip *next, *prev;
81         int rt, len, us, done;
82         StripElem *stripdata;
83         char dir[160];
84         int orx, ory;
85         StripCrop *crop;
86         StripTransform *transform;
87         StripProxy *proxy;
88         TStripElem *tstripdata;
89 } Strip;
90
91
92 typedef struct PluginSeq {
93         char name[256];
94         void *handle;
95
96         char *pname;
97
98         int vars, version;
99
100         void *varstr;
101         float *cfra;
102
103         float data[32];
104
105         void *instance_private_data;
106         void **current_private_data;
107
108         void (*doit)(void);
109
110         void (*callback)(void);
111 } PluginSeq;
112
113 /* The sequence structure is the basic struct used by any strip. each of the strips uses a different sequence structure.*/
114 /* WATCH IT: first part identical to ID (for use in ipo's) */
115
116 typedef struct Sequence {
117         struct Sequence *next, *prev;
118         void *tmp; /* tmp var for copying, and tagging for linked selection */
119         void *lib; /* needed (to be like ipo), else it will raise libdata warnings, this should never be used */
120         char name[24]; /* name, not set by default and dosnt need to be unique as with ID's */
121
122         int flag, type; /*flags bitmap (see below) and the type of sequence*/
123         int len; /* the length of the contense of this strip - before handles are applied */
124         int start, startofs, endofs;
125         int startstill, endstill;
126         int machine, depth; /*machine - the strip channel, depth - the depth in the sequence when dealing with metastrips */
127         int startdisp, enddisp; /*starting and ending points in the sequence*/
128         float mul, handsize;
129                                         /* is sfra needed anymore? - it looks like its only used in one place */
130         int sfra;               /* starting frame according to the timeline of the scene. */
131         int anim_preseek;
132
133         Strip *strip;
134
135         struct Ipo *ipo;
136         struct Scene *scene;
137         struct anim *anim;
138         float facf0, facf1;
139
140         PluginSeq *plugin;
141
142         /* pointers for effects: */
143         struct Sequence *seq1, *seq2, *seq3;
144
145         ListBase seqbase;       /* list of strips for metastrips */
146
147         struct bSound *sound;   /* the linked "bSound" object */
148         struct hdaudio *hdaudio; /* external hdaudio object */
149         float level, pan;       /* level in dB (0=full), pan -1..1 */
150         int curpos;             /* last sample position in audio_fill() */
151         float strobe;
152
153         void *effectdata;       /* Struct pointer for effect settings */
154
155         int anim_startofs;    /* only use part of animation file */
156         int anim_endofs;      /* is subtle different to startofs / endofs */
157
158         int blend_mode;
159         float blend_opacity;
160 } Sequence;
161
162 typedef struct MetaStack {
163         struct MetaStack *next, *prev;
164         ListBase *oldbasep;
165         Sequence *parseq;
166 } MetaStack;
167
168 typedef struct Editing {
169         ListBase *seqbasep;
170         ListBase seqbase;
171         ListBase metastack;
172         short flag;
173         short pad;
174         int rt;
175 } Editing;
176
177 /* ************* Effect Variable Structs ********* */
178 typedef struct WipeVars {
179         float edgeWidth,angle;
180         short forward, wipetype;
181 } WipeVars;
182
183 typedef struct GlowVars {       
184         float fMini;    /*      Minimum intensity to trigger a glow */
185         float fClamp;
186         float fBoost;   /*      Amount to multiply glow intensity */
187     float dDist;        /*      Radius of glow blurring */
188         int     dQuality;
189         int     bNoComp;        /*      SHOW/HIDE glow buffer */
190 } GlowVars;
191
192 typedef struct TransformVars {
193         float ScalexIni;
194         float ScaleyIni;
195         float ScalexFin;
196         float ScaleyFin;
197         float xIni;
198         float xFin;
199         float yIni;
200         float yFin;
201         float rotIni;
202         float rotFin;
203         int percent;
204         int interpolation;
205 } TransformVars;
206
207 typedef struct SolidColorVars {
208         float col[3];
209         float pad;
210 } SolidColorVars;
211
212 typedef struct SpeedControlVars {
213         float * frameMap;
214         float globalSpeed;
215         int flags;
216         int length;
217         int lastValidFrame;
218 } SpeedControlVars;
219
220 /* SpeedControlVars->flags */
221 #define SEQ_SPEED_INTEGRATE      1
222 #define SEQ_SPEED_BLEND          2
223 #define SEQ_SPEED_COMPRESS_IPO_Y 4
224
225 /* ***************** SEQUENCE ****************** */
226
227 /* seq->flag */
228 #define SEQ_LEFTSEL                             2
229 #define SEQ_RIGHTSEL                    4
230 #define SEQ_OVERLAP                             8
231 #define SEQ_FILTERY                             16
232 #define SEQ_MUTE                                32
233 #define SEQ_MAKE_PREMUL                 64
234 #define SEQ_REVERSE_FRAMES              128
235 #define SEQ_IPO_FRAME_LOCKED    256
236 #define SEQ_EFFECT_NOT_LOADED   512
237 #define SEQ_FLAG_DELETE                 1024
238 #define SEQ_FLIPX                               2048
239 #define SEQ_FLIPY                               4096
240 #define SEQ_MAKE_FLOAT                          8192
241 #define SEQ_LOCK                                16384
242 #define SEQ_USE_PROXY                           32768
243 #define SEQ_USE_TRANSFORM                       65536
244 #define SEQ_USE_CROP                           131072
245
246
247 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */
248 #define SEQ_IMAGE               0
249 #define SEQ_META                1
250 #define SEQ_SCENE               2
251 #define SEQ_MOVIE               3
252 #define SEQ_RAM_SOUND           4
253 #define SEQ_HD_SOUND            5
254 #define SEQ_MOVIE_AND_HD_SOUND  6 /* helper for add_sequence */
255
256 #define SEQ_EFFECT              8
257 #define SEQ_CROSS               8
258 #define SEQ_ADD                 9
259 #define SEQ_SUB                 10
260 #define SEQ_ALPHAOVER   11
261 #define SEQ_ALPHAUNDER  12
262 #define SEQ_GAMCROSS    13
263 #define SEQ_MUL                 14
264 #define SEQ_OVERDROP    15
265 #define SEQ_PLUGIN              24
266 #define SEQ_WIPE                25
267 #define SEQ_GLOW                26
268 #define SEQ_TRANSFORM           27
269 #define SEQ_COLOR               28
270 #define SEQ_SPEED               29
271 #define SEQ_EFFECT_MAX          29
272
273 #define STRIPELEM_FAILED       0
274 #define STRIPELEM_OK           1
275 #define STRIPELEM_META         2
276
277 #define SEQ_BLEND_REPLACE      0
278 /* all other BLEND_MODEs are simple SEQ_EFFECT ids and therefore identical
279    to the table above. (Only those effects that handle _exactly_ two inputs,
280    otherwise, you can't really blend, right :) !)
281 */
282
283 #endif
284