diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/libvp6/include/duck_dxl.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/libvp6/include/duck_dxl.h')
-rw-r--r-- | Src/libvp6/include/duck_dxl.h | 583 |
1 files changed, 583 insertions, 0 deletions
diff --git a/Src/libvp6/include/duck_dxl.h b/Src/libvp6/include/duck_dxl.h new file mode 100644 index 00000000..942090b9 --- /dev/null +++ b/Src/libvp6/include/duck_dxl.h @@ -0,0 +1,583 @@ +#ifndef _duck_dxl_h +#define _duck_dxl_h + + +#include "duck_bmp.h" + + +/******************************************************************************\ +<table BGCOLOR=#FFC0C0 border=1 WIDTH=100% ><tr><td><b> + duck_dxl.h </b></td><td><b> TrueMotion include file for decompression libraries </b> + +</td></tr><tr><td> </td><td> Version: 6.0.0 +</td></tr><tr><td> </td><td> Updated: $Date: 2011/06/29 19:50:29 $ +</td></tr><tr><td> </td><td> Copyright (c) 1994-98, The Duck Corp. All rights reserved. +</td></tr><tr><td>Important Objects</td><td>The On2 Decompression services tries to abstract the various objects +used to decompress and render both audio and video. This allows the overall API to flex and accomodate new +decompression schemes and new destinations. +</td></tr><tr><td>DXL_XIMAGE_HANDLE</td><td>Abstract container object used to organize and control compressed +video. +</td></tr><tr><td>DXL_VSCREEN_HANDLE</td><td>Abstract container object used to organize and control display of +uncompressed video to a surface. +</td></tr><tr><td>DXL_XAUDIOSRC_HANDLE</td><td>Abstract container object used to organize and control +compressed audio. +</td></tr><tr><td>DXL_AUDIODST_HANDLE</td><td>Abstract container object used to organize and control +rendering / playing of uncompressed audio. +</td></tr> +</table> +******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/* enumerated data types */ + +typedef enum BLITQUALITY { + DXBLIT_SAME = 0, /* Blit directly, w/o stretching */ + DXBLIT_R1, + DXBLIT_R2, + DXBLIT_STRETCH, /* double horizontally, skip lines vertically */ + DXBLIT_R3, + DXBLIT_STRETCH_BRIGHT, /* double horizontally, interpolate vertically */ + DXBLIT_R4, + DXBLIT_R5, + DXBLIT_R6, + DXBLIT_NONE, + DXBLITMAX +} dxvBlitQuality ; + +typedef enum BITDEPTH { + DXRGBNULL = 0, + DXRGB8 = 1, + + DXRGB16_555 = 2, + DXRGB24 = 3, + DXRGB_UNUSED = 4, + DXRGB16VESA = 5, + DXRGB8VESA = 6, + DXRGB16_565 = 7, + + DXYUY2 = 8, + DXYVU9 = 9, + DXYV12 = 10, + DXUYVY = 11, + + DXRGB32 = 12, + DXRGB16VESA_565 = 13, + DXHALFTONE8 =14, + DXI420 = 15, + + DXYVYU = 16, + + DXMAX +} dxvBitDepth ; + +#define DXRGB16 DXRGB16_555 +#define DXRGB24CHAR DXRGB24 + +typedef enum OFFSETXY { + DXL_ABSOLUTE = 0, + DXL_RELATIVE +} dxvOffsetMode; + +typedef enum IMAGETYPE { + DXL_INTRAFRAME = 0, + DXL_INTERFRAME, + DXL_SPRITE +} dxvImageType; + + + +typedef enum DXL_ERR{ + DXL_LOW_ERR = -32000, + DXL_HARDWARE_ERROR = -16002, + DXL_HARDWARE_NOT_INITED = -16001, + DXL_HARDWARE_BUFFER_FULL = -16000, + DXL_INVALID_REQUEST = -9, + DXL_VERSION_CONFLICT = -8, + DXL_INVALID_DATA = -7, + DXL_INVALID_BLIT = -6, + DXL_BAD_DATA = -5, + DXL_ALLOC_FAILED = -4, + DXL_NULL_FRAME = -3, + DXL_NULLSOURCE = -2, + DXL_NOTINUSE = -1, + DXL_OK = 0, + DXL_HOLD_FRAME = 1 +} dxvError ; + + + + +typedef enum BGMODE /* sprite drawing modes + v1.0.2 supports NORM & NO_BACKGROUND */{ + NORM = 0, /* normal sprite mode, blend edges w/background */ + NO_BACKGROUND = 1,/* transparant sprite mode 1, + sets all background data transparant no blending */ + NORM_TRANS = 2, /* transparant sprite mode 2, + blend edges (alphas) w/separate background buffer, + set sprite background to trans */ + RGB_OPAQUE = 3, /* blend edges to sprColor, set background to sprColor*/ + RGB_TRANS = 4 /* blend edges w/sprColor, set background to trans */ +} dxvBackgroundMode ; + +/*********************************************************/ + +/* definition of data handles */ + +typedef struct vScreen *DXL_VSCREEN_HANDLE; +typedef struct tXImage *DXL_XIMAGE_HANDLE; + +/* main video decompression init, exit and query */ + + +/*@ +@Name DXL_InitVideo +@Description Initialize Video decompression services +@Return value DXL_OK on success. -1 unable to initialize library, insufficient memory available. +@*/ +int DXL_InitVideo( +int maxScreens, /* max Number of VScreens to allow. Outdated. Please pass zero ! */ +int maxImages /* max Number of xImages to allow. Outdated. Please pass zero ! */ +); + + + + +/*@ +@Name DXL_ExitVideo +@Description Exit and de-initialize video decompression library. Release any allocated data structures. +Always destroy xImages before calling this routine to avoid memory leaks. +@Return value none +@*/ +void DXL_ExitVideo(void); + + +/*get pointer to NULL terminated + array of supported fourCCs */ +unsigned long *DXL_GetFourCCList(void); + + +/*@ +@Name DXL_CreateXImage +@Description Create an xImage (decompressor) object, based on the compressed data provided. +@Return value returns a DXL_XIMAGE_HANDLE object ... also known as an xImage, or compressed image +@*/ +DXL_XIMAGE_HANDLE DXL_CreateXImage( +unsigned char *data /* compressed data */ +); + + + + +/*@ +@Name DXL_SetXImageCSize +@Description Set the size of the current compressed frame +@Return value echo back the compressed image size +@*/ +int DXL_SetXImageCSize( +DXL_XIMAGE_HANDLE xImage, /* compressed image handle */ +int compressedSize /* compressed image size */ +); + + + + +/*@ +@Name DXL_CreateXImageOfType +@Description Create an xImage (decompressor) object of a requested type based on a FOURCC. +Allocates buffers and initializes structures needed to decompress a source-compressed xImage. +@Return value Handle to xImage created by this call , null if cannot create. +@*/ +DXL_XIMAGE_HANDLE DXL_CreateXImageOfType( +unsigned char *data, /* pointer to compressed image data */ +unsigned long fccType /* FOURCC code indicating type of compressed image data */ +); + + + +/*@ +@Name DXL_CreateXImageFromBMI +@Description Create an xImage (decompressor) object of a requested type based on a FOURCC. +Allocates buffers and initializes structures needed to decompress a source-compressed xImage. +@Return value Handle to xImage created by this call , null if cannot create. +@*/ +DXL_XIMAGE_HANDLE DXL_CreateXImageFromBMI( +unsigned char *data, /* pointer to compressed image data */ +unsigned long biCompression, /* biCompression from BMIH */ +DK_BITMAPINFOHEADER *srcAndDst /* BMI data from AVI file or elsewhere */ +); + + + + +/*@ +@Name DXL_DestroyXImage +@Description destroy the specified xImage +@Return value void +@*/ +void DXL_DestroyXImage( +DXL_XIMAGE_HANDLE src /* handle to compressed image */ +); + + + +/*@ +@Name DXL_AlterXImageData +@Description Provides a compressed source with new data to decompress. New xImage attributes can be +queried any time after changing the address of the compressed data with this function. +@Return value DXL_OK on success or negative error code. -3 indicates that the pointer was passed in as null. +Some compression applications (such as Adobe Premiere) use this to indicate that the new frame is the same as +the previous frame, and the previous frame is to be held. +@*/ +int DXL_AlterXImageData( +DXL_XIMAGE_HANDLE src, /* handle to compressed image source (xImage) */ +unsigned char *ptrData /* pointer to compressed video data to be associated with xImage */ +); + + + +/*@ +@Name DXL_AlterXImage +@Description Explicitly alter attributes of an xImage. The use of this funtion +may affect the state of the xImage's frame buffer. During interframe compression, this can result +in corruption of the decompressed image. Make sure to use this function only prior to decompressing a keyframe. +@Return value handle to compressed image, or null if error. +@*/ +DXL_XIMAGE_HANDLE DXL_AlterXImage( +DXL_XIMAGE_HANDLE xImage, /* handle to compressed image */ +unsigned char *ptrData, /* pointer to compressed video data. */ +int xImType, /* new xImage type (DXL_INTRAFRAME, DXL_INTERFRAME). */ +dxvBitDepth bitDepth , /* bitdepth of decompressed data */ +int maxWidth, /* width of decompressed image */ +int maxHeight /* height of decompressed image */ +); + + + + +/*@ +@Name DXL_GetXImageCSize +@Description Get xImage compressed size +@Return value returns the compressed size +@*/ +long DXL_GetXImageCSize( +DXL_XIMAGE_HANDLE src /* handle to compressed image */ +); + + + +/*@ +@Name DXL_GetXImageXYWH +@Description get application specified x,y offset, and overall decompressed width and height. +x and y offsets are legacy fields, ignore. +@Return value DXL_OK on success, or negative error code. +@*/ +int DXL_GetXImageXYWH( + DXL_XIMAGE_HANDLE src, /* the xImage Handle. */ + int *x,int *y,int *w, int *h /* x,y,w,h - addresses for offsets and dimensions. */ + ); + + +/*@ +@Name DXL_IsXImageKeyFrame +@Description Check keyframe status of current image. +Use DXL_AlterXImageData to set the current frame and the use this call to detect keyframe status. +@Return value return 1 if this xImage is a keyFrame, 0 if not a keyframe. +@*/ +int DXL_IsXImageKeyFrame( + DXL_XIMAGE_HANDLE src /* handle to compressed image */ +); + + + +/*@ +@Name DXL_dxImageToVScreen +@Description Decompress and blit as a single process, according to current source and destination attributes. +Passing 0 can be used to skip a blit in order to reduce CPU load as needed (synchronization). +@Return value DXL_OK on success. 1 means place-holder frame. Negative means error. +@*/ +int DXL_dxImageToVScreen( + DXL_XIMAGE_HANDLE xImage, /* Handle to compresse image source (xImage). */ + DXL_VSCREEN_HANDLE dst /* Handle to destination surface (vScreen). Null means decompress without blit. */ + ); + + +/* compatibility check prior between + decompressor and destination */ +int DXL_CheckdxImageToVScreen( + DXL_XIMAGE_HANDLE src, + DXL_VSCREEN_HANDLE dst + ); + +/* blit from xImage internal "working area" to vScreen */ +int DXL_BlitXImageToVScreen( + DXL_XIMAGE_HANDLE src, + DXL_VSCREEN_HANDLE dst + ); + +/* vscreen management functions */ + +/*@ +@Name DXL_CreateVScreen +@Description Create a virtual screen for rendering, storing decompressed video. +@Return value returns a DXL_VSCREEN_HANDLE, or null if none available. +@*/ +DXL_VSCREEN_HANDLE DXL_CreateVScreen( + unsigned char *addr, /* The address where pixel data should be written */ + dxvBitDepth colorMode, /* Determines the colorspace and color depth of VScreen */ + short bytePitch, /* Offset from one raster to the next measured in bytes. */ + short height /* Number of rasters in a VScreen */ + ); + + + +/*@ +@Name DXL_AlterVScreen +@Description Alter address and attributes associated with a vscreen. +@Return value 0 for success or negatibe error code. +@*/ +int DXL_AlterVScreen( + DXL_VSCREEN_HANDLE dst, /* handle to a VScreen */ + unsigned char *addr, /* The address where pixel data should be written, or null for no change. */ + dxvBitDepth colorMode, /* Determines the colorspace and color depth of VScreen, or -1 for no change. */ + int bytePitch, /* offset from one raster to the next measured in bytes, or 0 for no change. */ + int height /* number of rasters in a VScreen, or 0 for no change. */ + ); + + +void DXL_VScreenSetInfoDotsFlag(DXL_VSCREEN_HANDLE vScreen, int showDots); + + +/* alter clipping rectangle of vScreen */ +/* not supported by all decompressors */ +int DXL_AlterVScreenClip( + DXL_VSCREEN_HANDLE dst, + int x,int y, + int w,int h + ); + +/* alter viewport rectangle of vScreen */ +/* width/height not supported by all decompressors */ +int DXL_AlterVScreenView( + DXL_VSCREEN_HANDLE dst, + int x,int y, + int w,int h + ); + + +/*@ +@Name DXL_DestroyVScreen +@Description Destroy a vScreen object/struct. +@Return value None +@*/ +void DXL_DestroyVScreen( + DXL_VSCREEN_HANDLE dst /* handle to virtual screen destination */ +); + + + + +/*@ +@Name DXL_SetVScreenBlitQuality +@Description set blit-quality of a vScreen same (normal), stretch (black lined) +stretch bright (stretched w/interpolation) +@Return value return prior blit-quality value. +@*/ +int DXL_SetVScreenBlitQuality( + DXL_VSCREEN_HANDLE dest, /* handle to vScreen */ + dxvBlitQuality bq /* new blit-quality value */ +); + + + + +/*@ +@Name DXL_GetVScreenBlitQuality +@Description Get vScreens current blit-quality. Blit-quality determines if and how stretching should occur during the blit. +@Return value returns member of enum called dxvBlitQuality, blit-quality value. +BLIT_SAME is direct transfer; BLIT_STRETCH does double wide pixels and raster skipping; BLIT_STRETCH_BRIGHT stretches in both horizontal and vertical directions. +@*/ +dxvBlitQuality DXL_GetVScreenBlitQuality( + DXL_VSCREEN_HANDLE /* handle to vScreen. */ +); + + + +/* alter spite background associated with a vscreen */ +/* used only by SegaSaturn for hardware sprite support */ +int DXL_AlterVScreenBackground( + DXL_VSCREEN_HANDLE , + unsigned char *, + dxvBitDepth bd ,int ,int ,int ,int + ); + +/* set DOS VESA mode for vScreen (DOS only) */ +int DXL_AlterVScreenVESAMode( + DXL_VSCREEN_HANDLE , + int vesaMode + ); + +/* set physical screen to vScreen's vesa mode */ +int DXL_ActivateVScreenVESAMode(DXL_VSCREEN_HANDLE); + +/* get vScreen (generally physical) vesa mode */ +int DXL_GetVScreenVESAMode(DXL_VSCREEN_HANDLE ); + + +/* copy one vScreen to another */ +/* provides support for offscreen compositing, + 16 bit and 8 bit modes only */ +int DXL_BlitVScreenToVScreen( + DXL_VSCREEN_HANDLE fromVScreen, + DXL_VSCREEN_HANDLE toVScreen + ); + +/* get attributes of the vScreen */ +int DXL_GetVScreenAttributes( + DXL_VSCREEN_HANDLE vScreen, + void **addr, + dxvBlitQuality *bq, + dxvBitDepth *bd, + short *pitch, + short *height + ); + +char *DXL_GetXImageStats(DXL_XIMAGE_HANDLE xImage,char *storage); + + +/* get vScreen's current viewport rectangle + a viewport represents an x,y, offset and + a clipping width and height */ +int DXL_GetVScreenView( + DXL_VSCREEN_HANDLE dst, + int *x,int *y,int *w,int *h + ); + +/* get vScreen's current clipping rectangle */ +int DXL_GetVScreenClip( + DXL_VSCREEN_HANDLE dst, + int *x,int *y,int *w,int *h + ); + +/* provide Color lookup tables for 8 bit support */ +int DXL_SetVScreenCLUTs( + DXL_VSCREEN_HANDLE vScr, + unsigned char *clpt, + unsigned char *clpt2, + int exp + ); + +/* return the palette currently used */ +int DXL_GetBitDepthPalette(dxvBitDepth colorMode, + unsigned char **pal); + +/* relinquish color lookup table structures */ +void DXL_ResetVScreenCLUTs( + DXL_VSCREEN_HANDLE vScr + ); + +/* check to see if a blit mode is supported */ + +int DXL_CheckVScreenBlit(DXL_VSCREEN_HANDLE dst,unsigned long fourcc); +int DXL_CheckVScreenXImageBlit(DXL_VSCREEN_HANDLE dst,DXL_XIMAGE_HANDLE src); + + + +/* windows 95 dll system abstraction functions */ + +/* set memory allocator function */ +void DXV_Setmalloc( + void *(*mallocFuncPtr)(unsigned int size) + ); + +/* set cleared memory allocator function */ +void DXV_Setcalloc( + void *(*callocFuncPtr)(unsigned int size, unsigned int number) + ); + +/*set memory free function */ +void DXV_Setfree( + void (*freeFuncPtr)(void *) + ); + +/* pass a parameter to the decompressor */ +void DXL_SetParameter( + DXL_XIMAGE_HANDLE src, + int Command, + unsigned long Parameter + ); + +/* can only have a max of 32 cpu specific features */ +typedef enum tCPU_FEATURES +{ + NO_FEATURES = 0, + MMX_SUPPORTED = 1 +} CPU_FEATURES; + +CPU_FEATURES DXL_GetCPUFeatures(void); +unsigned long DXL_GetXImageFOURCC(DXL_XIMAGE_HANDLE src); + + +/* pass a parameter to the decompressor */ +void DXL_SetParameter( + DXL_XIMAGE_HANDLE src, + int Command, + unsigned long Parameter + ); + + + +/* Temporary hack to dxv to allow calls to get info (jbb) */ +typedef struct tFrameInfo +{ + int KeyFrame; + int Version; + int Quality; + int vp30Flag; +} FrameInfo; + + + + + +/* define this in case we need to interogate before bailing out */ +typedef struct bmiChunk_t +{ + unsigned long biCompression; + unsigned char biBitCount; + unsigned char biPlanes; + dxvBitDepth bd; + +} BMIMapping; + + +extern BMIMapping DXL_BMIMap[]; + + +#if !defined(DXL_MKFOURCC) +#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 ) ) + +#endif + + +/* src xImage must actually be a DXL_CODEC_HANDLE */ +/* you will need a dxvvfw.lib in order to utilize this prototype for now */ +int DXL_ReportBestBMIMatch(DXL_XIMAGE_HANDLE src, BMIMapping** map, int *maxMaps, int doConsoleReport); + +/* have DXV print DXV/ICM mapping to HTML table */ +void DXL_ReportBMIMapping(char *filename); + + + + +void vp31_GetInfo(unsigned char * source, FrameInfo * frameInfo); + +#if defined(__cplusplus) +} +#endif + +#endif /* include guards */ |