/* GStreamer * Copyright (C) <1999> Erik Walthinsen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GST_FLX_FMT__H__ #define __GST_FLX_FMT_H__ #include G_BEGIN_DECLS enum Flx_TypeChunk { /* frame chunks */ FLX_PREFIX_TYPE = 0xf100, FLX_SCRIPT_CHUNK = 0xf1e0, FLX_FRAME_TYPE = 0xf1fa, FLX_SEGMENT_TABLE = 0xf1fb, FLX_HUFFMAN_TABLE = 0xf1fc, /* sub chunks */ FLX_CEL_DATA = 3, FLX_COLOR256 = 4, FLX_SS2 = 7, FLX_COLOR64 = 11, FLX_LC = 12, FLX_BLACK = 13, FLX_BRUN = 15, FLX_COPY = 16, FLX_MINI = 18, FLX_DTA_RUN = 25, FLX_DTA_COPY = 26, FLX_DTA_LC = 27, FLX_LABEL = 31, FLX_BMP_MASK = 32, FLX_MLEV_MASK = 33, FLX_SEGMENT = 34, FLX_KEY_IMAGE = 35, FLX_KEY_PAL = 36, FLX_REGION = 37, FLX_WAVE = 38, FLX_USERSTRING = 39, FLX_RGN_MASK = 40 }; enum Flx_MagicHdr { FLX_MAGICHDR_FLI = 0xaf11, FLX_MAGICHDR_FLC = 0xaf12, FLX_MAGICHDR_FLX = 0xaf44, FLX_MAGICHDR_HUFFBWT = 0xaf30 }; typedef struct _FlxHeader { guint32 size; guint16 type; guint16 frames; guint16 width,height,depth,flags; guint32 speed; guint16 reserved1; /* FLC */ guint32 created,creator,updated,updater; guint16 aspect_dx, aspect_dy; /* EGI */ guint16 ext_flags,keyframes,totalframes; guint32 req_memory; guint16 max_regions,transp_num; guchar reserved2[24]; /* FLC */ guint32 oframe1,oframe2; guchar reserved3[40]; } FlxHeader; #define FlxHeaderSize 128 typedef struct _FlxFrameChunk { guint32 size; guint16 id; } FlxFrameChunk; #define FlxFrameChunkSize 6 typedef struct _FlxPrefixChunk { guint16 chunks; guchar reserved[8]; } FlxPrefixChunk; typedef struct _FlxSegmentTable { guint16 segments; } FlxSegmentTable; typedef struct _FlxHuffmanTable { guint16 codelength; guint16 numcodes; guchar reserved[6]; } FlxHuffmanTable; typedef struct _FlxFrameType { guint16 chunks; guint16 delay; guchar reserved[6]; } FlxFrameType; #define FlxFrameTypeSize 10 #if G_BYTE_ORDER == G_BIG_ENDIAN #define LE_TO_BE_16(i16) ((guint16) (((i16) << 8) | ((i16) >> 8))) #define LE_TO_BE_32(i32) \ (((guint32) (LE_TO_BE_16((guint16) (i32))) << 16) | (LE_TO_BE_16((i32) >> 16))) #define FLX_FRAME_TYPE_FIX_ENDIANNESS(frm_type_p) \ do { \ (frm_type_p)->chunks = LE_TO_BE_16((frm_type_p)->chunks); \ (frm_type_p)->delay = LE_TO_BE_16((frm_type_p)->delay); \ } while(0) #define FLX_HUFFMAN_TABLE_FIX_ENDIANNESS(hffmn_table_p) \ do { \ (hffmn_table_p)->codelength = \ LE_TO_BE_16((hffmn_table_p)->codelength); \ (hffmn_table_p)->numcodes = LE_TO_BE_16((hffmn_table_p)->numcodes); \ } while(0) #define FLX_SEGMENT_TABLE_FIX_ENDIANNESS(sgmnt_table_p) \ ((sgmnt_table_p)->segments = LE_TO_BE_16((sgmnt_table_p)->segments)) #define FLX_PREFIX_CHUNK_FIX_ENDIANNESS(prfx_chnk_p) \ do { \ (prfx_chnk_p)->chunks = LE_TO_BE_16((prfx_chnk_p)->chunks); \ } while(0) #define FLX_FRAME_CHUNK_FIX_ENDIANNESS(frm_chnk_p) \ do { \ (frm_chnk_p)->size = LE_TO_BE_32((frm_chnk_p)->size); \ (frm_chnk_p)->id = LE_TO_BE_16((frm_chnk_p)->id); \ } while(0) #define FLX_HDR_FIX_ENDIANNESS(hdr_p) \ do { \ (hdr_p)->size = LE_TO_BE_32((hdr_p)->size); \ (hdr_p)->type = LE_TO_BE_16((hdr_p)->type); \ (hdr_p)->frames = LE_TO_BE_16((hdr_p)->frames); \ (hdr_p)->width = LE_TO_BE_16((hdr_p)->width); \ (hdr_p)->height = LE_TO_BE_16((hdr_p)->height); \ (hdr_p)->depth = LE_TO_BE_16((hdr_p)->depth); \ (hdr_p)->flags = LE_TO_BE_16((hdr_p)->flags); \ (hdr_p)->speed = LE_TO_BE_32((hdr_p)->speed); \ (hdr_p)->reserved1 = LE_TO_BE_16((hdr_p)->reserved1); \ (hdr_p)->created = LE_TO_BE_32((hdr_p)->created); \ (hdr_p)->creator = LE_TO_BE_32((hdr_p)->creator); \ (hdr_p)->updated = LE_TO_BE_32((hdr_p)->updated); \ (hdr_p)->updater = LE_TO_BE_32((hdr_p)->updater); \ (hdr_p)->aspect_dx = LE_TO_BE_16((hdr_p)->aspect_dx); \ (hdr_p)->aspect_dy = LE_TO_BE_16((hdr_p)->aspect_dy); \ (hdr_p)->ext_flags = LE_TO_BE_16((hdr_p)->ext_flags); \ (hdr_p)->keyframes = LE_TO_BE_16((hdr_p)->keyframes); \ (hdr_p)->totalframes = LE_TO_BE_16((hdr_p)->totalframes); \ (hdr_p)->req_memory = LE_TO_BE_32((hdr_p)->req_memory); \ (hdr_p)->max_regions = LE_TO_BE_16((hdr_p)->max_regions); \ (hdr_p)->transp_num = LE_TO_BE_16((hdr_p)->transp_num); \ (hdr_p)->oframe1 = LE_TO_BE_32((hdr_p)->oframe1); \ (hdr_p)->oframe2 = LE_TO_BE_32((hdr_p)->oframe2); \ } while(0) #else #define LE_TO_BE_16(i16) ((i16)) #define LE_TO_BE_32(i32) ((i32)) #define FLX_FRAME_TYPE_FIX_ENDIANNESS(frm_type_p) #define FLX_HUFFMAN_TABLE_FIX_ENDIANNESS(hffmn_table_p) #define FLX_SEGMENT_TABLE_FIX_ENDIANNESS(sgmnt_table_p) #define FLX_PREFIX_CHUNK_FIX_ENDIANNESS(prfx_chnk_p) #define FLX_FRAME_CHUNK_FIX_ENDIANNESS(frm_chnk_p) #define FLX_HDR_FIX_ENDIANNESS(hdr_p) #endif /* G_BYTE_ORDER == G_BIG_ENDIAN */ G_END_DECLS #endif /* __GST_FLX_FMT_H__ */