home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / misc / vfwdk / inc / compman.h < prev    next >
C/C++ Source or Header  |  1993-02-08  |  13KB  |  388 lines

  1. /*
  2. *  Header file for comunication with AVI installable compressors/decompressors
  3. *
  4. *  Copyright (c) 1990-1993, Microsoft Corp.  All rights reserved. 
  5. *
  6. * Installable compressors should be listed in SYSTEM.INI as
  7. * follows:
  8. *
  9. * [Instalable Compressors]
  10. *      VIDC.MSSQ = mssqcomp.drv
  11. *      VIDC.XXXX = foodrv.drv
  12. *
  13. * [Drivers]
  14. *      VIDC.MSSQ = mssqcomp.drv
  15. *      VIDC.XXXX = foodrv.drv
  16. *
  17. * That is, an identifying FOURCC should be the key, and the value
  18. * should be the driver filename
  19. *
  20. */
  21.  
  22. #ifndef _INC_COMPMAN
  23. #define _INC_COMPMAN
  24.  
  25. #ifndef _LOADDS
  26.     #define _LOADDS _loadds
  27. #endif
  28.  
  29. #ifndef RC_INVOKED
  30. #pragma pack(1)         /* Assume byte packing throughout */
  31. #endif  /* RC_INVOKED */
  32.  
  33. #ifdef __cplusplus
  34. extern "C" {            /* Assume C declarations for C++ */
  35. #endif  /* __cplusplus */
  36.  
  37. /************************************************************************
  38.  
  39.     messages and structures.
  40.  
  41. ************************************************************************/
  42.  
  43. #include <compddk.h>            // include this file for the messages.
  44.  
  45. /************************************************************************
  46.  
  47.     data types.
  48.  
  49. ************************************************************************/
  50.  
  51. typedef HANDLE HIC;     /* Handle to a Insatlable Compressor */
  52.  
  53. /************************************************************************
  54.  
  55.     ICM function declarations     
  56.     
  57. ************************************************************************/
  58.  
  59. BOOL    FAR PASCAL _LOADDS ICInfo(DWORD fccType, DWORD fccHandler, ICINFO FAR * lpicinfo);
  60. BOOL    FAR PASCAL _LOADDS ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);
  61. BOOL    FAR PASCAL _LOADDS ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);
  62.  
  63. HIC     FAR PASCAL _LOADDS ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
  64. LRESULT FAR PASCAL _LOADDS ICClose(HANDLE hic);
  65. LRESULT FAR PASCAL _LOADDS ICSendMessage(HIC hic, UINT msg, DWORD dw1, DWORD dw2);
  66. LRESULT FAR PASCAL _LOADDS ICGetInfo(HIC hic, ICINFO FAR *picinfo, DWORD cb);
  67.  
  68. /* Values for wFlags of ICInstall() */
  69. #define ICINSTALL_FUNCTION      0x0001  // lParam is a DriverProc (function ptr)
  70. #define ICINSTALL_DRIVER        0x0002  // lParam is a driver name (string)
  71. #define ICINSTALL_HDRV          0x0004  // lParam is a HDRVR (driver handle)
  72.  
  73. /************************************************************************
  74.  
  75.     query macros
  76.     
  77. ************************************************************************/
  78. #define ICMF_CONFIGURE_QUERY     0x00000001
  79. #define ICMF_ABOUT_QUERY         0x00000001
  80.  
  81. #define ICQueryAbout(hic) \
  82.     (ICSendMessage(hic, ICM_ABOUT, (DWORD) -1, ICMF_ABOUT_QUERY) == ICERR_OK)
  83.  
  84. #define ICAbout(hic, hwnd) \
  85.     ICSendMessage(hic, ICM_ABOUT, (DWORD)(UINT)(hwnd), 0)
  86.  
  87. #define ICQueryConfigure(hic) \
  88.     (ICSendMessage(hic, ICM_CONFIGURE, (DWORD) -1, ICMF_CONFIGURE_QUERY) == ICERR_OK)
  89.  
  90. #define ICConfigure(hic, hwnd) \
  91.     ICSendMessage(hic, ICM_CONFIGURE, (DWORD)(UINT)(hwnd), 0)
  92.  
  93. /************************************************************************
  94.  
  95.     get/set state macros
  96.     
  97. ************************************************************************/
  98.  
  99. #define ICGetState(hic, pv, cb) \
  100.     ICSendMessage(hic, ICM_GETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
  101.  
  102. #define ICSetState(hic, pv, cb) \
  103.     ICSendMessage(hic, ICM_SETSTATE, (DWORD)(LPVOID)(pv), (DWORD)(cb))
  104.  
  105. #define ICGetStateSize(hic) \
  106.     ICGetState(hic, NULL, 0)
  107.  
  108. /************************************************************************
  109.  
  110.     get value macros
  111.     
  112. ************************************************************************/
  113. DWORD dwICValue;
  114.  
  115. #define ICGetDefaultQuality(hic) \
  116.     (ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)), dwICValue)
  117.  
  118. #define ICGetDefaultKeyFrameRate(hic) \
  119.     (ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD)), dwICValue)
  120.  
  121. /************************************************************************
  122.  
  123.     draw window macro
  124.     
  125. ************************************************************************/
  126. #define ICDrawWindow(hic, prc) \
  127.     ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD)(LPVOID)(prc), sizeof(RECT))
  128.  
  129.     
  130.  
  131. /************************************************************************
  132.  
  133.     compression functions
  134.  
  135. ************************************************************************/
  136. /*
  137.  *  ICCompress()
  138.  *
  139.  *  compress a single frame
  140.  *
  141.  */
  142. DWORD FAR _LOADDS CDECL ICCompress(
  143.     HIC                 hic,
  144.     DWORD               dwFlags,        // flags
  145.     LPBITMAPINFOHEADER  lpbiOutput,     // output format
  146.     LPVOID              lpData,         // output data
  147.     LPBITMAPINFOHEADER  lpbiInput,      // format of frame to compress
  148.     LPVOID              lpBits,         // frame data to compress
  149.     LPDWORD             lpckid,         // ckid for data in AVI file
  150.     LPDWORD             lpdwFlags,      // flags in the AVI index.
  151.     LONG                lFrameNum,      // frame number of seq.
  152.     DWORD               dwFrameSize,    // reqested size in bytes. (if non zero)
  153.     DWORD               dwQuality,      // quality within one frame
  154.     LPBITMAPINFOHEADER  lpbiPrev,       // format of previous frame
  155.     LPVOID              lpPrev);        // previous frame
  156.  
  157. /*
  158.  *  ICCompressBegin()
  159.  *
  160.  *  start compression from a source format (lpbiInput) to a dest
  161.  *  format (lpbiOuput) is supported.
  162.  *
  163.  */
  164. #define ICCompressBegin(hic, lpbiInput, lpbiOutput) \
  165.     ICSendMessage(hic, ICM_COMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  166.  
  167. /*
  168.  *  ICCompressQuery()
  169.  *
  170.  *  determines if compression from a source format (lpbiInput) to a dest
  171.  *  format (lpbiOuput) is supported.
  172.  *
  173.  */
  174. #define ICCompressQuery(hic, lpbiInput, lpbiOutput) \
  175.     ICSendMessage(hic, ICM_COMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  176.  
  177. /*
  178.  *  ICCompressGetFormat()
  179.  *
  180.  *  get the ouput format, (format of compressed data)
  181.  *  if lpbiOuput is NULL return the size in bytes needed for format.
  182.  *
  183.  */
  184. #define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \
  185.     ICSendMessage(hic, ICM_COMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  186.  
  187. #define ICCompressGetFormatSize(hic, lpbi) \
  188.     ICCompressGetFormat(hic, lpbi, NULL)
  189.  
  190. /*
  191.  *  ICCompressSize()
  192.  *
  193.  *  return the maximal size of a compressed frame
  194.  *
  195.  */
  196. #define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \
  197.     ICSendMessage(hic, ICM_COMPRESS_GET_SIZE, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  198.  
  199. #define ICCompressEnd(hic) \
  200.     ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
  201.  
  202. /************************************************************************
  203.  
  204.     decompression functions
  205.  
  206. ************************************************************************/
  207.  
  208. /*
  209.  *  ICDecompress()
  210.  *
  211.  *  decompress a single frame
  212.  *
  213.  */
  214. #define ICDECOMPRESS_HURRYUP    0x80000000L     // don't draw just buffer (hurry up!)
  215.  
  216. DWORD FAR _LOADDS CDECL ICDecompress(
  217.     HIC                 hic,
  218.     DWORD               dwFlags,    // flags (from AVI index...)
  219.     LPBITMAPINFOHEADER  lpbiFormat, // BITMAPINFO of compressed data
  220.                                     // biSizeImage has the chunk size
  221.     LPVOID              lpData,     // data
  222.     LPBITMAPINFOHEADER  lpbi,       // DIB to decompress to
  223.     LPVOID              lpBits);
  224.  
  225. /*
  226.  *  ICDecompressBegin()
  227.  *
  228.  *  start compression from a source format (lpbiInput) to a dest
  229.  *  format (lpbiOuput) is supported.
  230.  *
  231.  */
  232. #define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \
  233.     ICSendMessage(hic, ICM_DECOMPRESS_BEGIN, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  234.  
  235. /*
  236.  *  ICDecompressQuery()
  237.  *
  238.  *  determines if compression from a source format (lpbiInput) to a dest
  239.  *  format (lpbiOuput) is supported.
  240.  *
  241.  */
  242. #define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \
  243.     ICSendMessage(hic, ICM_DECOMPRESS_QUERY, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  244.  
  245. /*
  246.  *  ICDecompressGetFormat()
  247.  *
  248.  *  get the ouput format, (format of un-compressed data)
  249.  *  if lpbiOuput is NULL return the size in bytes needed for format.
  250.  *
  251.  */
  252. #define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput) \
  253.     ((LONG) ICSendMessage(hic, ICM_DECOMPRESS_GET_FORMAT, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput)))
  254.  
  255. #define ICDecompressGetFormatSize(hic, lpbi) \
  256.     ICDecompressGetFormat(hic, lpbi, NULL)
  257.  
  258. /*
  259.  *  ICDecompressGetPalette()
  260.  *
  261.  *  get the ouput palette
  262.  *
  263.  */
  264. #define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput) \
  265.     ICSendMessage(hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD)(LPVOID)(lpbiInput), (DWORD)(LPVOID)(lpbiOutput))
  266.  
  267. #define ICDecompressEnd(hic) \
  268.     ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
  269.  
  270. /************************************************************************
  271.  
  272.     drawing functions
  273.  
  274. ************************************************************************/
  275.  
  276. /*
  277.  *  ICDrawBegin()
  278.  *
  279.  *  start decompressing data with format (lpbiInput) directly to the screen
  280.  *
  281.  *  return zero if the decompressor supports drawing.
  282.  *
  283.  */
  284.  
  285. #define ICDRAW_QUERY        0x00000001L   // test for support
  286. #define ICDRAW_FULLSCREEN   0x00000002L   // draw to full screen
  287. #define ICDRAW_HDC          0x00000004L   // draw to a HDC/HWND
  288.  
  289. DWORD FAR _LOADDS CDECL ICDrawBegin(
  290.         HIC                 hic,
  291.         DWORD               dwFlags,        // flags
  292.         HPALETTE            hpal,           // palette to draw with
  293.         HWND                hwnd,           // window to draw to
  294.         HDC                 hdc,            // HDC to draw to
  295.         int                 xDst,           // destination rectangle
  296.         int                 yDst,
  297.         int                 dxDst,
  298.         int                 dyDst,
  299.         LPBITMAPINFOHEADER  lpbi,           // format of frame to draw
  300.         int                 xSrc,           // source rectangle
  301.         int                 ySrc,
  302.         int                 dxSrc,
  303.         int                 dySrc,
  304.         DWORD               dwRate,         // frames/second = (dwRate/dwScale)
  305.         DWORD               dwScale);
  306.  
  307. /*
  308.  *  ICDraw()
  309.  *
  310.  *  decompress data directly to the screen
  311.  *
  312.  */
  313.  
  314. #define ICDRAW_HURRYUP      0x80000000L   // don't draw just buffer (hurry up!)
  315. #define ICDRAW_UPDATE       0x40000000L   // don't draw just update screen
  316.  
  317. DWORD FAR _LOADDS CDECL ICDraw(
  318.         HIC                 hic,
  319.         DWORD               dwFlags,        // flags
  320.         LPVOID            lpFormat,       // format of frame to decompress
  321.         LPVOID              lpData,         // frame data to decompress
  322.         DWORD               cbData,         // size of data
  323.         LONG                lTime);         // time to draw this frame
  324.  
  325. /*
  326.  *  ICDrawQuery()
  327.  *
  328.  *  determines if the compressor is willing to render the specified format.
  329.  *
  330.  */
  331. #define ICDrawQuery(hic, lpbiInput) \
  332.     ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD)(LPVOID)(lpbiInput), 0L)
  333.  
  334. #define ICGetBuffersWanted(hic, lpdwBuffers) \
  335.     ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD)(LPVOID)(lpdwBuffers), 0)
  336.  
  337. #define ICDrawEnd(hic) \
  338.     ICSendMessage(hic, ICM_DRAW_END, 0, 0)
  339.  
  340. #define ICDrawStart(hic) \
  341.     ICSendMessage(hic, ICM_DRAW_START, 0, 0)
  342.  
  343. #define ICDrawStop(hic) \
  344.     ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
  345.  
  346. #define ICDrawGetTime(hic, lplTime) \
  347.     ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD)(LPVOID)(lplTime), 0)
  348.  
  349. #define ICDrawSetTime(hic, lTime) \
  350.     ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD)lTime, 0)
  351.  
  352. #define ICDrawRealize(hic, hdc, fBackground) \
  353.     ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD)(UINT)(HDC)(hdc), (DWORD)(BOOL)(fBackground))
  354.  
  355. #define ICDrawFlush(hic) \
  356.     ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
  357.  
  358. #define ICDrawRenderBuffer(hic) \
  359.     ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
  360.  
  361.  
  362. /************************************************************************
  363.  
  364. helper routines for DrawDib and MCIAVI...
  365.  
  366. ************************************************************************/
  367.  
  368. #define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
  369.     ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
  370.  
  371. #define ICDrawOpen(fccType, fccHandler, lpbiIn) \
  372.     ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
  373.  
  374. HIC  FAR _LOADDS PASCAL ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
  375. HIC  FAR _LOADDS PASCAL ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
  376.  
  377.  
  378.  
  379. #ifdef __cplusplus
  380. }                       /* End of extern "C" { */
  381. #endif    /* __cplusplus */
  382.  
  383. #ifndef RC_INVOKED
  384. #pragma pack()          /* Revert to default packing */
  385. #endif  /* RC_INVOKED */
  386.  
  387. #endif /* _INC_COMPMAN */
  388.