1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
|
/*
* Copyright (C) 2004 the xine project
*
* This file is part of xine, a free video player.
*
* xine is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* xine is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*/
/*
* IFF header file by Manfred Tremmel (Manfred.Tremmel@iiv.de)
* Based on the information of the Amiga Developer CD
*/
#ifndef IFFP_IFF_H
#define IFFP_IFF_H
#define IFF_OKAY 0L
#define IFF_CLIENT_ERROR 1L
#define IFF_NOFILE 5L
#define FOURCC_CHUNK BE_FOURCC
#define IFF_16SV_CHUNK FOURCC_CHUNK('1', '6', 'S', 'V')
#define IFF_8SVX_CHUNK FOURCC_CHUNK('8', 'S', 'V', 'X')
#define IFF_ANFI_CHUNK FOURCC_CHUNK('A', 'N', 'F', 'I')
#define IFF_ANHD_CHUNK FOURCC_CHUNK('A', 'N', 'H', 'D')
#define IFF_ANIM_CHUNK FOURCC_CHUNK('A', 'N', 'I', 'M')
#define IFF_ANNO_CHUNK FOURCC_CHUNK('A', 'N', 'N', 'O')
#define IFF_ANSQ_CHUNK FOURCC_CHUNK('A', 'N', 'S', 'Q')
#define IFF_ATAK_CHUNK FOURCC_CHUNK('A', 'T', 'A', 'K')
#define IFF_AUTH_CHUNK FOURCC_CHUNK('A', 'U', 'T', 'H')
#define IFF_BMHD_CHUNK FOURCC_CHUNK('B', 'M', 'H', 'D')
#define IFF_BODY_CHUNK FOURCC_CHUNK('B', 'O', 'D', 'Y')
#define IFF_CAMG_CHUNK FOURCC_CHUNK('C', 'A', 'M', 'G')
#define IFF_CCRT_CHUNK FOURCC_CHUNK('C', 'C', 'R', 'T')
#define IFF_CHAN_CHUNK FOURCC_CHUNK('C', 'H', 'A', 'N')
#define IFF_CMAP_CHUNK FOURCC_CHUNK('C', 'M', 'A', 'P')
#define IFF_COPY_CHUNK FOURCC_CHUNK('(', 'c', ')', ' ')
#define IFF_CRNG_CHUNK FOURCC_CHUNK('C', 'R', 'N', 'G')
#define IFF_DEST_CHUNK FOURCC_CHUNK('D', 'E', 'S', 'T')
#define IFF_DLTA_CHUNK FOURCC_CHUNK('D', 'L', 'T', 'A')
#define IFF_DPAN_CHUNK FOURCC_CHUNK('D', 'P', 'A', 'N')
#define IFF_DPI_CHUNK FOURCC_CHUNK('D', 'P', 'I', ' ')
#define IFF_DPPS_CHUNK FOURCC_CHUNK('D', 'P', 'P', 'S')
#define IFF_DPPV_CHUNK FOURCC_CHUNK('D', 'P', 'P', 'V')
#define IFF_DRNG_CHUNK FOURCC_CHUNK('D', 'R', 'N', 'G')
#define IFF_FACE_CHUNK FOURCC_CHUNK('F', 'A', 'C', 'E')
#define IFF_FADE_CHUNK FOURCC_CHUNK('F', 'A', 'D', 'E')
#define IFF_FORM_CHUNK FOURCC_CHUNK('F', 'O', 'R', 'M')
#define IFF_FVER_CHUNK FOURCC_CHUNK('F', 'V', 'E', 'R')
#define IFF_GRAB_CHUNK FOURCC_CHUNK('G', 'R', 'A', 'B')
#define IFF_ILBM_CHUNK FOURCC_CHUNK('I', 'L', 'B', 'M')
#define IFF_INS1_CHUNK FOURCC_CHUNK('I', 'N', 'S', '1')
#define IFF_IMRT_CHUNK FOURCC_CHUNK('I', 'M', 'R', 'T')
#define IFF_JUNK_CHUNK FOURCC_CHUNK('J', 'U', 'N', 'K')
#define IFF_LIST_CHUNK FOURCC_CHUNK('L', 'I', 'S', 'T')
#define IFF_MHDR_CHUNK FOURCC_CHUNK('M', 'H', 'D', 'R')
#define IFF_NAME_CHUNK FOURCC_CHUNK('N', 'A', 'M', 'E')
#define IFF_PAN_CHUNK FOURCC_CHUNK('P', 'A', 'N', ' ')
#define IFF_PROP_CHUNK FOURCC_CHUNK('P', 'R', 'O', 'P')
#define IFF_RLSE_CHUNK FOURCC_CHUNK('R', 'L', 'S', 'E')
#define IFF_SAMP_CHUNK FOURCC_CHUNK('S', 'A', 'M', 'P')
#define IFF_SEQN_CHUNK FOURCC_CHUNK('S', 'E', 'Q', 'N')
#define IFF_SHDR_CHUNK FOURCC_CHUNK('S', 'H', 'D', 'R')
#define IFF_SMUS_CHUNK FOURCC_CHUNK('S', 'M', 'U', 'S')
#define IFF_SPRT_CHUNK FOURCC_CHUNK('S', 'P', 'R', 'T')
#define IFF_TEXT_CHUNK FOURCC_CHUNK('T', 'E', 'X', 'T')
#define IFF_TINY_CHUNK FOURCC_CHUNK('T', 'I', 'N', 'Y')
#define IFF_TRAK_CHUNK FOURCC_CHUNK('T', 'R', 'A', 'K')
#define IFF_VHDR_CHUNK FOURCC_CHUNK('V', 'H', 'D', 'R')
/* IFF-ILBM Definitions */
/* Use this constant instead of sizeof(ColorRegister). */
#define PIC_SIZE_OF_COLOR_REGISTER 3
/* Maximum number of bitplanes storable in BitMap structure */
#define PIC_MAXAMDEPTH 8
/* Maximum planes we can save */
#define PIC_MAXSAVEDEPTH 24
/* Masking techniques */
#define PIC_MASK_NONE 0
#define PIC_MASK_HASMASK 1
#define PIC_MASK_HASTRANSPARENTMASK 2
#define PIC_MASK_LASSO 3
/* Compression techniques */
#define PIC_COMPRESSION_NONE 0
#define PIC_COMPRESSION_BYTERUN1 1
#define VIDEOBUFSIZE 128*1024
#define CAMG_LACE 0x0004 /* Interlaced Modi */
#define CAMG_EHB 0x0080 /* extra halfe brite */
#define CAMG_HAM 0x0800 /* hold and modify */
#define CAMG_HIRES 0x8000 /* Hires Modi */
#define CAMG_PAL 0x00021000 /* Hires Modi */
#define CAMG_NTSC 0x00011000 /* Hires Modi */
#define HAMBITS_CMAP 0 /* take color from colormap */
#define HAMBITS_BLUE 1 /* modify blue component */
#define HAMBITS_RED 2 /* modify red component */
#define HAMBITS_GREEN 3 /* modify green component */
static const int bitplainoffeset[] = {
1, 2, 4, 8,
16, 32, 64, 128,
1, 2, 4, 8,
16, 32, 64, 128,
1, 2, 4, 8,
16, 32, 64, 128
};
/* ---------- BitMapHeader ---------------------------------------------*/
/* Required Bitmap header (BMHD) structure describes an ILBM */
typedef struct {
uint16_t w; /* raster width in pixels */
uint16_t h; /* raster height in pixels */
int16_t x; /* raster width in pixels */
int16_t y; /* raster height in pixels */
uint8_t nplanes; /* # source bitplanes */
uint8_t masking; /* masking technique */
uint8_t compression; /* compression algoithm */
uint8_t pad1; /* UNUSED. For consistency, put 0 here. */
uint16_t transparentColor; /* transparent "color number" */
uint8_t xaspect; /* aspect ratio, a rational number x/y */
uint8_t yaspect; /* aspect ratio, a rational number x/y */
int16_t pagewidth; /* source "page" size in pixels */
int16_t pageheight; /* source "page" size in pixels */
} BitMapHeader;
/* ---------- ColorRegister --------------------------------------------*/
/* A CMAP chunk is a packed array of ColorRegisters (3 bytes each). */
typedef struct {
uint8_t cmap_red; /* red color component */
uint8_t cmap_green; /* green color component */
uint8_t cmap_blue; /* blue color component */
} ColorRegister;
/* ---------- Point2D --------------------------------------------------*/
/* A Point2D is stored in a GRAB chunk. */
typedef struct {
int16_t x; /* coordinates x pixels */
int16_t y; /* coordinates y pixels */
} Point2D;
/* ---------- DestMerge ------------------------------------------------*/
/* A DestMerge is stored in a DEST chunk. */
typedef struct {
uint8_t depth; /* # bitplanes in the original source */
uint8_t pad1; /* UNUSED; for consistency store 0 here */
uint16_t plane_pick; /* how to scatter source bitplanes into destination */
uint16_t plane_onoff; /* default bitplane data for planePick */
uint16_t plane_mask; /* selects which bitplanes to store into */
} DestMerge;
/* ---------- SpritePrecedence -----------------------------------------*/
/* A SpritePrecedence is stored in a SPRT chunk. */
typedef uint16_t SpritePrecedence;
/* ---------- Camg Amiga Viewport Mode Display ID ----------------------*/
/* The CAMG chunk is used to store the Amiga display mode in which
* an ILBM is meant to be displayed. This is very important, especially
* for special display modes such as HAM and HALFBRITE where the
* pixels are interpreted differently.
* Under V37 and higher, store a 32-bit Amiga DisplayID (aka. ModeID)
* in the ULONG ViewModes CAMG variable (from GetVPModeID(viewport)).
* Pre-V37, instead store the 16-bit viewport->Modes.
* See the current IFF manual for information on screening for bad CAMG
* chunks when interpreting a CAMG as a 32-bit DisplayID or 16-bit ViewMode.
* The chunk's content is declared as a ULONG.
*/
typedef struct {
uint32_t view_modes;
} CamgChunk;
/* ---------- CRange cycling chunk -------------------------------------*/
#define RNG_NORATE 36 /* Dpaint uses this rate to mean non-active */
/* A CRange is store in a CRNG chunk. */
typedef struct {
int16_t pad1; /* reserved for future use; store 0 here */
int16_t rate; /* 60/sec=16384, 30/sec=8192, 1/sec=16384/60=273 */
int16_t active; /* bit0 set = active, bit 1 set = reverse */
uint8_t low; /* lower color registers selected */
uint8_t high; /* upper color registers selected */
} CRange;
/* ---------- Ccrt (Graphicraft) cycling chunk -------------------------*/
/* A Ccrt is stored in a CCRT chunk. */
typedef struct {
int16_t direction; /* 0=don't cycle, 1=forward, -1=backwards */
uint8_t start; /* range lower */
uint8_t end; /* range upper */
int32_t seconds; /* seconds between cycling */
int32_t microseconds; /* msecs between cycling */
int16_t pad; /* future exp - store 0 here */
} CcrtChunk;
/* ---------- DPIHeader chunk ------------------------------------------*/
/* A DPIHeader is stored in a DPI chunk. */
typedef struct {
int16_t x;
int16_t y;
} DPIHeader;
/* IFF-8SVX/16SV Definitions */
#define MONO 0L
#define PAN 1L
#define LEFT 2L
#define RIGHT 4L
#define STEREO 6L
#define SND_COMPRESSION_NONE 0
#define SND_COMPRESSION_FIBONACCI 1
#define SND_COMPRESSION_EXPONENTIAL 2
#define PREAMBLE_SIZE 8
#define IFF_JUNK_SIZE 8
#define IFF_SIGNATURE_SIZE 12
#define PCM_BLOCK_ALIGN 1024
#define max_volume 65536 /* Unity = Fixed 1.0 = maximum volume */
static const int8_t fibonacci[] = { -34, -21, -13, -8, -5, -3, -2, -1, 0, 1, 2, 3, 5, 8, 13, 21 };
static const int8_t exponential[] = { -128, -64, -32, -16, -8, -4, -2, -1, 0, 1, 2, 4, 8, 16, 32, 64 };
typedef struct {
uint32_t oneShotHiSamples; /* # samples in the high octave 1-shot part */
uint32_t repeatHiSamples; /* # samples in the high octave repeat part */
uint32_t samplesPerHiCycle; /* # samples/cycle in high octave, else 0 */
uint16_t samplesPerSec; /* data sampling rate */
uint8_t ctOctave; /* # of octaves of waveforms */
uint8_t sCompression; /* data compression technique used */
uint32_t volume; /* playback nominal volume from 0 to Unity
* (full volume). Map this value into
* the output hardware's dynamic range.
*/
} Voice8Header;
typedef struct {
uint16_t duration; /* segment duration in milliseconds */
uint32_t dest; /* destination volume factor */
} EGPoint;
/* IFF-ANIM Definitions */
#define IFF_ANHD_ILBM 0
#define IFF_ANHD_XOR 1
#define IFF_ANHD_LDELTA 2
#define IFF_ANHD_SDELTA 3
#define IFF_ANHD_SLDELTA 4
#define IFF_ANHD_BVDELTA 5
#define IFF_ANHD_STEREOO5 6
#define IFF_ANHD_OPT7 7
#define IFF_ANHD_OPT8 8
#define IFF_ANHD_ASCIIJ 74
/* ---------- AnimHeader ----------------------------------------------*/
/* Required Anim Header (anhd) structure describes an ANIM-Frame */
typedef struct {
uint8_t operation; /* The compression method:
* 0 set directly (normal ILBM BODY),
* 1 XOR ILBM mode,
* 2 Long Delta mode,
* 3 Short Delta mode,
* 4 Generalized short/long Delta mode,
* 5 Byte Vertical Delta mode
* 6 Stereo op 5 (third party)
* 74 (ascii 'J') reserved for Eric Graham's
* compression technique
*/
uint8_t mask; /* (XOR mode only - plane mask where each
* bit is set =1 if there is data and =0
* if not.)
*/
uint16_t w; /* (XOR mode only - width and height of the */
uint16_t h; /* area represented by the BODY to eliminate */
/* unnecessary un-changed data) */
int16_t x; /* (XOR mode only - position of rectangular */
int16_t y; /* area representd by the BODY) */
uint32_t abs_time; /* (currently unused - timing for a frame */
/* relative to the time the first frame */
/* was displayed - in jiffies (1/60 sec)) */
uint32_t rel_time; /* (timing for frame relative to time */
/* previous frame was displayed - in */
/* jiffies (1/60 sec)) */
uint8_t interleave; /* (unused so far - indicates how may frames */
/* back this data is to modify. =0 defaults */
/* to indicate two frames back (for double */
/* buffering). =n indicates n frames back. */
/* The main intent here is to allow values */
/* of =1 for special applications where */
/* frame data would modify the immediately */
/* previous frame) */
uint8_t pad0; /* Pad byte, not used at present. */
uint32_t bits; /* 32 option bits used by options=4 and 5. */
/* At present only 6 are identified, but the */
/* rest are set =0 so they can be used to */
/* implement future ideas. These are defined*/
/* for option 4 only at this point. It is */
/* recommended that all bits be set =0 for */
/* option 5 and that any bit settings */
/* used in the future (such as for XOR mode) */
/* be compatible with the option 4 */
/* bit settings. Player code should check */
/*undefined bits in options 4 and 5 to assure*/
/* they are zero. */
/* */
/* The six bits for current use are: */
/* */
/* bit # set =0 set =1 */
/* ========================================= */
/* 0 short data long data */
/* 1 set XOR */
/* 2 separate info one info list */
/* for each plane for all planes*/
/* 3 not RLC RLC(run length c.)*/
/* 4 horizontal vertical */
/* 5 short info offsets long info offs.*/
uint8_t pad[16]; /* This is a pad for future use for future */
/* compression modes. */
} AnimHeader;
/* ---------- DPAnim-Chunk ----------------------------------------------*/
/* Deluxe Paint Anim (DPAN) Chunk */
typedef struct {
uint16_t version; /* Version */
uint16_t nframes; /* number of frames in the animation.*/
uint8_t fps; /* frames per second */
uint8_t unused1;
uint8_t unused2;
uint8_t unused3;
} DPAnimChunk;
#endif /* IFFP_IFF_H */
|