/* * msyuv.h Microsoft YUV Codec * * Copyright (c) Microsoft 1993. */ #include #include #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);