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