Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_movieclip_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2011 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): Blender Foundation,
24  *                 Sergey Sharybin
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 /** \file DNA_movieclip_types.h
30  *  \ingroup DNA
31  *  \since may-2011
32  *  \author Sergey Sharybin
33  */
34
35 #ifndef __DNA_MOVIECLIP_TYPES_H__
36 #define __DNA_MOVIECLIP_TYPES_H__
37
38 #include "DNA_ID.h"
39 #include "DNA_tracking_types.h"
40 #include "DNA_color_types.h"  /* for color management */
41
42 struct anim;
43 struct AnimData;
44 struct bGPdata;
45 struct ImBuf;
46 struct MovieClipProxy;
47 struct MovieTrackingTrack;
48 struct MovieTrackingMarker;
49
50 typedef struct MovieClipUser {
51         /** Current frame number. */
52         int framenr;
53         /** Proxy render size. */
54         short render_size, render_flag;
55 } MovieClipUser;
56
57 typedef struct MovieClipProxy {
58         /** 768=FILE_MAXDIR custom directory for index and proxy files (defaults to BL_proxy). */
59         char dir[768];
60
61         /** Time code in use. */
62         short tc;
63         /** Proxy build quality. */
64         short quality;
65         /** Size flags (see below) of all proxies to build. */
66         short build_size_flag;
67         /** Time code flags (see below) of all tc indices to build. */
68         short build_tc_flag;
69 } MovieClipProxy;
70
71 typedef struct MovieClip {
72         ID id;
73         /** Animation data (must be immediately after id for utilities to use it). */
74         struct AnimData *adt;
75
76         /** File path, 1024 = FILE_MAX. */
77         char name[1024];
78
79         /** Sequence or movie. */
80         int source;
81         /** Last accessed frame number. */
82         int lastframe;
83         /** Size of last accessed frame. */
84         int lastsize[2];
85
86         /** Display aspect. */
87         float aspx, aspy;
88
89         /** Movie source data. */
90         struct anim *anim;
91         /** Cache for different stuff, not in file. */
92         struct MovieClipCache *cache;
93         /** Grease pencil data. */
94         struct bGPdata *gpd;
95
96         /** Data for SfM tracking. */
97         struct MovieTracking tracking;
98         /**
99          * Context of tracking job used to synchronize data
100          * like framenumber in SpaceClip clip user.
101          */
102         void *tracking_context;
103
104         /** Proxy to clip data. */
105         struct MovieClipProxy proxy;
106         int flag;
107
108         /** Length of movie. */
109         int len;
110
111         /**
112          * Scene frame number footage starts playing at affects all data
113          * which is associated with a clip such as motion tracking,
114          * camera reconstruciton and so.
115          */
116         int start_frame;
117         /**
118          * Offset which is adding to a file number when reading frame from a file.
119          * affects only a way how scene frame is mapping to a file name and not
120          * touches other data associated with a clip. */
121         int frame_offset;
122
123         /* color management */
124         ColorManagedColorspaceSettings colorspace_settings;
125 } MovieClip;
126
127 typedef struct MovieClipScopes {
128         /** 1 means scopes are ok and recalculation is unneeded. */
129         short ok;
130         /** Whether track's mask should be applied on preview. */
131         short use_track_mask;
132         /** Height of track preview widget. */
133         int track_preview_height;
134         /** Width and height of frame for which scopes are calculated. */
135         int frame_width, frame_height;
136         /** Undistorted position of marker used for pattern sampling. */
137         struct MovieTrackingMarker undist_marker;
138         /** Search area of a track. */
139         struct ImBuf *track_search;
140         /** #ImBuf displayed in track preview. */
141         struct ImBuf *track_preview;
142         /** Sub-pizel position of marker in track ImBuf. */
143         float track_pos[2];
144         /** Active track is disabled, special notifier should be drawn. */
145         short track_disabled;
146         /** Active track is locked, no transformation should be allowed. */
147         short track_locked;
148         /** Frame number scopes are created for. */
149         int framenr;
150         /** Track scopes are created for. */
151         struct MovieTrackingTrack *track;
152         /** Marker scopes are created for. */
153         struct MovieTrackingMarker *marker;
154         /** Scale used for sliding from previewe area. */
155         float slide_scale[2];
156 } MovieClipScopes;
157
158 /* MovieClipProxy->build_size_flag */
159 enum {
160         MCLIP_PROXY_SIZE_25              = (1 << 0),
161         MCLIP_PROXY_SIZE_50              = (1 << 1),
162         MCLIP_PROXY_SIZE_75              = (1 << 2),
163         MCLIP_PROXY_SIZE_100             = (1 << 3),
164         MCLIP_PROXY_UNDISTORTED_SIZE_25  = (1 << 4),
165         MCLIP_PROXY_UNDISTORTED_SIZE_50  = (1 << 5),
166         MCLIP_PROXY_UNDISTORTED_SIZE_75  = (1 << 6),
167         MCLIP_PROXY_UNDISTORTED_SIZE_100 = (1 << 7),
168 };
169
170 /* MovieClip->source */
171 enum {
172         MCLIP_SRC_SEQUENCE = 1,
173         MCLIP_SRC_MOVIE    = 2,
174 };
175
176 /* MovieClip->selection types */
177 enum {
178         MCLIP_SEL_NONE  = 0,
179         MCLIP_SEL_TRACK = 1,
180 };
181
182 /* MovieClip->flag */
183 enum {
184         MCLIP_USE_PROXY               = (1 << 0),
185         MCLIP_USE_PROXY_CUSTOM_DIR    = (1 << 1),
186         /* MCLIP_CUSTOM_START_FRAME    = (1<<2), */ /* UNUSED */
187         MCLIP_DATA_EXPAND             = (1 << 3),
188
189         MCLIP_TIMECODE_FLAGS          =  (MCLIP_USE_PROXY | MCLIP_USE_PROXY_CUSTOM_DIR),
190 };
191
192 /* MovieClip->render_size */
193 enum {
194         MCLIP_PROXY_RENDER_SIZE_FULL = 0,
195         MCLIP_PROXY_RENDER_SIZE_25   = 1,
196         MCLIP_PROXY_RENDER_SIZE_50   = 2,
197         MCLIP_PROXY_RENDER_SIZE_75   = 3,
198         MCLIP_PROXY_RENDER_SIZE_100  = 4,
199 };
200
201 /* MovieClip->render_flag */
202 enum {
203         MCLIP_PROXY_RENDER_UNDISTORT = 1,
204 };
205
206 #endif