Support for per-track Grease Pencil datablocks for motion tracking
[blender.git] / source / blender / makesdna / DNA_tracking_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_tracking_types.h
30  *  \ingroup DNA
31  *  \since may-2011
32  *  \author Sergey Sharybin
33  */
34
35 #ifndef __DNA_TRACKING_TYPES_H__
36 #define __DNA_TRACKING_TYPES_H__
37
38 #include "DNA_listBase.h"
39
40 /* match-moving data */
41
42 struct bGPdata;
43 struct ImBuf;
44 struct MovieReconstructedCamera;
45 struct MovieTrackingCamera;
46 struct MovieTrackingBundle;
47 struct MovieTrackingMarker;
48 struct MovieTrackingTrack;
49 struct MovieTracking;
50
51 typedef struct MovieReconstructedCamera {
52         int framenr;
53         float error;
54         float mat[4][4];
55 } MovieReconstructedCamera;
56
57 typedef struct MovieTrackingCamera {
58         void *intrinsics;       /* intrinsics handle */
59
60         float sensor_width;     /* width of CCD sensor */
61         float pixel_aspect;     /* pixel aspect ratio */
62         float pad;
63         float focal;            /* focal length */
64         short units;            /* units of focal length user is working with */
65         short pad1;
66         float principal[2];     /* principal point */
67         float k1, k2, k3;       /* radial distortion */
68 } MovieTrackingCamera;
69
70 typedef struct MovieTrackingMarker {
71         float pos[2];   /* 2d position of marker on frame (in unified 0..1 space) */
72         int framenr;    /* number of frame marker is associated with */
73         int flag;               /* Marker's flag (alive, ...) */
74 } MovieTrackingMarker;
75
76 typedef struct MovieTrackingTrack {
77         struct MovieTrackingTrack *next, *prev;
78
79         char name[64];  /* MAX_NAME */
80
81         /* ** setings ** */
82         float pat_min[2], pat_max[2];           /* positions of left-bottom and right-top corners of pattern (in unified 0..1 space) */
83         float search_min[2], search_max[2];     /* positions of left-bottom and right-top corners of search area (in unified 0..1 space) */
84         float offset[2];                                        /* offset to "parenting" point */
85
86         /* ** track ** */
87         int markersnr;                                  /* count of markers in track */
88         int last_marker;                                /* most recently used marker */
89         MovieTrackingMarker *markers;   /* markers in track */
90
91         /* ** reconstruction data ** */
92         float bundle_pos[3];                    /* reconstructed position */
93         float error;                                    /* average track reprojection error */
94
95         /* ** UI editing ** */
96         int flag, pat_flag, search_flag;        /* flags (selection, ...) */
97         float color[3];                                         /* custom color for track */
98
99         /* tracking algorithm to use; can be KLT or SAD */
100         short frames_limit;             /* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
101         short margin;                   /* margin from frame boundaries */
102         short pattern_match;    /* re-adjust every N frames */
103
104         short tracker;                  /* tracking algorithm used for this track */
105
106         /* ** KLT tracker settings ** */
107         short pyramid_levels, pad2;             /* number of pyramid levels to use for KLT tracking */
108
109         /* ** SAD tracker settings ** */
110         float minimum_correlation;                      /* minimal correlation which is still treated as successful tracking */
111
112         struct bGPdata *gpd;            /* grease-pencil data */
113 } MovieTrackingTrack;
114
115 typedef struct MovieTrackingSettings {
116         int flag;
117
118         /* ** default tracker settings */
119         short default_tracker;                          /* tracking algorithm used by default */
120         short default_pyramid_levels;           /* number of pyramid levels to use for KLT tracking */
121         float default_minimum_correlation;      /* minimal correlation which is still treated as successful tracking */
122         short default_pattern_size;                     /* size of pattern area for new tracks */
123         short default_search_size;                      /* size of search area for new tracks */
124         short default_frames_limit;                     /* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
125         short default_margin;                           /* margin from frame boundaries */
126         short default_pattern_match;            /* re-adjust every N frames */
127         short default_flag;                                     /* default flags like color channels used by default */
128
129         short motion_flag;              /* flags describes motion type */
130
131         /* ** common tracker settings ** */
132         short speed;                    /* speed of tracking */
133
134         /* ** reconstruction settings ** */
135         int keyframe1, keyframe2;       /* two keyframes for reconstrution initialization */
136
137         /* which camera intrinsics to refine. uses on the REFINE_* flags */
138         short refine_camera_intrinsics, pad2;
139
140         /* ** tool settings ** */
141
142         /* set scale */
143         float dist;                                     /* distance between two bundles used for scene scaling */
144
145         /* cleanup */
146         int clean_frames, clean_action;
147         float clean_error;
148
149         /* set object scale */
150         float object_distance;          /* distance between two bundles used for object scaling */
151
152         int pad3;
153 } MovieTrackingSettings;
154
155 typedef struct MovieTrackingStabilization {
156         int flag;
157         int tot_track, act_track;               /* total number and index of active track in list */
158
159         /* 2d stabilization */
160         float maxscale;                 /* max auto-scale factor */
161         MovieTrackingTrack *rot_track;  /* track used to stabilize rotation */
162
163         float locinf, scaleinf, rotinf; /* influence on location, scale and rotation */
164
165         int filter;             /* filter used for pixel interpolation */
166
167         /* some pre-computing run-time variables */
168         int ok;                                         /* are precomputed values and scaled buf relevant? */
169         float scale;                            /* autoscale factor */
170
171         struct ImBuf *scaleibuf;        /* currently scaled ibuf */
172 } MovieTrackingStabilization;
173
174 typedef struct MovieTrackingReconstruction {
175         int flag;
176
177         float error;            /* average error of reconstruction */
178
179         int last_camera;                /* most recently used camera */
180         int camnr;                              /* number of reconstructed cameras */
181         struct MovieReconstructedCamera *cameras;       /* reconstructed cameras */
182 } MovieTrackingReconstruction;
183
184 typedef struct MovieTrackingObject {
185         struct MovieTrackingObject *next, *prev;
186
187         char name[64];                  /* Name of tracking object, MAX_NAME */
188         int flag;
189         float scale;                    /* scale of object solution in amera space */
190
191         ListBase tracks;                /* list of tracks use to tracking this object */
192         MovieTrackingReconstruction reconstruction;     /* reconstruction data for this object */
193 } MovieTrackingObject;
194
195 typedef struct MovieTrackingStats {
196         char message[256];
197 } MovieTrackingStats;
198
199 typedef struct MovieTrackingDopesheetChannel {
200         struct MovieTrackingDopesheetChannel *next, *prev;
201
202         MovieTrackingTrack *track;      /* motion track for which channel is created */
203         int pad;
204
205         int tot_segment;                /* total number of segments */
206         int *segments;                  /* tracked segments */
207         int max_segment, total_frames;  /* longest segment length and total number of tracked frames */
208 } MovieTrackingDopesheetChannel;
209
210 typedef struct MovieTrackingDopesheet {
211         int ok, pad;                            /* flag if dopesheet information is still relevant */
212
213         ListBase channels;
214         int tot_channel;
215
216         short sort_method;                      /* method to be used to sort tracks */
217         short sort_inverse;                     /* order of tracks is inverted */
218 } MovieTrackingDopesheet;
219
220 typedef struct MovieTracking {
221         MovieTrackingSettings settings; /* different tracking-related settings */
222         MovieTrackingCamera camera;             /* camera intrinsics */
223         ListBase tracks;                                /* list of tracks used for camera object */
224         MovieTrackingReconstruction reconstruction;     /* reconstruction data for camera object */
225         MovieTrackingStabilization stabilization;       /* stabilization data */
226         MovieTrackingTrack *act_track;          /* active track */
227
228         ListBase objects;
229         int objectnr, tot_object;               /* index of active object and total number of objects */
230
231         MovieTrackingStats *stats;              /* statistics displaying in clip editor */
232
233         MovieTrackingDopesheet dopesheet;       /* dopesheet data */
234 } MovieTracking;
235
236 /* MovieTrackingCamera->units */
237 enum {
238         CAMERA_UNITS_PX = 0,
239         CAMERA_UNITS_MM
240 };
241
242 /* MovieTrackingMarker->flag */
243 #define MARKER_DISABLED (1<<0)
244 #define MARKER_TRACKED  (1<<1)
245 #define MARKER_GRAPH_SEL_X (1<<2)
246 #define MARKER_GRAPH_SEL_Y (1<<3)
247 #define MARKER_GRAPH_SEL        (MARKER_GRAPH_SEL_X|MARKER_GRAPH_SEL_Y)
248
249 /* MovieTrackingTrack->flag */
250 #define TRACK_HAS_BUNDLE        (1<<1)
251 #define TRACK_DISABLE_RED       (1<<2)
252 #define TRACK_DISABLE_GREEN     (1<<3)
253 #define TRACK_DISABLE_BLUE      (1<<4)
254 #define TRACK_HIDDEN            (1<<5)
255 #define TRACK_LOCKED            (1<<6)
256 #define TRACK_CUSTOMCOLOR       (1<<7)
257 #define TRACK_USE_2D_STAB       (1<<8)
258 #define TRACK_PREVIEW_GRAYSCALE (1<<9)
259 #define TRACK_DOPE_SEL          (1<<10)
260
261 /* MovieTrackingTrack->tracker */
262 #define TRACKER_KLT             0
263 #define TRACKER_SAD             1
264 #define TRACKER_HYBRID          2
265
266 /* MovieTrackingTrack->adjframes */
267 #define TRACK_MATCH_KEYFRAME            0
268 #define TRACK_MATCH_PREVFRAME           1
269
270 /* MovieTrackingSettings->flag */
271 #define TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED (1<<0)
272
273 /* MovieTrackingSettings->motion_flag */
274 #define TRACKING_MOTION_TRIPOD          (1<<0)
275
276 #define TRACKING_MOTION_MODAL           (TRACKING_MOTION_TRIPOD)
277
278 /* MovieTrackingSettings->speed */
279 #define TRACKING_SPEED_FASTEST          0
280 #define TRACKING_SPEED_REALTIME         1
281 #define TRACKING_SPEED_HALF                     2
282 #define TRACKING_SPEED_QUARTER          4
283 #define TRACKING_SPEED_DOUBLE           5
284
285 /* MovieTrackingSettings->refine_camera_intrinsics */
286 #define REFINE_FOCAL_LENGTH                     (1<<0)
287 #define REFINE_PRINCIPAL_POINT          (1<<1)
288 #define REFINE_RADIAL_DISTORTION_K1     (1<<2)
289 #define REFINE_RADIAL_DISTORTION_K2     (1<<4)
290
291 /* MovieTrackingStrabilization->flag */
292 #define TRACKING_2D_STABILIZATION       (1<<0)
293 #define TRACKING_AUTOSCALE                      (1<<1)
294 #define TRACKING_STABILIZE_ROTATION     (1<<2)
295
296 /* MovieTrackingStrabilization->filter */
297 #define TRACKING_FILTER_NEAREAST        0
298 #define TRACKING_FILTER_BILINEAR        1
299 #define TRACKING_FILTER_BICUBIC         2
300
301 /* MovieTrackingReconstruction->flag */
302 #define TRACKING_RECONSTRUCTED  (1<<0)
303
304 /* MovieTrackingObject->flag */
305 #define TRACKING_OBJECT_CAMERA          (1<<0)
306
307 #define TRACKING_CLEAN_SELECT                   0
308 #define TRACKING_CLEAN_DELETE_TRACK             1
309 #define TRACKING_CLEAN_DELETE_SEGMENT   2
310
311 #endif