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