own fix r34446, was incorrect, fixed properly now.
[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 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.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_SEQUENCE_TYPES_H
32 #define DNA_SEQUENCE_TYPES_H
33
34 #include "DNA_listBase.h"
35 #include "DNA_vec_types.h"
36
37 struct Ipo;
38 struct Scene;
39 struct bSound;
40
41 /* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */
42
43 typedef struct StripElem {
44         char name[80];
45         int orig_width, orig_height;
46 } StripElem;
47
48 typedef struct StripCrop {
49         int top;
50         int bottom;
51         int left;
52         int right;
53 } StripCrop;
54
55 typedef struct StripTransform {
56         int xofs;
57         int yofs;
58 } StripTransform;
59
60 typedef struct StripColorBalance {
61         float lift[3];
62         float gamma[3];
63         float gain[3];
64         int flag;
65         int pad;
66         // float exposure;
67         // float saturation;
68 } StripColorBalance;
69
70 typedef struct StripProxy {
71         char dir[160];
72         char file[80];
73         struct anim *anim;
74         short size;
75         short quality;
76         int pad;
77 } StripProxy;
78
79 typedef struct Strip {
80         struct Strip *next, *prev;
81         int rt, len, us, done;
82         int startstill, endstill;
83         StripElem *stripdata;
84         char dir[160];
85         StripProxy *proxy;
86         StripCrop *crop;
87         StripTransform *transform;
88         StripColorBalance *color_balance;
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]; /* SEQ_NAME_MAXSTR - name, set by default and needs to be unique, for RNA paths */
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 sat, pad;
129         float mul, handsize;
130                                         /* is sfra needed anymore? - it looks like its only used in one place */
131         int sfra;               /* starting frame according to the timeline of the scene. */
132         int anim_preseek;
133
134         Strip *strip;
135
136         struct Ipo *ipo;        // xxx depreceated... old animation system
137         struct Scene *scene;
138         struct Object *scene_camera; /* override scene camera */
139
140         struct anim *anim;
141         float effect_fader;
142         float speed_fader;
143
144         PluginSeq *plugin;
145
146         /* pointers for effects: */
147         struct Sequence *seq1, *seq2, *seq3;
148
149         ListBase seqbase;       /* list of strips for metastrips */
150
151         struct bSound *sound;   /* the linked "bSound" object */
152         void *scene_sound;
153         float volume;
154
155         float level, pan;       /* level in dB (0=full), pan -1..1 */
156         int scenenr;          /* for scene selection */
157         int multicam_source;  /* for multicam source selection */
158         float strobe;
159
160         void *effectdata;       /* Struct pointer for effect settings */
161
162         int anim_startofs;    /* only use part of animation file */
163         int anim_endofs;      /* is subtle different to startofs / endofs */
164
165         int blend_mode;
166         float blend_opacity;
167
168 } Sequence;
169
170 typedef struct MetaStack {
171         struct MetaStack *next, *prev;
172         ListBase *oldbasep;
173         Sequence *parseq;
174 } MetaStack;
175
176 typedef struct Editing {
177         ListBase *seqbasep; /* pointer to the current list of seq's being edited (can be within a meta strip) */
178         ListBase seqbase;       /* pointer to the top-most seq's */
179         ListBase metastack;
180         
181         /* Context vars, used to be static */
182         Sequence *act_seq;
183         char act_imagedir[256];
184         char act_sounddir[256];
185
186         int over_ofs, over_cfra;
187         int over_flag, pad;
188         rctf over_border;
189 } Editing;
190
191 /* ************* Effect Variable Structs ********* */
192 typedef struct WipeVars {
193         float edgeWidth,angle;
194         short forward, wipetype;
195 } WipeVars;
196
197 typedef struct GlowVars {       
198         float fMini;    /*      Minimum intensity to trigger a glow */
199         float fClamp;
200         float fBoost;   /*      Amount to multiply glow intensity */
201         float dDist;    /*      Radius of glow blurring */
202         int     dQuality;
203         int     bNoComp;        /*      SHOW/HIDE glow buffer */
204 } GlowVars;
205
206 typedef struct TransformVars {
207         float ScalexIni;
208         float ScaleyIni;
209         float ScalexFin; /* deprecated - old transform strip */
210         float ScaleyFin; /* deprecated - old transform strip */
211         float xIni;
212         float xFin; /* deprecated - old transform strip */
213         float yIni;
214         float yFin; /* deprecated - old transform strip */
215         float rotIni;
216         float rotFin; /* deprecated - old transform strip */
217         int percent;
218         int interpolation;
219         int uniform_scale; /* preserve aspect/ratio when scaling */
220 } TransformVars;
221
222 typedef struct SolidColorVars {
223         float col[3];
224         float pad;
225 } SolidColorVars;
226
227 typedef struct SpeedControlVars {
228         float * frameMap;
229         float globalSpeed;
230         int flags;
231         int length;
232         int lastValidFrame;
233 } SpeedControlVars;
234
235 #define SELECT 1
236
237 /* Editor->over_flag */
238 #define SEQ_EDIT_OVERLAY_SHOW                   1
239 #define SEQ_EDIT_OVERLAY_ABS                    2
240
241 #define SEQ_STRIP_OFSBOTTOM             0.2f
242 #define SEQ_STRIP_OFSTOP                0.8f
243
244 /* SpeedControlVars->flags */
245 #define SEQ_SPEED_INTEGRATE      1
246 #define SEQ_SPEED_BLEND          2
247 #define SEQ_SPEED_COMPRESS_IPO_Y 4
248
249 /* ***************** SEQUENCE ****************** */
250 #define SEQ_NAME_MAXSTR                 24
251
252 /* seq->flag */
253 #define SEQ_LEFTSEL                             2
254 #define SEQ_RIGHTSEL                    4
255 #define SEQ_OVERLAP                             8
256 #define SEQ_FILTERY                             16
257 #define SEQ_MUTE                                32
258 #define SEQ_MAKE_PREMUL                 64
259 #define SEQ_REVERSE_FRAMES              128
260 #define SEQ_IPO_FRAME_LOCKED    256
261 #define SEQ_EFFECT_NOT_LOADED   512
262 #define SEQ_FLAG_DELETE                 1024
263 #define SEQ_FLIPX                               2048
264 #define SEQ_FLIPY                               4096
265 #define SEQ_MAKE_FLOAT                          8192
266 #define SEQ_LOCK                                16384
267 #define SEQ_USE_PROXY                           32768
268 #define SEQ_USE_TRANSFORM                       65536
269 #define SEQ_USE_CROP                           131072
270 #define SEQ_USE_COLOR_BALANCE                  262144
271 #define SEQ_USE_PROXY_CUSTOM_DIR               524288
272 #define SEQ_USE_PROXY_CUSTOM_FILE             2097152
273 #define SEQ_USE_EFFECT_DEFAULT_FADE           4194304
274
275 /* convenience define for all selection flags */
276 #define SEQ_ALLSEL      (SELECT+SEQ_LEFTSEL+SEQ_RIGHTSEL)
277
278 /* deprecated, dont use a flag anymore*/
279 /*#define SEQ_ACTIVE                            1048576*/
280
281 #define SEQ_COLOR_BALANCE_INVERSE_GAIN 1
282 #define SEQ_COLOR_BALANCE_INVERSE_GAMMA 2
283 #define SEQ_COLOR_BALANCE_INVERSE_LIFT 4
284
285 /* seq->type WATCH IT: SEQ_EFFECT BIT is used to determine if this is an effect strip!!! */
286 #define SEQ_IMAGE               0
287 #define SEQ_META                1
288 #define SEQ_SCENE               2
289 #define SEQ_MOVIE               3
290 #define SEQ_RAM_SOUND           4
291 #define SEQ_HD_SOUND            5
292 #define SEQ_SOUND               4
293
294 #define SEQ_EFFECT              8
295 #define SEQ_CROSS               8
296 #define SEQ_ADD                 9
297 #define SEQ_SUB                 10
298 #define SEQ_ALPHAOVER   11
299 #define SEQ_ALPHAUNDER  12
300 #define SEQ_GAMCROSS    13
301 #define SEQ_MUL                 14
302 #define SEQ_OVERDROP    15
303 #define SEQ_PLUGIN              24
304 #define SEQ_WIPE                25
305 #define SEQ_GLOW                26
306 #define SEQ_TRANSFORM           27
307 #define SEQ_COLOR               28
308 #define SEQ_SPEED               29
309 #define SEQ_MULTICAM            30
310 #define SEQ_EFFECT_MAX          30
311
312 #define STRIPELEM_FAILED       0
313 #define STRIPELEM_OK           1
314
315 #define STRIPELEM_PREVIEW_DONE  1
316
317 #define SEQ_BLEND_REPLACE      0
318 /* all other BLEND_MODEs are simple SEQ_EFFECT ids and therefore identical
319    to the table above. (Only those effects that handle _exactly_ two inputs,
320    otherwise, you can't really blend, right :) !)
321 */
322
323
324 #define SEQ_HAS_PATH(_seq) (ELEM5((_seq)->type, SEQ_MOVIE, SEQ_IMAGE, SEQ_SOUND, SEQ_RAM_SOUND, SEQ_HD_SOUND))
325
326 #endif
327