diff options
Diffstat (limited to 'src/demuxers/iff.h')
-rw-r--r-- | src/demuxers/iff.h | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/src/demuxers/iff.h b/src/demuxers/iff.h new file mode 100644 index 000000000..129503694 --- /dev/null +++ b/src/demuxers/iff.h @@ -0,0 +1,350 @@ +/* + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* + * IFF header file by Manfred Tremmel (Manfred.Tremmel@iiv.de) + * Based on the information of the Amiga Developer CD + * + * $Id: iff.h,v 1.1 2004/02/22 12:36:37 manfredtremmel Exp $ + */ + +#ifndef IFFP_IFF_H +#define IFFP_IFF_H + +#define IFF_OKAY 0L +#define CLIENT_ERROR 1L +#define 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 */ + +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 */ + +int8_t fibonacci[] = { -34, -21, -13, -8, -5, -3, -2, -1, 0, 1, 2, 3, 5, 8, 13, 21 }; + +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_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 */ |