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