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