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