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