217 lines
6.3 KiB
C
217 lines
6.3 KiB
C
/*
|
||
* msyuv.h Microsoft YUV Codec
|
||
*
|
||
* Copyright (c) Microsoft 1993.
|
||
*/
|
||
|
||
#include <winmm.h>
|
||
#include <vfw.h>
|
||
#include "debug.h"
|
||
|
||
// #define COLOR_MODIFY
|
||
|
||
#ifndef FOURCC_YUV411
|
||
#define FOURCC_YUV411 mmioFOURCC('Y', '4', '1', '1')
|
||
#endif
|
||
|
||
#ifndef FOURCC_YUV422
|
||
//
|
||
// compatible with the format produced by the 16-bit Spigot driver.
|
||
//
|
||
#define FOURCC_YUV422 mmioFOURCC('S', '4', '2', '2')
|
||
#endif
|
||
|
||
#ifdef TOSHIBA
|
||
//
|
||
// compatible with the format produced by the Pistachio driver.
|
||
//
|
||
#ifndef FOURCC_YUV12
|
||
#if 1
|
||
#define FOURCC_YUV12 mmioFOURCC('T', '4', '2', '0')
|
||
#else
|
||
#define FOURCC_YUV12 mmioFOURCC('I', '4', '2', '0')
|
||
#endif
|
||
#endif
|
||
|
||
//
|
||
// compatible with the format produced by the Pistachio driver.
|
||
//
|
||
#ifndef FOURCC_YUV9
|
||
#define FOURCC_YUV9 mmioFOURCC('Y', 'V', 'U', '9')
|
||
#endif
|
||
#endif//TOSHIBA
|
||
|
||
|
||
|
||
|
||
typedef struct {
|
||
DWORD dwFlags; // flags from ICOPEN
|
||
DWORD dwFormat; // format that pXlate is built for (FOURCC)
|
||
PVOID pXlate; // xlate table (for decompress)
|
||
BOOL bRGB565; // true if 5-6-5 format output (otherwise 555)
|
||
#ifdef TOSHIBA
|
||
#ifdef COLOR_MODIFY
|
||
BOOL bRGB24; // true if 24 bit format output (otherwise 16 bit)
|
||
#endif//COLOR_MODIFY
|
||
#endif//TOSHIBA
|
||
|
||
#if 0
|
||
/* support for drawing */
|
||
VCUSER_HANDLE vh;
|
||
HWND hwnd;
|
||
RECT rcSource;
|
||
RECT rcDest;
|
||
HBRUSH hKeyBrush;
|
||
#endif
|
||
|
||
} INSTINFO, *PINSTINFO;
|
||
|
||
|
||
|
||
|
||
/*
|
||
* message processing functions in msyuv.c
|
||
*/
|
||
INSTINFO * NEAR PASCAL Open(ICOPEN FAR * icinfo);
|
||
DWORD NEAR PASCAL Close(INSTINFO * pinst);
|
||
BOOL NEAR PASCAL QueryAbout(INSTINFO * pinst);
|
||
DWORD NEAR PASCAL About(INSTINFO * pinst, HWND hwnd);
|
||
BOOL NEAR PASCAL QueryConfigure(INSTINFO * pinst);
|
||
DWORD NEAR PASCAL Configure(INSTINFO * pinst, HWND hwnd);
|
||
DWORD NEAR PASCAL GetState(INSTINFO * pinst, LPVOID pv, DWORD dwSize);
|
||
DWORD NEAR PASCAL SetState(INSTINFO * pinst, LPVOID pv, DWORD dwSize);
|
||
DWORD NEAR PASCAL GetInfo(INSTINFO * pinst, ICINFO FAR *icinfo, DWORD dwSize);
|
||
DWORD FAR PASCAL CompressQuery(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD FAR PASCAL CompressGetFormat(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD FAR PASCAL CompressBegin(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD FAR PASCAL CompressGetSize(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD FAR PASCAL Compress(INSTINFO * pinst, ICCOMPRESS FAR *icinfo, DWORD dwSize);
|
||
DWORD FAR PASCAL CompressEnd(INSTINFO * pinst);
|
||
DWORD NEAR PASCAL DecompressQuery(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD NEAR PASCAL DecompressGetFormat(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD NEAR PASCAL DecompressBegin(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD NEAR PASCAL Decompress(INSTINFO * pinst, ICDECOMPRESS FAR *icinfo, DWORD dwSize);
|
||
DWORD NEAR PASCAL DecompressGetPalette(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD NEAR PASCAL DecompressEnd(INSTINFO * pinst);
|
||
|
||
|
||
DWORD DrawQuery(INSTINFO * pinst, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut);
|
||
DWORD DrawBegin(INSTINFO * pinst,ICDRAWBEGIN FAR *icinfo, DWORD dwSize);
|
||
DWORD Draw(INSTINFO * pinst, ICDRAW FAR *icinfo, DWORD dwSize);
|
||
DWORD DrawEnd(INSTINFO * pinst);
|
||
DWORD DrawWindow(PINSTINFO pinst, PRECT prc);
|
||
|
||
|
||
/* yuv411 or yuv422 to rgb translation, in xlate.c */
|
||
|
||
/*
|
||
* build yuv411->RGB555 xlate table
|
||
*/
|
||
LPVOID BuildYUVToRGB555(PINSTINFO pinst);
|
||
|
||
// build yuv411 -> rgb565
|
||
LPVOID BuildYUVToRGB565(PINSTINFO pinst);
|
||
|
||
|
||
/*
|
||
* build yuv422 -> RGB555 xlate table
|
||
*/
|
||
LPVOID BuildYUV422ToRGB555(PINSTINFO pinst);
|
||
|
||
|
||
// build yuv422 -> RGB565
|
||
LPVOID BuildYUV422ToRGB565(PINSTINFO pinst);
|
||
|
||
|
||
#ifdef TOSHIBA
|
||
#ifdef COLOR_MODIFY
|
||
/*
|
||
* build yuv12 -> RGB555 xlate table
|
||
*/
|
||
LPVOID BuildYUVToRB(PINSTINFO pinst);
|
||
|
||
#else //COLOR_MODIFY
|
||
/*
|
||
* build yuv12 -> RGB555 xlate table
|
||
*/
|
||
LPVOID BuildYUV12ToRGB555(PINSTINFO pinst);
|
||
|
||
|
||
// build yuv12 -> RGB565
|
||
LPVOID BuildYUV12ToRGB565(PINSTINFO pinst);
|
||
#endif//COLOR_MODIFY
|
||
#endif//TOSHIBA
|
||
|
||
|
||
/*
|
||
* translate one frame from yuv411 to rgb 555 or 565
|
||
*/
|
||
VOID YUV411ToRGB(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV422ToRGB(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
#ifdef TOSHIBA
|
||
#ifdef COLOR_MODIFY
|
||
VOID YUV12ToRGB24(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV12ToRGB565(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV12ToRGB555(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV9ToRGB24(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV9ToRGB565(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV9ToRGB555(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
#else //COLOR_MODIFY
|
||
VOID YUV12ToRGB(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
|
||
VOID YUV9ToRGB(PINSTINFO pinst,
|
||
LPBITMAPINFOHEADER lpbiInput,
|
||
LPVOID lpInput,
|
||
LPBITMAPINFOHEADER lpbiOutput,
|
||
LPVOID lpOutput);
|
||
#endif//COLOR_MODIFY
|
||
#endif//TOSHIBA
|
||
|
||
VOID FreeXlate(PINSTINFO pinst);
|
||
|
||
|
||
|
||
|