1 //==========================================================================
3 // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
4 // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
5 // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
8 // Copyright (c) 1999 - 2001 On2 Technologies Inc. All Rights Reserved.
10 //--------------------------------------------------------------------------
16 #if defined(__cplusplus)
26 #if defined(__cplusplus)
31 //#include "duktypes.h"
34 #if defined(__cplusplus)
40 #define validate(x) {if (!x) return (int ) DXL_NULLSOURCE; if (!x->dkFlags.inUse) return (int ) DXL_NOTINUSE ;}
42 typedef void *blitFunc
;
43 /*typedef void (*blitFunc2)(DXL_XIMAGE_HANDLE,DXL_VSCREEN_HANDLE); */
45 typedef int DXL_BLIT_FORMAT
;
61 typedef struct tagflgs
{
64 unsigned clutOwner
: 1;
65 unsigned doCompleteBlit
: 1;
66 unsigned keyFrame
: 1;
67 unsigned nullFrame
: 1;
68 unsigned interframe
: 1;
70 unsigned allocated
: 1;
73 typedef struct vflgs
{
75 unsigned showInfoDots
: 1;
78 typedef struct frameheader
{
79 unsigned char hdrSize
;
81 unsigned char DeltaSet
;
85 unsigned short CheckSum
;
86 unsigned char CVersion
;
87 unsigned char metaType
;
88 unsigned char Frameinfo
;
89 unsigned char Control
;
90 unsigned short xoff
,yoff
,width
,height
;
93 typedef struct DXINFOSTRUCT
{
99 unsigned char *vectbl
;
113 base "class" for xImage(s):
115 enum DKOBJECTTYPE dkObjectType; // type of object
116 dkInfoFlags dkFlags; // universal flags
117 enum COLORDEPTH cDepth; // colorDepth
118 short imWidth,imHeight; // internal width & height
119 short x,y,w,h; // location and dx'd dimensions
120 unsigned char *addr; // pointer to compressed data
121 DXL_VSCREEN_HANDLE lVScreen; // last know destination
122 DXL_XIMAGE_HANDLE (*create)(void); // creator (constructor)
123 DXL_XIMAGE_HANDLE (*recreate)(void); // recreate base w/h/type/etc.
124 int (*destroy)(void); // destroyer (destructor)
125 int (*seedData)(void); // reseed with new compressed data
126 int (*dx)(void); // decompress (to vScreen)
127 int (*blit)(void); // blit from internal state
131 char *(*perfStats)(DXL_XIMAGE_HANDLE, char *storage); \
134 #define xImageBaseStruct \
135 enum DKOBJECTTYPE dkObjectType; \
136 dkInfoFlags dkFlags; \
137 enum COLORDEPTH colorDepth; \
138 short imWidth,imHeight; \
140 unsigned char *addr; \
141 DXL_VSCREEN_HANDLE lVScreen; \
142 enum BITDEPTH *bdPrefs; \
143 DXL_XIMAGE_HANDLE (*create)(void *); \
144 DXL_XIMAGE_HANDLE (*recreate)(DXL_XIMAGE_HANDLE,void *,int,int,int,int); \
145 int (*destroy)(DXL_XIMAGE_HANDLE); \
146 int (*seedData)(DXL_XIMAGE_HANDLE); \
147 int (*dx)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
148 int (*blit)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
149 int (*internalFormat)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
150 int (*verify)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
152 long (*GetXImageCSize)(DXL_XIMAGE_HANDLE); \
153 void *(*getFrameBuffer)(DXL_XIMAGE_HANDLE)
155 typedef struct tXImage
{
159 typedef struct tXImage1
{
162 /********** TM1 specific follows **********/
163 enum IMAGETYPE imType
;
165 unsigned char *lineBuffer
;
168 unsigned long *chromaBuffer
;
169 int chromaBufferSize
;
171 short dxCount
; /* number of lines left to decompress */
175 short sprColor
; /* sprite mode and color for blending */
178 } DXL_XIMAGE_1
,*DXL_XIMAGE_1HANDLE
;
180 typedef struct vScreen
{
181 enum DKOBJECTTYPE dkObjectType
;
182 unsigned char *addr
,*laddr
; /* address of destination and what it was the last time */
183 unsigned char *bAddr
,*bOffsetAddr
; /* address of sprite background */
184 enum BITDEPTH bd
; /* format of destination */
185 enum BLITQUALITY bq
; /* blit translation mode */
186 short pitch
,height
; /* pitch and height of dest */
187 short bx
,by
,bPitch
; /* x,y, and pitch of background */
188 short viewX
,viewY
; /* offset/clipping viewport within destination */
190 short clipX
,clipY
; /* clipping rectangle within viewport */
193 DXL_XIMAGE_HANDLE lXImage
; /* last XImage decompressed here, useful for smart blitting */
194 unsigned char *clut1
,*clut2
;
195 DXL_BLIT_FORMAT blitFormat
;
202 unsigned char *drawAddr
;
208 /* private functions */
209 int decodeHeader(void *data
,register dxInfoStruct
*dxInfo
);
212 #define MAX_CDEPTHS DXMAX
213 #define MAX_BQUALITIES DXBLITMAX
215 typedef enum tDXL_INTERNAL_FORMAT
{
216 DXL_NULL_IFORMAT
= -1,
229 } DXL_INTERNAL_FORMAT
;
231 DXL_BLIT_FORMAT
DXL_ReserveBlitter(void);
232 DXL_BLIT_FORMAT
DXL_OverrideBlitter(enum BLITQUALITY bq
,enum BITDEPTH bd
);
233 int DXL_RegisterBlitter(DXL_BLIT_FORMAT dFormat
, DXL_INTERNAL_FORMAT
,
234 blitFunc blit
, blitFunc setup
, blitFunc exit
);
236 blitFunc
DXL_GetBlitFunc(DXL_XIMAGE_HANDLE
,DXL_VSCREEN_HANDLE
);
237 blitFunc
DXL_GetBlitSetupFunc(DXL_XIMAGE_HANDLE
,DXL_VSCREEN_HANDLE
);
238 blitFunc
DXL_GetBlitExitFunc(DXL_XIMAGE_HANDLE
,DXL_VSCREEN_HANDLE
);
240 blitFunc
DXL_GetVBlitFunc(DXL_VSCREEN_HANDLE
,DXL_VSCREEN_HANDLE
);
241 blitFunc
DXL_GetVBlitSetupFunc(DXL_VSCREEN_HANDLE
,DXL_VSCREEN_HANDLE
);
242 blitFunc
DXL_GetVBlitExitFunc(DXL_VSCREEN_HANDLE
,DXL_VSCREEN_HANDLE
);
244 DXL_BLIT_FORMAT
DXL_GetVScreenBlitFormat(DXL_VSCREEN_HANDLE
);
245 DXL_INTERNAL_FORMAT
DXL_GetXImageInternalFormat(DXL_XIMAGE_HANDLE
,DXL_VSCREEN_HANDLE
);
247 DXL_INTERNAL_FORMAT
DXL_GetVScreenInternalFormat(DXL_VSCREEN_HANDLE vScreen
);
249 int dxl_GetAlgHandle(unsigned long fourcc
);
250 int dxl_RegisterInternalFormat(int xHandle
, DXL_INTERNAL_FORMAT xFormat
);
252 int DXL_VScreenInfoDots(DXL_XIMAGE_HANDLE src
, DXL_VSCREEN_HANDLE dst
);
254 int DXL_GetVScreenSizeOfPixel(DXL_VSCREEN_HANDLE
);
255 unsigned char *DXL_GetDestAddress(DXL_XIMAGE_HANDLE src
, DXL_VSCREEN_HANDLE dst
);
257 int DXL_GetXImageOffset(DXL_XIMAGE_HANDLE
,int *,int *);
259 typedef DXL_XIMAGE_HANDLE (*createFunc
)(unsigned char *data
);
260 int DXL_RegisterXImage(createFunc creator
,unsigned long fourcc
,DXL_INTERNAL_FORMAT iForm
);
262 void registerDuckBlitters(void);
263 void resetBlitters(void);
265 void dxv_logo( unsigned char *dst
, int width
, int height
, int pitch
,
266 enum BITDEPTH format
, int dci
, enum BLITQUALITY bq
);
268 void dxl_24c(void *compaddr
, void *scrnaddr
,
269 int dstPitch
,int iskeyframe
,
270 int hinterp
,int doublesize
,
271 int scrnwidth
,int scrnheight
,
272 int blockpower
, int block2x
,
273 int forceheight
, char *lastdecomp
,
276 #define DXL_MKFOURCC( ch0, ch1, ch2, ch3 ) \
277 ( (unsigned long)(unsigned char)(ch0) | ( (unsigned long)(unsigned char)(ch1) << 8 ) | \
278 ( (unsigned long)(unsigned char)(ch2) << 16 ) | ( (unsigned long)(unsigned char)(ch3) << 24 ) )
280 #if defined(__cplusplus)