You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
391 lines
16 KiB
391 lines
16 KiB
/*----------------------------------------------------------------------------
|
|
;
|
|
; jgdw.h -- JGDW decoder API
|
|
;
|
|
; Copyright (c) 1994-1996 Johnson-Grace Company, all rights reserved
|
|
;
|
|
; This file contains all the defines necessary to interface the
|
|
; Johnson-Grace decompressor.
|
|
;
|
|
;---------------------------------------------------------------------------*/
|
|
|
|
#ifndef JGDW_H
|
|
#define JGDW_H 1
|
|
|
|
#ifdef _MAC
|
|
#include <Types.h>
|
|
#include <Palettes.h>
|
|
#include <QuickDraw.h>
|
|
#include <QDOffscreen.h>
|
|
#else
|
|
#pragma warning(disable:4201)
|
|
#include <windows.h>
|
|
#pragma warning(default:4201)
|
|
#endif
|
|
|
|
#include "jgtypes.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" { /* Indicate C declarations for C++ */
|
|
#endif
|
|
|
|
|
|
#define JG_ARTIMAGE_INFO JG_RAWIMAGE_INFO
|
|
#define JgGetImageHandleDIB JgGetImage
|
|
#define JgGetMaskDIB JgGetMask
|
|
#define NormalUpdateRect OldRect
|
|
|
|
#ifdef _MAC
|
|
|
|
#define JGDW_CALL
|
|
|
|
typedef struct JGDW_RECORD_TAG JGDW_RECORD;
|
|
typedef JGDW_RECORD JGPTR JGDW_HDEC;
|
|
|
|
typedef GWorldPtr JGDW_HBITMAP;
|
|
typedef Rect JGDW_RECT;
|
|
typedef RGBColor JGDW_COLOR;
|
|
typedef ColorInfo JGDW_PALETTEENTRY;
|
|
|
|
#else
|
|
|
|
#if defined(_WIN32) || defined(__FLAT__) /* 16/32 bit compatibility */
|
|
#ifndef JGDW_DECLSPEC
|
|
#define JGDW_DECLSPEC __declspec(dllimport)
|
|
#endif
|
|
#define JGDW_CALL JGDW_DECLSPEC WINAPI
|
|
#else
|
|
#ifndef JGDW_DECLSPEC
|
|
#define JGDW_DECLSPEC _export
|
|
#endif
|
|
#define JGDW_CALL JGDW_DECLSPEC WINAPI
|
|
#endif
|
|
|
|
typedef HGLOBAL JGDW_HDEC;
|
|
typedef HGLOBAL JGDW_HBITMAP;
|
|
typedef RECT JGDW_RECT;
|
|
typedef PALETTEENTRY JGDW_COLOR;
|
|
typedef PALETTEENTRY JGDW_PALETTEENTRY;
|
|
|
|
#endif
|
|
|
|
typedef struct JGDW_CONTEXT JGDW_CONTEXT;
|
|
typedef JGDW_CONTEXT JGPTR JGDW_HCONTEXT;
|
|
|
|
|
|
#define JG_HEADER_SIZE 40 /* Min # of bytes for JgQueryArtImage() */
|
|
|
|
/*
|
|
** Note: the Decode library returns status codes as integers.
|
|
** Zero is returned for success. A non-zero return means that some
|
|
** exception occurred. Non-documented exceptions should be treated as
|
|
** non-recoverable errors. In this case the application should print the
|
|
** full integer value to aid support after the product is in the field.
|
|
**
|
|
** The application can determine the class of the exception by masking
|
|
** off the high order bits of the word. See JgTypes.h for JG_ERR_xxx
|
|
** defines.
|
|
**
|
|
** Final Note: Currently all nonzero returns should be treated as
|
|
** non-recoverable errors.
|
|
*/
|
|
|
|
#define JGD_STATUS_SUCCESS 0
|
|
#define JGD_STATUS_MEMERR (300 | JG_ERR_MEMORY)
|
|
#define JGD_STATUS_BADARG (301 | JG_ERR_ARG)
|
|
#define JGD_STATUS_ERROR (302 | JG_ERR_STATUS)
|
|
#define JGD_STATUS_NOPALETTE (303 | JG_ERR_STATUS)
|
|
#define JGD_STATUS_BADDATA (304 | JG_ERR_DATA)
|
|
#define JGD_STATUS_IERROR (305 | JG_ERR_CHECK)
|
|
#define JGD_STATUS_TOOWIDE (306 | JG_ERR_ARG)
|
|
|
|
/* Not Valid because not enough data */
|
|
#define JGD_STATUS_INVALID (307 | JG_ERR_ARG)
|
|
|
|
/* Unsupported version of compression */
|
|
#define JGD_STATUS_BADVERSION (308 | JG_ERR_VERSION)
|
|
/* Unsupported Sub Version of file */
|
|
#define JGD_STATUS_BADSUBVER (309 | JG_ERR_VERSION)
|
|
/* File segments in wrong order */
|
|
#define JGD_STATUS_BADORDER (310 | JG_ERR_DATA)
|
|
/* Segment is shorter than expected */
|
|
#define JGD_STATUS_SHORTSEG (311 | JG_ERR_DATA)
|
|
/* Input Buffer is shorter than necessary */
|
|
#define JGD_STATUS_SHORTBUF (312 | JG_ERR_DATA)
|
|
/* Decodeable with some degradation */
|
|
#define JGD_STATUS_OLDRESOURCE (313 | JG_ERR_STATUS)
|
|
/* Decodeable with extreme degradation */
|
|
#define JGD_STATUS_NORESOURCE (314 | JG_ERR_STATUS)
|
|
/* Not decodeable because missing resource */
|
|
#define JGD_STATUS_BADRESOURCE (315 | JG_ERR_STATUS)
|
|
/* Resource not found */
|
|
#define JGD_STATUS_NOTFOUND (316 | JG_ERR_STATUS)
|
|
/* The Resource data is corrupted */
|
|
#define JGD_STATUS_BADRCDATA (317 | JG_ERR_DATA)
|
|
|
|
#define JGD_STATUS_READY (318 | JG_ERR_STATUS)
|
|
#define JGD_STATUS_WAITING (319 | JG_ERR_STATUS)
|
|
#define JGD_STATUS_DONE (320 | JG_ERR_STATUS)
|
|
|
|
/* CB Patterns Missing */
|
|
#define JGD_STATUS_NOPATTERNS (321 | JG_ERR_STATUS)
|
|
/* Data is not in ART format */
|
|
#define JGD_STATUS_NOTART (322 | JG_ERR_STATUS)
|
|
/* End of file found */
|
|
#define JGD_STATUS_EOF (323 | JG_ERR_STATUS)
|
|
/* Result is too big */
|
|
#define JGD_STATUS_TOOBIG (324 | JG_ERR_STATUS)
|
|
/* Invalid state for requested operation */
|
|
#define JGD_STATUS_BADSTATE (325 | JG_ERR_STATE)
|
|
/* Invalid or corrupted handle */
|
|
#define JGD_STATUS_BADHANDLE (326 | JGD_STATUS_BADARG)
|
|
#define JGD_STATUS_LIB_NOT_FOUND (327 | JG_ERR_STATUS)
|
|
#define JGD_STATUS_UNSUPPORTED (328 | JG_ERR_DATA)
|
|
#define JGD_STATUS_UNKNOWN (329 | JG_ERR_DATA)
|
|
#define JGD_STATUS_OBSOLETE (330 | JG_ERR_VERSION)
|
|
#define JGD_STATUS_BADGAMMA (331 | JG_ERR_ARG) /* Bad gamma argument(s) */
|
|
|
|
/*
|
|
** These defines are used to select the various image decoding options.
|
|
*/
|
|
|
|
#define JG_OPTION_DITHER 0x0001 /* To Request dithering */
|
|
#define JG_OPTION_USEDEFAULT_PALETTE 0x0002 /* To force Default Palette */
|
|
#define JG_OPTION_FULLIMAGE 0x0008 /* To request full image */
|
|
#define JG_OPTION_BACKGROUNDCOLOR 0x10 /* To enable Background color */
|
|
#define JG_OPTION_INHIBIT_AUDIO 0x20 /* To disable audio, if any */
|
|
#define JG_OPTION_ONEPASS 0x0080 /* To request one pass decoding. */
|
|
#define JG_OPTION_MASK_BITMAP 0x0100 /* Create transparency mask 1=opaque */
|
|
#define JG_OPTION_IMAGEFORMAT 0x0200 /* Decode specific image format */
|
|
#define JG_OPTION_GAMMACORRECT 0x0400 /* Perform gamma correction */
|
|
#define JG_OPTION_COMMONDEVICE 0x0800 /* Mac only: use common GDevice */
|
|
#define JG_OPTION_TRANSINDEX 0x1000 /* Enables TransIndex field */
|
|
|
|
|
|
/*
|
|
** These defines indicate the type of palettizing actually done by
|
|
** the decoder. They are returned in JgGetImageInfo().
|
|
*/
|
|
|
|
#define JG_PALETTE_MODE_OFF 0 /* No Palette, 24-bit */
|
|
#define JG_PALETTE_MODE_OPT 1 /* Use Optimal Palette, if Possible */
|
|
#define JG_PALETTE_MODE_DEFAULT 2 /* Use the input default palette */
|
|
#define JG_PALETTE_MODE_332 3 /* Use the standard 332 palette */
|
|
|
|
#define JG_POSTSCALE_LONGSIDE 0x0001 /* Do Post Scaling by long side */
|
|
#define JG_POSTSCALE_X 0x0002 /* Do Post Scaling in X */
|
|
#define JG_POSTSCALE_Y 0x0004 /* Do Post Scaling in Y */
|
|
#define JG_POSTSCALE_BESTFIT 0x0008 /* Do Post Scale with BestFit method */
|
|
|
|
// Use these defines for both GammaIn and GammaOut
|
|
#define JG_GAMMA_NONE 100 /* No gamma correction */
|
|
#define JG_GAMMA_MAC 180 /* Correction required for Mac = 1.8 */
|
|
#define JG_GAMMA_PC 250 /* Correction required for PC = 2.5 */
|
|
|
|
typedef struct {
|
|
UINTW nSize; /* Size of this structure, set be caller */
|
|
UINTW ColorDepth; /* Color depth to use (4, 8, or 24) */
|
|
UINTW DecodeOptions; /* Decoding Options */
|
|
JGDW_PALETTEENTRY JGPTR DefaultPalette; /* Default Palette, or NULL if none */
|
|
UINTW PaletteSize; /* Size of Default Palette, if any */
|
|
UINTW SplashDupFactor; /* Replication Factor of Miniature in Full */
|
|
/* image; 0=Off, >100=Full Size */
|
|
JGBOOL bTrueSplash; /* Save splash image until completely rdy */
|
|
UINTW PostScaleFlags; /* Defines Post Scale. Or of JG_POSTSCALE_xxx */
|
|
UINTW ScaledLongSide; /* Used for Post scale, for JG_POSTSCALE_LONGSIDE */
|
|
UINTW ScaledX; /* Used for Post scale, for JG_POSTSCALE_X */
|
|
UINTW ScaledY; /* Used for Post scale, for JG_POSTSCALE_Y */
|
|
JGDW_COLOR BackgroundColor; /* Used to specify background color */
|
|
UINTW AudioOptions; /* Defined elsewhere (in JGAW.H) */
|
|
JGFOURCHAR ImageFormat;/* Specify image format or 'auto' for autodetect */
|
|
UINTW GammaIn; /* Default input gamma correction */
|
|
UINTW GammaOut; /* Desired output gamma correction */
|
|
UINTW TransIndex; /* Make this color transparent */
|
|
} JG_DECOMPRESS_INIT;
|
|
|
|
typedef struct {
|
|
UINTW nSize; /* Size of this structure, set by caller */
|
|
JGBOOL bError; /* Out: True if error detected which
|
|
prevents further decoding */
|
|
JGBOOL bImageDone; /* True if no further input required */
|
|
JGBOOL bNewNormalPixels; /* True if Pixels ready in normal image */
|
|
JGBOOL Reserved1;
|
|
JGDW_RECT OldRect; /* For compatibility */
|
|
JGDW_RECT UpdateRect; /* Update region of image */
|
|
UINTW PaletteMode; /* Type of palettizing being done */
|
|
JGERR iErrorReason; /* Status code for error, if any */
|
|
JGFOURCHAR ImageFormat; /* Format of compressed image */
|
|
UINTW PaletteColors; /* Number of colors in palette */
|
|
UINTW TransIndex; /* Index of transparent color (0xffff=none) */
|
|
} JG_DECOMPRESS_INFO;
|
|
|
|
typedef struct {
|
|
UINTW nSize; /* Size of this structure, set by caller */
|
|
UINTW Version; /* File's Version */
|
|
UINTW SubVersion; /* File's SubVersion */
|
|
JGBOOL Decodeable; /* Nonzero if file can be decoded */
|
|
/* The following elements are only */
|
|
/* Valid if the image is decodeable */
|
|
UINTW Rows; /* Actual Rows at compress time */
|
|
UINTW Cols; /* Actual Cols at compress time */
|
|
JGBOOL HasPalette; /* If Nonzero, image contains a palette */
|
|
JGBOOL HasOverlays; /* If Nonzero, image has enhancements */
|
|
JGFOURCHAR ImageFormat; /* Four-character image type code */
|
|
UINTW ColorDepth; /* Native color depth of image */
|
|
} JG_RAWIMAGE_INFO;
|
|
|
|
/*
|
|
** The following are prototypes to Decoder functions.
|
|
*/
|
|
|
|
#ifdef __CFM68K__
|
|
#pragma import on
|
|
#endif
|
|
|
|
//JGERR JGDW_CALL JgSetMemCallbacks(
|
|
// void * (* JGFUNC memAlloc)(UINT32 size), /* malloc */
|
|
// void (* JGFUNC memFree)(void *ptr) /* free */
|
|
//);
|
|
|
|
JGERR JGDW_CALL JgSetDecompressResourceBuffer(
|
|
UINT8 JGPTR pBuffer, /* The pointer to the resource buffer */
|
|
UINT32 BufSize /* The size of the buffer */
|
|
);
|
|
|
|
|
|
/* The pointer returned by JgGetDecompressCaps points to an array of */
|
|
/* JG_READER_DESC structures. A last dummy element exists with .nSize == 0 */
|
|
JGERR JGDW_CALL JgGetDecompressCaps(
|
|
JG_READER_DESC JGPTR JGPTR FormatList /* Pointer to reader list. */
|
|
);
|
|
|
|
|
|
JGERR JGDW_CALL JgCreateDecompressContext(
|
|
JGDW_HCONTEXT JGPTR hContext, // OUT: context handle
|
|
JG_DECOMPRESS_INIT JGPTR InitStruct // IN: filled init structure
|
|
);
|
|
|
|
JGERR JGDW_CALL JgCreateDecompressor(
|
|
JGDW_HDEC JGPTR hDec, // OUT: decompression handle
|
|
JGDW_HCONTEXT hContext, // IN: context handle
|
|
JG_DECOMPRESS_INIT JGPTR Init // IN: null, or override of context
|
|
);
|
|
|
|
JGERR JGDW_CALL JgDestroyDecompressor(
|
|
JGDW_HDEC hDec // IN: decompression handle
|
|
);
|
|
|
|
JGERR JGDW_CALL JgDestroyDecompressContext(
|
|
JGDW_HCONTEXT hContext // IN: context handle
|
|
);
|
|
|
|
JGERR JGDW_CALL JgInitDecompress(
|
|
JGDW_HDEC JGPTR hJgImageOutput, /* A pntr to recve the Img handle. */
|
|
JG_DECOMPRESS_INIT JGPTR InitStruct /* A filled init structure */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgQueryArtImage(
|
|
UINT8 JGHPTR pBuf, /* First bytes of the compressed image */
|
|
UINT32 nBufSize /* Size of Buffer */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetImageInfo(
|
|
UINT8 JGHPTR pBuf, /* First bytes of the compressed image */
|
|
UINT32 nBufSize, /* Number of bytes in buffer */
|
|
JG_RAWIMAGE_INFO JGPTR Info
|
|
);
|
|
|
|
JGERR JGDW_CALL JgDecompressDone(
|
|
JGDW_HDEC hJgImage /* Handle to Decompress Struct */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetImage(
|
|
JGDW_HDEC hJgImage, /* Handle to Decompression Structure */
|
|
JGDW_HBITMAP JGPTR hBitmap /* Output Handle to bitmap, if it exists */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgDecompressImageBlock(
|
|
JGDW_HDEC hJgImage, /* Handle to Decompress Struct */
|
|
UINT8 JGHPTR pImageBuf, /* Input buffer of compressed image data */
|
|
UINT32 nBufSize, /* Number of bytes of data in buffer */
|
|
JGBOOL JGPTR bNewData /* True if new data are available */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetDecompressInfo(
|
|
JGDW_HDEC hJgImage, /* Handle to Decompress Struct */
|
|
JG_DECOMPRESS_INFO JGPTR Info /* Out: Filled Info struct */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetDecoderVersion(
|
|
char JGPTR Version
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetMiniatureOffset(
|
|
UINT8 JGHPTR pBuf, /* Entire compressed image */
|
|
UINT32 nBufSize, /* Size of compressed image */
|
|
UINT32 JGPTR Offset /* Output Offset to End of Miniature */
|
|
);
|
|
|
|
JGERR JGDW_CALL JgGetMask(
|
|
JGDW_HDEC hJgImage, /* Handle to Decompression Structure */
|
|
JGDW_HBITMAP JGPTR hMask /* Output Handle to Mask, if it exists */
|
|
);
|
|
|
|
|
|
JGERR JGDW_CALL JgSetDebug(JGDW_HDEC hJgVars,
|
|
UINTW DebugOptions);
|
|
|
|
/*
|
|
** New (8/95) Lossless decompression definitions.
|
|
*/
|
|
|
|
#ifndef JG_LOSSLESS_INFO_DEFINED // (also defined in jgew.h)
|
|
#define JG_LOSSLESS_INFO_DEFINED 1
|
|
typedef struct {
|
|
UINT16 nSize; /* Size of structure in bytes */
|
|
INT16 SearchSize; /* (Compression control) */
|
|
UINT32 CompressedSize; /* Total compressed block bytes */
|
|
UINT32 CompressedSoFar; /* Compressed processed so far */
|
|
UINT32 CompressedLastCall; /* Compressed processed last call */
|
|
UINT32 DecompressedSize; /* Total decompressed block bytes */
|
|
UINT32 DecompressedSoFar; /* Decompressed processed so far */
|
|
UINT32 DecompressedLastCall; /* Decompressed processed last call */
|
|
} JG_LOSSLESS_INFO;
|
|
#endif
|
|
|
|
typedef void JGPTR JG_LOSSLESS_HDEC; /* lossless decompression handle type */
|
|
|
|
JGERR JGDW_CALL JgLosslessDecompressQuery( /* Interrogate lossless stream */
|
|
UINT8 JGHPTR InBuffer, /* IN: Beginning of compressed stream */
|
|
UINT32 InBufferSize, /* IN: Bytes in InBuffer (0-n) */
|
|
JG_LOSSLESS_INFO JGPTR LosslessInfo); /* OUT: Stream info returned here */
|
|
|
|
JGERR JGDW_CALL JgLosslessDecompressCreate( /* Create decompression handle */
|
|
JG_LOSSLESS_HDEC JGPTR DecHandle); /* IN: Pointer to new handle */
|
|
|
|
void JGDW_CALL JgLosslessDecompressDestroy( /* Destroy decompression handle */
|
|
JG_LOSSLESS_HDEC DecHandle); /* IN: Handle from decompress create */
|
|
|
|
JGERR JGDW_CALL JgLosslessDecompressReset( /* Reset existing handle */
|
|
JG_LOSSLESS_HDEC DecHandle); /* IN: Handle from decompress create */
|
|
|
|
JGERR JGDW_CALL JgLosslessDecompressBlock( /* decompress block of data */
|
|
JG_LOSSLESS_HDEC DecHandle, /* IN: Handle from decompress create */
|
|
UINT8 JGHPTR InBuffer, /* IN: Input (compressed) data */
|
|
UINT32 InBufferSize, /* IN: Bytes at *InBuffer (0-n) */
|
|
UINT8 JGHPTR OutBuffer, /* OUT: Output (decompressed result) buff */
|
|
UINT32 OutBufferSize, /* IN: Free bytes at *OutBuffer */
|
|
JG_LOSSLESS_INFO JGPTR LosslessInfo); /* OUT: Updated info returned here */
|
|
|
|
JGERR JGDW_CALL JgLosslessDecompressPartitionReset( /* new partition reset */
|
|
JG_LOSSLESS_HDEC DecHandle); /* IN: Handle from decompress create */
|
|
|
|
#ifdef __CFM68K__
|
|
#pragma import off
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|