Added frame offset slider to clip datablocks
[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;    /* scene frame number footage starts playing at */
90                             /* affects all data which is associated with a clip */
91                             /* such as motion tracking, camera reconstruciton and so */
92
93         int frame_offset;   /* offset which is adding to a file number when reading frame */
94                             /* from a file. affects only a way how scene frame is mapping */
95                             /* to a file name and not touches other data associated with */
96                             /* a clip */
97 } MovieClip;
98
99 typedef struct MovieClipScopes {
100         short ok;                       /* 1 means scopes are ok and recalculation is unneeded */
101         short use_track_mask;           /* whether track's mask should be applied on preview */
102         int track_preview_height;       /* height of track preview widget */
103         int frame_width, frame_height;  /* width and height of frame for which scopes are calculated */
104         struct MovieTrackingMarker undist_marker;   /* undistorted position of marker used for pattern sampling */
105         struct ImBuf *track_search;     /* search area of a track */
106         struct ImBuf *track_preview;    /* ImBuf displayed in track preview */
107         float track_pos[2];             /* sub-pizel position of marker in track ImBuf */
108         short track_disabled;           /* active track is disabled, special notifier should be drawn */
109         short track_locked;             /* active track is locked, no transformation should be allowed */
110         int framenr;                    /* frame number scopes are created for */
111         struct MovieTrackingTrack *track;   /* track scopes are created for */
112         struct MovieTrackingMarker *marker; /* marker scopes are created for */
113         float slide_scale[2];           /* scale used for sliding from previewe area */
114 } MovieClipScopes;
115
116 /* MovieClipProxy->build_size_flag */
117 #define MCLIP_PROXY_SIZE_25     (1 << 0)
118 #define MCLIP_PROXY_SIZE_50     (1 << 1)
119 #define MCLIP_PROXY_SIZE_75     (1 << 2)
120 #define MCLIP_PROXY_SIZE_100    (1 << 3)
121 #define MCLIP_PROXY_UNDISTORTED_SIZE_25     (1 << 4)
122 #define MCLIP_PROXY_UNDISTORTED_SIZE_50     (1 << 5)
123 #define MCLIP_PROXY_UNDISTORTED_SIZE_75     (1 << 6)
124 #define MCLIP_PROXY_UNDISTORTED_SIZE_100    (1 << 7)
125
126 /* MovieClip->source */
127 #define MCLIP_SRC_SEQUENCE  1
128 #define MCLIP_SRC_MOVIE     2
129
130 /* MovieClip->selection types */
131 #define MCLIP_SEL_NONE      0
132 #define MCLIP_SEL_TRACK     1
133
134 /* MovieClip->flag */
135 #define MCLIP_USE_PROXY                 (1 << 0)
136 #define MCLIP_USE_PROXY_CUSTOM_DIR      (1 << 1)
137 /*#define MCLIP_CUSTOM_START_FRAME              (1<<2)*/ /* UNUSED */
138
139 #define MCLIP_TIMECODE_FLAGS            (MCLIP_USE_PROXY | MCLIP_USE_PROXY_CUSTOM_DIR)
140
141 /* MovieClip->render_size */
142 #define MCLIP_PROXY_RENDER_SIZE_FULL    0
143 #define MCLIP_PROXY_RENDER_SIZE_25      1
144 #define MCLIP_PROXY_RENDER_SIZE_50      2
145 #define MCLIP_PROXY_RENDER_SIZE_75      3
146 #define MCLIP_PROXY_RENDER_SIZE_100     4
147
148 /* MovieClip->render_flag */
149 #define MCLIP_PROXY_RENDER_UNDISTORT    1
150
151 #endif