Initial revision
[blender.git] / source / blender / imbuf / IMB_imbuf_types.h
1 /**
2  * IMB_imbuf_types.h (mar-2001 nzc)
3  *
4  * Types needed for using the image buffer.
5  *
6  * Imbuf is external code, slightly adapted to live in the Blender
7  * context. It requires an external jpeg module, and the avi-module
8  * (also external code) in order to function correctly.
9  *
10  * This file contains types and some constants that go with them. Most
11  * are self-explanatory (e.g. IS_amiga tests whether the buffer
12  * contains an Amiga-format file).
13  *
14  * $Id$ 
15  *
16  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
17  *
18  * This program is free software; you can redistribute it and/or
19  * modify it under the terms of the GNU General Public License
20  * as published by the Free Software Foundation; either version 2
21  * of the License, or (at your option) any later version. The Blender
22  * Foundation also sells licenses for use in proprietary software under
23  * the Blender License.  See http://www.blender.org/BL/ for information
24  * about this.
25  *
26  * This program is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with this program; if not, write to the Free Software Foundation,
33  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
34  *
35  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
36  * All rights reserved.
37  *
38  * The Original Code is: all of this file.
39  *
40  * Contributor(s): none yet.
41  *
42  * ***** END GPL/BL DUAL LICENSE BLOCK *****
43  */
44 #ifndef IMB_IMBUF_TYPES_H
45 #define IMB_IMBUF_TYPES_H
46
47 #include <stdio.h>        /* for size_t */
48 #include "DNA_listBase.h" /* for ListBase */
49 struct _AviMovie;
50 struct Mdec;
51
52 /* the basic imbuf type */
53
54 typedef struct ImBuf{
55         short   x,y;            /* breedte in pixels, hoogte in scanlines */
56         short   skipx;          /* breedte in ints om bij volgende scanline te komen */
57         unsigned char   depth;          /* actieve aantal bits/bitplanes */
58         unsigned char   cbits;          /* aantal active bits in cmap */
59         unsigned short  mincol;
60         unsigned short  maxcol;
61         int     type;           /* 0=abgr, 1=bitplanes */
62         int     ftype;
63         unsigned int    *cmap;          /* int array van kleuren */
64         unsigned int    *rect;          /* databuffer */
65         unsigned int    **planes;       /* bitplanes */
66         int     flags;
67         int     mall;           /* wat is er intern gemalloced en mag weer vrijgegeven worden */
68         short   xorig, yorig;
69         char    name[1023];
70         char    namenull;
71         int     userflags;
72         int     *zbuf;
73         void *userdata;
74         unsigned char *encodedbuffer;
75         unsigned int   encodedsize;
76         unsigned int   encodedbuffersize;
77 } ImBuf;
78
79 /* Moved from BKE_bmfont_types.h because it is a userflag bit mask. */
80 typedef enum {
81         IB_BITMAPFONT = 1 << 0,
82         IB_BITMAPDIRTY = 1 << 1
83 } ImBuf_userflagsMask;
84
85
86 /* From iff.h. This was once moved away by Frank, now Nzc moves it
87  * back. Such is the way it is... It is a long list of defines, and
88  * there are a few external defines in the back. Most of the stuff is
89  * probably imbuf_intern only. This will need to be merged later
90  * on. */
91
92 #define IB_rect                 (1 << 0)
93 #define IB_planes               (1 << 1)
94 #define IB_cmap                 (1 << 2)
95
96 #define IB_vert                 (1 << 4)
97 #define IB_freem                (1 << 6)
98 #define IB_test                 (1 << 7)
99
100 #define IB_ttob                 (1 << 8)
101 #define IB_subdlta              (1 << 9)
102 #define IB_fields               (1 << 11)
103 #define IB_zbuf                 (1 << 13)
104
105 #define IB_mem                  (1 << 14)
106
107 #define AMI         (1 << 31)
108 #define PNG         (1 << 30)
109 #define Anim    (1 << 29)
110 #define TGA         (1 << 28)
111 #define JPG             (1 << 27)
112 #define BMP             (1 << 26)
113
114 #define RAWTGA  (TGA | 1)
115
116 #define JPG_STD (JPG | (0 << 8))
117 #define JPG_VID (JPG | (1 << 8))
118 #define JPG_JST (JPG | (2 << 8))
119 #define JPG_MAX (JPG | (3 << 8))
120 #define JPG_MSK (0xffffff00)
121
122 #define AM_ham      (0x0800 | AMI)
123 #define AM_hbrite   (0x0080 | AMI)
124
125 #define C233    1
126 #define YUVX    2
127 #define HAMX    3
128 #define TANX    4
129
130 #define AN_c233                 (Anim | C233)
131 #define AN_yuvx                 (Anim | YUVX)
132 #define AN_hamx                 (Anim | HAMX)
133 #define AN_tanx                 (Anim | TANX)
134
135 #define IS_amiga(x)             (x->ftype & AMI)
136 #define IS_ham(x)               ((x->ftype & AM_ham) == AM_ham)
137 #define IS_hbrite(x)    ((x->ftype & AM_hbrite) == AM_hbrite)
138
139 #define IS_anim(x)              (x->ftype & Anim)
140 #define IS_hamx(x)              (x->ftype == AN_hamx)
141 #define IS_tga(x)               (x->ftype & TGA)
142 #define IS_png(x)               (x->ftype & PNG)
143 #define IS_bmp(x)               (x->ftype & BMP)
144
145 #define IMAGIC  0732
146 #define IS_iris(x)              (x->ftype == IMAGIC)
147
148 #define IS_jpg(x)               (x->ftype & JPG)
149 #define IS_stdjpg(x)    ((x->ftype & JPG_MSK) == JPG_STD)
150 #define IS_vidjpg(x)    ((x->ftype & JPG_MSK) == JPG_VID)
151 #define IS_jstjpg(x)    ((x->ftype & JPG_MSK) == JPG_JST)
152 #define IS_maxjpg(x)    ((x->ftype & JPG_MSK) == JPG_MAX)
153
154 #endif
155