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