308 lines
7.9 KiB
C
308 lines
7.9 KiB
C
|
//==========================================================================
|
||
|
//
|
||
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||
|
// PURPOSE.
|
||
|
//
|
||
|
// Copyright (c) 1999 - 2001 On2 Technologies Inc. All Rights Reserved.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#ifndef _dxl_main_h
|
||
|
#define _dxl_main_h
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
struct vScreen;
|
||
|
struct tXImage;
|
||
|
|
||
|
struct tAudioBuff;
|
||
|
struct tXAudioSource;
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#if defined(_WIN32_WCE)
|
||
|
#ifndef NULL
|
||
|
#define NULL 0
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#include "dkpltfrm.h"
|
||
|
//#include "duktypes.h"
|
||
|
#include "duck_dxl.h"
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define TMRTType 5
|
||
|
|
||
|
#define validate(x) {if (!x) return (int ) DXL_NULLSOURCE; if (!x->dkFlags.inUse) return (int ) DXL_NOTINUSE ;}
|
||
|
|
||
|
typedef void *blitFunc;
|
||
|
/*typedef void (*blitFunc2)(DXL_XIMAGE_HANDLE,DXL_VSCREEN_HANDLE); */
|
||
|
|
||
|
typedef int DXL_BLIT_FORMAT;
|
||
|
|
||
|
enum DKOBJECTTYPE {
|
||
|
DXUNUSED = 0,
|
||
|
DXXIMAGE = 1,
|
||
|
DXVSCREEN = 2
|
||
|
};
|
||
|
|
||
|
enum COLORDEPTH {
|
||
|
PALETTE8 = 0,
|
||
|
RGB555 = 1,
|
||
|
RGB555A = 2,
|
||
|
RGB888 = 3,
|
||
|
RGBA8888 = 4
|
||
|
};
|
||
|
|
||
|
typedef struct tagflgs {
|
||
|
unsigned inUse : 1;
|
||
|
unsigned DXed : 1;
|
||
|
unsigned clutOwner: 1;
|
||
|
unsigned doCompleteBlit : 1;
|
||
|
unsigned keyFrame : 1;
|
||
|
unsigned nullFrame : 1;
|
||
|
unsigned interframe : 1;
|
||
|
unsigned logo : 1;
|
||
|
unsigned allocated : 1;
|
||
|
} dkInfoFlags;
|
||
|
|
||
|
typedef struct vflgs {
|
||
|
unsigned clipped : 1;
|
||
|
unsigned showInfoDots : 1;
|
||
|
} vFlags;
|
||
|
|
||
|
typedef struct frameheader {
|
||
|
unsigned char hdrSize;
|
||
|
unsigned char Type;
|
||
|
unsigned char DeltaSet;
|
||
|
unsigned char Table;
|
||
|
unsigned short Ysize;
|
||
|
unsigned short Xsize;
|
||
|
unsigned short CheckSum;
|
||
|
unsigned char CVersion;
|
||
|
unsigned char metaType;
|
||
|
unsigned char Frameinfo;
|
||
|
unsigned char Control;
|
||
|
unsigned short xoff,yoff,width,height;
|
||
|
} FRAMEHEADER;
|
||
|
|
||
|
typedef struct DXINFOSTRUCT{
|
||
|
int imwidth;
|
||
|
int imheight;
|
||
|
int blockpower;
|
||
|
int lpbmione;
|
||
|
int block2x;
|
||
|
unsigned char *vectbl;
|
||
|
int hinterp;
|
||
|
int interframe;
|
||
|
int iskeyframe;
|
||
|
int sprite;
|
||
|
int bitcnt;
|
||
|
int hdrSize;
|
||
|
int drawing;
|
||
|
int fmt;
|
||
|
FRAMEHEADER f;
|
||
|
int algorithm;
|
||
|
} dxInfoStruct;
|
||
|
|
||
|
/*
|
||
|
base "class" for xImage(s):
|
||
|
|
||
|
enum DKOBJECTTYPE dkObjectType; // type of object
|
||
|
dkInfoFlags dkFlags; // universal flags
|
||
|
enum COLORDEPTH cDepth; // colorDepth
|
||
|
short imWidth,imHeight; // internal width & height
|
||
|
short x,y,w,h; // location and dx'd dimensions
|
||
|
unsigned char *addr; // pointer to compressed data
|
||
|
DXL_VSCREEN_HANDLE lVScreen; // last know destination
|
||
|
DXL_XIMAGE_HANDLE (*create)(void); // creator (constructor)
|
||
|
DXL_XIMAGE_HANDLE (*recreate)(void); // recreate base w/h/type/etc.
|
||
|
int (*destroy)(void); // destroyer (destructor)
|
||
|
int (*seedData)(void); // reseed with new compressed data
|
||
|
int (*dx)(void); // decompress (to vScreen)
|
||
|
int (*blit)(void); // blit from internal state
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
char *(*perfStats)(DXL_XIMAGE_HANDLE, char *storage); \
|
||
|
*/
|
||
|
|
||
|
typedef struct profilePack_t
|
||
|
{
|
||
|
UINT64 dxClocks;
|
||
|
UINT64 profileStart;
|
||
|
UINT64 profileEnd;
|
||
|
int frameCount;
|
||
|
|
||
|
} DXL_PROFILEPACK;
|
||
|
|
||
|
|
||
|
#define xImageBaseStruct \
|
||
|
enum DKOBJECTTYPE dkObjectType; \
|
||
|
dkInfoFlags dkFlags; \
|
||
|
enum COLORDEPTH colorDepth; \
|
||
|
short imWidth,imHeight; \
|
||
|
short x,y,w,h; \
|
||
|
unsigned char *addr; \
|
||
|
DXL_VSCREEN_HANDLE lVScreen; \
|
||
|
enum BITDEPTH *bdPrefs; \
|
||
|
DXL_XIMAGE_HANDLE (*create)(void *); \
|
||
|
DXL_XIMAGE_HANDLE (*recreate)(DXL_XIMAGE_HANDLE,void *,int,int,int,int); \
|
||
|
int (*destroy)(DXL_XIMAGE_HANDLE); \
|
||
|
int (*seedData)(DXL_XIMAGE_HANDLE); \
|
||
|
int (*dx)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
|
||
|
int (*blit)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
|
||
|
int (*internalFormat)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
|
||
|
int (*verify)(DXL_XIMAGE_HANDLE, DXL_VSCREEN_HANDLE); \
|
||
|
int fSize; \
|
||
|
long (*GetXImageCSize)(DXL_XIMAGE_HANDLE); \
|
||
|
void *(*getFrameBuffer)(DXL_XIMAGE_HANDLE); \
|
||
|
void (*setParameter)(DXL_XIMAGE_HANDLE, int , unsigned long );\
|
||
|
DXL_PROFILEPACK prof
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct tXImage{
|
||
|
xImageBaseStruct;
|
||
|
} DXL_XIMAGE;
|
||
|
|
||
|
typedef struct tXImage1{
|
||
|
xImageBaseStruct;
|
||
|
|
||
|
/********** TM1 specific follows **********/
|
||
|
enum IMAGETYPE imType;
|
||
|
|
||
|
unsigned char *lineBuffer;
|
||
|
int lineBufferSize;
|
||
|
|
||
|
unsigned long *chromaBuffer;
|
||
|
int chromaBufferSize;
|
||
|
|
||
|
short dxCount; /* number of lines left to decompress */
|
||
|
short lw,lh;
|
||
|
|
||
|
enum BGMODE sprMode;
|
||
|
short sprColor; /* sprite mode and color for blending */
|
||
|
|
||
|
dxInfoStruct dxInfo;
|
||
|
} DXL_XIMAGE_1,*DXL_XIMAGE_1HANDLE;
|
||
|
|
||
|
typedef struct vScreen{
|
||
|
enum DKOBJECTTYPE dkObjectType;
|
||
|
unsigned char *addr,*laddr; /* address of destination and what it was the last time */
|
||
|
unsigned char *bAddr,*bOffsetAddr; /* address of sprite background */
|
||
|
enum BITDEPTH bd; /* format of destination */
|
||
|
enum BLITQUALITY bq; /* blit translation mode */
|
||
|
short pitch,height; /* pitch and height of dest */
|
||
|
short bx,by,bPitch; /* x,y, and pitch of background */
|
||
|
short viewX,viewY; /* offset/clipping viewport within destination */
|
||
|
short viewW,viewH;
|
||
|
short clipX,clipY; /* clipping rectangle within viewport */
|
||
|
short clipW,clipH;
|
||
|
dkInfoFlags dkFlags;
|
||
|
DXL_XIMAGE_HANDLE lXImage; /* last XImage decompressed here, useful for smart blitting */
|
||
|
unsigned char *clut1,*clut2;
|
||
|
DXL_BLIT_FORMAT blitFormat;
|
||
|
|
||
|
void *blitSetup;
|
||
|
void *blitter;
|
||
|
void *blitExit;
|
||
|
|
||
|
int vesaMode;
|
||
|
unsigned char *drawAddr;
|
||
|
short drawW,drawH;
|
||
|
vFlags flags;
|
||
|
|
||
|
} DXL_VSCREEN;
|
||
|
|
||
|
/* private functions */
|
||
|
int decodeHeader(void *data,register dxInfoStruct *dxInfo);
|
||
|
|
||
|
|
||
|
#define MAX_CDEPTHS DXMAX
|
||
|
#define MAX_BQUALITIES DXBLITMAX
|
||
|
|
||
|
typedef enum tDXL_INTERNAL_FORMAT {
|
||
|
DXL_NULL_IFORMAT = -1,
|
||
|
DXL_LINE16 = 0,
|
||
|
DXL_LINE16i = 1,
|
||
|
DXL_LINE16hi = 2,
|
||
|
DXL_LINE16spr = 3,
|
||
|
DXL_LINE8 = 4,
|
||
|
TM2_BLOCK24 = 5,
|
||
|
TM1_24 = 6,
|
||
|
TORQ_YUY2 = 7,
|
||
|
TORQ_YUY2hi = 8,
|
||
|
YV12 = 9,
|
||
|
SWET_YUV = 10,
|
||
|
DXL_MAX_IFORMATS
|
||
|
} DXL_INTERNAL_FORMAT;
|
||
|
|
||
|
DXL_BLIT_FORMAT DXL_ReserveBlitter(void);
|
||
|
DXL_BLIT_FORMAT DXL_OverrideBlitter(enum BLITQUALITY bq,enum BITDEPTH bd);
|
||
|
int DXL_RegisterBlitter(DXL_BLIT_FORMAT dFormat, DXL_INTERNAL_FORMAT ,
|
||
|
blitFunc blit, blitFunc setup, blitFunc exit);
|
||
|
|
||
|
blitFunc DXL_GetBlitFunc(DXL_XIMAGE_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
blitFunc DXL_GetBlitSetupFunc(DXL_XIMAGE_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
blitFunc DXL_GetBlitExitFunc(DXL_XIMAGE_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
|
||
|
blitFunc DXL_GetVBlitFunc(DXL_VSCREEN_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
blitFunc DXL_GetVBlitSetupFunc(DXL_VSCREEN_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
blitFunc DXL_GetVBlitExitFunc(DXL_VSCREEN_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
|
||
|
DXL_BLIT_FORMAT DXL_GetVScreenBlitFormat(DXL_VSCREEN_HANDLE );
|
||
|
DXL_INTERNAL_FORMAT DXL_GetXImageInternalFormat(DXL_XIMAGE_HANDLE ,DXL_VSCREEN_HANDLE );
|
||
|
|
||
|
DXL_INTERNAL_FORMAT DXL_GetVScreenInternalFormat(DXL_VSCREEN_HANDLE vScreen);
|
||
|
|
||
|
int dxl_GetAlgHandle(unsigned long fourcc);
|
||
|
int dxl_RegisterInternalFormat(int xHandle, DXL_INTERNAL_FORMAT xFormat);
|
||
|
|
||
|
int DXL_VScreenInfoDots(DXL_XIMAGE_HANDLE src, DXL_VSCREEN_HANDLE dst);
|
||
|
|
||
|
int DXL_GetVScreenSizeOfPixel(DXL_VSCREEN_HANDLE );
|
||
|
unsigned char *DXL_GetDestAddress(DXL_XIMAGE_HANDLE src, DXL_VSCREEN_HANDLE dst);
|
||
|
|
||
|
int DXL_GetXImageOffset(DXL_XIMAGE_HANDLE,int *,int *);
|
||
|
|
||
|
typedef DXL_XIMAGE_HANDLE (*createFunc)(unsigned char *data);
|
||
|
int DXL_RegisterXImage(createFunc creator,unsigned long fourcc,DXL_INTERNAL_FORMAT iForm);
|
||
|
|
||
|
void registerDuckBlitters(void);
|
||
|
void resetBlitters(void);
|
||
|
|
||
|
void dxv_logo( unsigned char *dst, int width, int height, int pitch,
|
||
|
enum BITDEPTH format, int dci, enum BLITQUALITY bq);
|
||
|
|
||
|
void dxl_24c(void *compaddr, void *scrnaddr,
|
||
|
int dstPitch,int iskeyframe,
|
||
|
int hinterp,int doublesize,
|
||
|
int scrnwidth,int scrnheight,
|
||
|
int blockpower, int block2x,
|
||
|
int forceheight, char *lastdecomp,
|
||
|
char *lastcdecomp);
|
||
|
|
||
|
#define DXL_MKFOURCC( ch0, ch1, ch2, ch3 ) \
|
||
|
( (unsigned long)(unsigned char)(ch0) | ( (unsigned long)(unsigned char)(ch1) << 8 ) | \
|
||
|
( (unsigned long)(unsigned char)(ch2) << 16 ) | ( (unsigned long)(unsigned char)(ch3) << 24 ) )
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|