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