Cleanup: sort forward declarations of enum & struct
[blender.git] / source / blender / imbuf / IMB_imbuf_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): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 #ifndef __IMB_IMBUF_TYPES_H__
29 #define __IMB_IMBUF_TYPES_H__
30
31 #include "DNA_vec_types.h"  /* for rcti */
32
33 /**
34  * \file IMB_imbuf_types.h
35  * \ingroup imbuf
36  * \brief Contains defines and structs used throughout the imbuf module.
37  * \todo Clean up includes.
38  *
39  * Types needed for using the image buffer.
40  *
41  * Imbuf is external code, slightly adapted to live in the Blender
42  * context. It requires an external jpeg module, and the avi-module
43  * (also external code) in order to function correctly.
44  *
45  * This file contains types and some constants that go with them. Most
46  * are self-explanatory (e.g. IS_amiga tests whether the buffer
47  * contains an Amiga-format file).
48  */
49
50 #define IMB_MIPMAP_LEVELS       20
51 #define IMB_FILENAME_SIZE       1024
52
53 typedef struct DDSData {
54         /** DDS fourcc info */
55         unsigned int fourcc;
56         /** The number of mipmaps in the dds file */
57         unsigned int nummipmaps;
58         /** The compressed image data */
59         unsigned char *data;
60         /** The size of the compressed data */
61         unsigned int size;
62 } DDSData;
63
64 /**
65  * \ingroup imbuf
66  * This is the abstraction of an image.  ImBuf is the basic type used for all
67  * imbuf operations.
68  *
69  * Also; add new variables to the end to save pain!
70  *
71  */
72
73
74 /* Warning: Keep explicit value assignments here,
75  * this file is included in areas where not all format defines are set
76  * (e.g. intern/dds only get WITH_DDS, even if TIFF, HDR etc are also defined).
77  * See T46524. */
78
79 /** #ImBuf.ftype flag, main image types. */
80 enum eImbTypes {
81         IMB_FTYPE_PNG       = 1,
82         IMB_FTYPE_TGA       = 2,
83         IMB_FTYPE_JPG       = 3,
84         IMB_FTYPE_BMP       = 4,
85         IMB_FTYPE_OPENEXR   = 5,
86         IMB_FTYPE_IMAGIC    = 6,
87 #ifdef WITH_OPENIMAGEIO
88         IMB_FTYPE_PSD       = 7,
89 #endif
90 #ifdef WITH_OPENJPEG
91         IMB_FTYPE_JP2       = 8,
92 #endif
93 #ifdef WITH_HDR
94         IMB_FTYPE_RADHDR    = 9,
95 #endif
96 #ifdef WITH_TIFF
97         IMB_FTYPE_TIF       = 10,
98 #endif
99 #ifdef WITH_CINEON
100         IMB_FTYPE_CINEON    = 11,
101         IMB_FTYPE_DPX       = 12,
102 #endif
103
104 #ifdef WITH_DDS
105         IMB_FTYPE_DDS       = 13,
106 #endif
107 };
108
109 /* ibuf->foptions flag, type specific options.
110  * Some formats include compression rations on some bits */
111
112 #define OPENEXR_HALF    (1 << 8 )
113 /* careful changing this, it's used in DNA as well */
114 #define OPENEXR_COMPRESS (15)
115
116 #ifdef WITH_CINEON
117 #define CINEON_LOG              (1 << 8)
118 #define CINEON_16BIT    (1 << 7)
119 #define CINEON_12BIT    (1 << 6)
120 #define CINEON_10BIT    (1 << 5)
121 #endif
122
123 #ifdef WITH_OPENJPEG
124 #define JP2_12BIT               (1 << 9)
125 #define JP2_16BIT               (1 << 8)
126 #define JP2_YCC                 (1 << 7)
127 #define JP2_CINE                (1 << 6)
128 #define JP2_CINE_48FPS  (1 << 5)
129 #define JP2_JP2 (1 << 4)
130 #define JP2_J2K (1 << 3)
131 #endif
132
133 #define PNG_16BIT                       (1 << 10)
134
135 #define RAWTGA          1
136
137 #ifdef WITH_TIFF
138 #define TIF_16BIT                       (1 << 8)
139 #define TIF_COMPRESS_NONE               (1 << 7)
140 #define TIF_COMPRESS_DEFLATE            (1 << 6)
141 #define TIF_COMPRESS_LZW                (1 << 5)
142 #define TIF_COMPRESS_PACKBITS           (1 << 4)
143 #endif
144
145 typedef struct ImbFormatOptions {
146         short flag;
147         /** quality serves dual purpose as quality number for jpeg or compression amount for png */
148         char quality;
149 } ImbFormatOptions;
150
151 typedef struct ImBuf {
152         struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
153
154         /* dimensions */
155         /** Width and Height of our image buffer.
156          * Should be 'unsigned int' since most formats use this.
157          * but this is problematic with texture math in imagetexture.c
158          * avoid problems and use int. - campbell */
159         int x, y;
160
161         /** Active amount of bits/bitplanes */
162         unsigned char planes;
163         /** Number of channels in `rect_float` (0 = 4 channel default) */
164         int channels;
165
166         /* flags */
167         /** Controls which components should exist. */
168         int     flags;
169         /** what is malloced internal, and can be freed */
170         int     mall;
171
172         /* pixels */
173
174         /** Image pixel buffer (8bit representation):
175          * - color space defaults to `sRGB`.
176          * - alpha defaults to 'straight'.
177          */
178         unsigned int *rect;
179         /** Image pixel buffer (float representation):
180          * - color space defaults to 'linear' (`rec709`).
181          * - alpha defaults to 'premul'.
182          * \note May need gamma correction to `sRGB` when generating 8bit representations.
183          * \note Formats that support higher more than 8 but channels load as floats.
184          */
185         float *rect_float;
186
187         /* resolution - pixels per meter */
188         double ppm[2];
189
190         /* tiled pixel storage */
191         int tilex, tiley;
192         int xtiles, ytiles;
193         unsigned int **tiles;
194
195         /* zbuffer */
196         /** z buffer data, original zbuffer */
197         int     *zbuf;
198         /** z buffer data, camera coordinates */
199         float *zbuf_float;
200
201         /* parameters used by conversion between byte and float */
202         /** random dither value, for conversion from float -> byte rect */
203         float dither;
204
205         /* mipmapping */
206         /** MipMap levels, a series of halved images */
207         struct ImBuf *mipmap[IMB_MIPMAP_LEVELS];
208         int miptot, miplevel;
209
210         /* externally used data */
211         /** reference index for ImBuf lists */
212         int index;
213         /** used to set imbuf to dirty and other stuff */
214         int     userflags;
215         /** image metadata */
216         struct IDProperty *metadata;
217         /** temporary storage */
218         void *userdata;
219
220         /* file information */
221         /** file type we are going to save as */
222         enum eImbTypes  ftype;
223         /** file format specific flags */
224         ImbFormatOptions foptions;
225         /** filename associated with this image */
226         char name[IMB_FILENAME_SIZE];
227         /** full filename used for reading from cache */
228         char cachename[IMB_FILENAME_SIZE];
229
230         /* memory cache limiter */
231         /** handle for cache limiter */
232         struct MEM_CacheLimiterHandle_s *c_handle;
233         /** reference counter for multiple users */
234         int refcounter;
235
236         /* some parameters to pass along for packing images */
237         /** Compressed image only used with png currently */
238         unsigned char *encodedbuffer;
239         /** Size of data written to encodedbuffer */
240         unsigned int   encodedsize;
241         /** Size of encodedbuffer */
242         unsigned int   encodedbuffersize;
243
244         /* color management */
245         /** color space of byte buffer */
246         struct ColorSpace *rect_colorspace;
247         /** color space of float buffer, used by sequencer only */
248         struct ColorSpace *float_colorspace;
249         /** array of per-display display buffers dirty flags */
250         unsigned int *display_buffer_flags;
251         /** cache used by color management */
252         struct ColormanageCache *colormanage_cache;
253         int colormanage_flag;
254         rcti invalid_rect;
255
256         /* information for compressed textures */
257         struct DDSData dds_data;
258 } ImBuf;
259
260 /**
261  * \brief userflags: Flags used internally by blender for imagebuffers
262  */
263
264 enum {
265         /** image needs to be saved is not the same as filename */
266         IB_BITMAPDIRTY =          (1 << 1),
267         /** image mipmaps are invalid, need recreate */
268         IB_MIPMAP_INVALID =       (1 << 2),
269         /** float buffer changed, needs recreation of byte rect */
270         IB_RECT_INVALID =         (1 << 3),
271         /** either float or byte buffer changed, need to re-calculate display buffers */
272         IB_DISPLAY_BUFFER_INVALID =   (1 << 4),
273         /** image buffer is persistent in the memory and should never be removed from the cache */
274         IB_PERSISTENT =               (1 << 5),
275 };
276
277 /**
278  * \name Imbuf Component flags
279  * \brief These flags determine the components of an ImBuf struct.
280  *
281  * \{ */
282
283 enum {
284         IB_rect             = 1 << 0,
285         IB_test             = 1 << 1,
286         IB_zbuf             = 1 << 3,
287         IB_mem              = 1 << 4,
288         IB_rectfloat        = 1 << 5,
289         IB_zbuffloat        = 1 << 6,
290         IB_multilayer       = 1 << 7,
291         IB_metadata         = 1 << 8,
292         IB_animdeinterlace  = 1 << 9,
293         IB_tiles            = 1 << 10,
294         IB_tilecache        = 1 << 11,
295         /** indicates whether image on disk have premul alpha */
296         IB_alphamode_premul = 1 << 12,
297         /** if this flag is set, alpha mode would be guessed from file */
298         IB_alphamode_detect = 1 << 13,
299         /** ignore alpha on load and substitute it with 1.0f */
300         IB_ignore_alpha     = 1 << 14,
301         IB_thumbnail        = 1 << 15,
302         IB_multiview        = 1 << 16,
303 };
304
305 /** \} */
306
307 /**
308  * \name Imbuf preset profile tags
309  * \brief Some predefined color space profiles that 8 bit imbufs can represent
310  *
311  * \{ */
312 #define IB_PROFILE_NONE                 0
313 #define IB_PROFILE_LINEAR_RGB   1
314 #define IB_PROFILE_SRGB                 2
315 #define IB_PROFILE_CUSTOM               3
316
317 /** \} */
318
319 /* dds */
320 #ifdef WITH_DDS
321 #ifndef DDS_MAKEFOURCC
322 #define DDS_MAKEFOURCC(ch0, ch1, ch2, ch3)\
323         ((unsigned long)(unsigned char)(ch0) | \
324         ((unsigned long)(unsigned char)(ch1) << 8) | \
325         ((unsigned long)(unsigned char)(ch2) << 16) | \
326         ((unsigned long)(unsigned char)(ch3) << 24))
327 #endif  /* DDS_MAKEFOURCC */
328
329 /*
330  * FOURCC codes for DX compressed-texture pixel formats
331  */
332
333 #define FOURCC_DDS   (DDS_MAKEFOURCC('D','D','S',' '))
334 #define FOURCC_DXT1  (DDS_MAKEFOURCC('D','X','T','1'))
335 #define FOURCC_DXT2  (DDS_MAKEFOURCC('D','X','T','2'))
336 #define FOURCC_DXT3  (DDS_MAKEFOURCC('D','X','T','3'))
337 #define FOURCC_DXT4  (DDS_MAKEFOURCC('D','X','T','4'))
338 #define FOURCC_DXT5  (DDS_MAKEFOURCC('D','X','T','5'))
339
340 #endif  /* DDS */
341 extern const char *imb_ext_image[];
342 extern const char *imb_ext_movie[];
343 extern const char *imb_ext_audio[];
344
345 /* image formats that can only be loaded via filepath */
346 extern const char *imb_ext_image_filepath_only[];
347
348 /**
349  * \name Imbuf Color Management Flag
350  * \brief Used with #ImBuf.colormanage_flag
351  *
352  * \{ */
353
354 enum {
355         IMB_COLORMANAGE_IS_DATA = (1 << 0),
356 };
357
358 /** \} */
359
360 #endif  /* __IMB_IMBUF_TYPES_H__ */