Planar tracking support for motion tracking
[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
41 struct anim;
42 struct AnimData;
43 struct bGPdata;
44 struct ImBuf;
45 struct MovieClipProxy;
46 struct MovieTrackingTrack;
47 struct MovieTrackingMarker;
48
49 typedef struct MovieClipUser {
50         int framenr;    /* current frame number */
51         short render_size, render_flag;         /* proxy render size */
52 } MovieClipUser;
53
54 typedef struct MovieClipProxy {
55         char dir[768];                  /* 768=FILE_MAXDIR custom directory for index and proxy files (defaults to BL_proxy) */
56
57         short tc;                               /* time code in use */
58         short quality;                  /* proxy build quality */
59         short build_size_flag;  /* size flags (see below) of all proxies to build */
60         short build_tc_flag;    /* time code flags (see below) of all tc indices to build */
61 } MovieClipProxy;
62
63 typedef struct MovieClip {
64         ID id;
65         struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */
66
67         char name[1024];                /* file path, 1024 = FILE_MAX */
68
69         int source;                     /* sequence or movie */
70         int lastframe;          /* last accessed frame number */
71         int lastsize[2];        /* size of last accessed frame */
72
73         float aspx, aspy;       /* display aspect */
74
75         struct anim *anim;      /* movie source data */
76         struct MovieClipCache *cache;           /* cache for different stuff, not in file */
77         struct bGPdata *gpd;                            /* grease pencil data */
78
79         struct MovieTracking tracking;          /* data for SfM tracking */
80         void *tracking_context;                         /* context of tracking job
81                                                                                  * used to synchronize data like framenumber
82                                                                                  * in SpaceClip clip user */
83
84         struct MovieClipProxy proxy;            /* proxy to clip data */
85         int flag;
86
87         int len;        /* length of movie */
88
89         int start_frame, pad;
90 } MovieClip;
91
92 typedef struct MovieClipScopes {
93         int ok;                                                 /* 1 means scopes are ok and recalculation is unneeded */
94         int track_preview_height;               /* height of track preview widget */
95         int frame_width, frame_height;          /* width and height of frame for which scopes are calculated */
96         struct MovieTrackingMarker undist_marker;       /* undistorted position of marker used for pattern sampling */
97         struct ImBuf *track_search;     /* search area of a track */
98         struct ImBuf *track_preview;    /* ImBuf displayed in track preview */
99         float track_pos[2];                             /* sub-pizel position of marker in track ImBuf */
100         short track_disabled;                   /* active track is disabled, special notifier should be drawn */
101         char pad[2];
102         int framenr;                                    /* frame number scopes are created for */
103         struct MovieTrackingTrack *track;       /* track scopes are created for */
104         struct MovieTrackingMarker *marker;     /* marker scopes are created for */
105         float slide_scale[2];                   /* scale used for sliding from previewe area */
106 } MovieClipScopes;
107
108 /* MovieClipProxy->build_size_flag */
109 #define MCLIP_PROXY_SIZE_25             (1<<0)
110 #define MCLIP_PROXY_SIZE_50             (1<<1)
111 #define MCLIP_PROXY_SIZE_75             (1<<2)
112 #define MCLIP_PROXY_SIZE_100    (1<<3)
113 #define MCLIP_PROXY_UNDISTORTED_SIZE_25         (1<<4)
114 #define MCLIP_PROXY_UNDISTORTED_SIZE_50         (1<<5)
115 #define MCLIP_PROXY_UNDISTORTED_SIZE_75         (1<<6)
116 #define MCLIP_PROXY_UNDISTORTED_SIZE_100        (1<<7)
117
118 /* MovieClip->source */
119 #define MCLIP_SRC_SEQUENCE      1
120 #define MCLIP_SRC_MOVIE         2
121
122 /* MovieClip->selection types */
123 #define MCLIP_SEL_NONE          0
124 #define MCLIP_SEL_TRACK         1
125
126 /* MovieClip->flag */
127 #define MCLIP_USE_PROXY                                 (1<<0)
128 #define MCLIP_USE_PROXY_CUSTOM_DIR              (1<<1)
129 /*#define MCLIP_CUSTOM_START_FRAME              (1<<2)*/ /* UNUSED */
130
131 #define MCLIP_TIMECODE_FLAGS                    (MCLIP_USE_PROXY|MCLIP_USE_PROXY_CUSTOM_DIR)
132
133 /* MovieClip->render_size */
134 #define MCLIP_PROXY_RENDER_SIZE_FULL    0
135 #define MCLIP_PROXY_RENDER_SIZE_25              1
136 #define MCLIP_PROXY_RENDER_SIZE_50              2
137 #define MCLIP_PROXY_RENDER_SIZE_75              3
138 #define MCLIP_PROXY_RENDER_SIZE_100             4
139
140 /* MovieClip->render_flag */
141 #define MCLIP_PROXY_RENDER_UNDISTORT    1
142
143 #endif