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