aboutsummaryrefslogtreecommitdiff
path: root/Src/libvp6/include/duck_dxl.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/libvp6/include/duck_dxl.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/libvp6/include/duck_dxl.h')
-rw-r--r--Src/libvp6/include/duck_dxl.h583
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>&nbsp</td><td> Version: 6.0.0
+</td></tr><tr><td>&nbsp</td><td> Updated: $Date: 2011/06/29 19:50:29 $
+</td></tr><tr><td>&nbsp</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 */