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

  1. /*
  2.  *                                                                   
  3.  *  Compddk.h - include file for implementing installable compressors
  4.  *                                                                   
  5.  *  Copyright (c) 1990-1993, Microsoft Corp.  All rights reserved. 
  6.  *  
  7.  **********************************************************************
  8.  * 
  9.  * To register FOURCC's for codec types please obtain a
  10.  * copy of the Multimedia Developer Registration Kit from:
  11.  *
  12.  *  Microsoft Corporation
  13.  *  Multimedia Systems Group
  14.  *  Product Marketing
  15.  *  One Microsoft Way
  16.  *  Redmond, WA 98052-6399
  17.  *
  18.  *
  19. */
  20.  
  21. #ifndef _INC_COMPDDK
  22. #define _INC_COMPDDK    50    /* version number */
  23.  
  24. #ifndef RC_INVOKED
  25. #pragma pack(1)         /* Assume byte packing throughout */
  26. #endif  /* RC_INVOKED */
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {            /* Assume C declarations for C++ */
  30. #endif    /* __cplusplus */
  31.  
  32. #define ICVERSION       0x0104
  33.  
  34. #ifndef mmioFOURCC
  35. #define mmioFOURCC( ch0, ch1, ch2, ch3 )                \
  36.         ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) |    \
  37.         ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
  38. #endif
  39.  
  40. #ifndef aviTWOCC
  41. #define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
  42. #endif
  43.  
  44. #ifndef ICTYPE_VIDEO
  45. #define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c')
  46. #define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c')
  47. #endif
  48.  
  49. #ifndef ICERR_OK
  50. #define ICERR_OK                0L
  51. #define ICERR_DONTDRAW          1L
  52. #define ICERR_NEWPALETTE        2L
  53. #define ICERR_UNSUPPORTED      -1L
  54. #define ICERR_BADFORMAT        -2L
  55. #define ICERR_MEMORY           -3L
  56. #define ICERR_INTERNAL         -4L
  57. #define ICERR_BADFLAGS         -5L
  58. #define ICERR_BADPARAM         -6L
  59. #define ICERR_BADSIZE          -7L
  60. #define ICERR_BADHANDLE        -8L
  61. #define ICERR_CANTUPDATE       -9L
  62. #define ICERR_ERROR            -100L
  63. #define ICERR_BADBITDEPTH      -200L
  64. #define ICERR_BADIMAGESIZE     -201L
  65.  
  66. #define ICERR_CUSTOM           -400L    // errors less than ICERR_CUSTOM...
  67. #endif
  68.  
  69. /* Values for dwFlags of ICOpen() */
  70. #ifndef ICMODE_COMPRESS
  71. #define ICMODE_COMPRESS        1
  72. #define ICMODE_DECOMPRESS    2
  73. #define ICMODE_QUERY            4
  74. #define ICMODE_DRAW             8
  75. #endif
  76.  
  77. /* Flags for AVI file index */
  78. #define AVIIF_LIST    0x00000001L
  79. #define AVIIF_TWOCC    0x00000002L
  80. #define AVIIF_KEYFRAME    0x00000010L
  81.  
  82. /* quality flags */
  83. #define ICQUALITY_LOW       0
  84. #define ICQUALITY_HIGH      10000
  85. #define ICQUALITY_DEFAULT   -1
  86.  
  87. /************************************************************************
  88. ************************************************************************/
  89.  
  90. #define ICM_USER          (DRV_USER+0x0000)
  91.  
  92. #define ICM_RESERVED      ICM_RESERVED_LOW
  93. #define ICM_RESERVED_LOW  (DRV_USER+0x1000)
  94. #define ICM_RESERVED_HIGH (DRV_USER+0x2000)
  95.  
  96. /************************************************************************
  97.  
  98.     messages.
  99.  
  100. ************************************************************************/
  101.  
  102. #define ICM_GETSTATE                (ICM_RESERVED+0)    // Get compressor state
  103. #define ICM_SETSTATE                (ICM_RESERVED+1)    // Set compressor state
  104. #define ICM_GETINFO                 (ICM_RESERVED+2)    // Query info about the compressor
  105.  
  106. #define ICM_CONFIGURE               (ICM_RESERVED+10)   // show the configure dialog
  107. #define ICM_ABOUT                   (ICM_RESERVED+11)   // show the about box
  108.  
  109. #define ICM_GETERRORTEXT            (ICM_RESERVED+12)   // get error text TBD
  110.  
  111. #define ICM_GETFORMATNAME        (ICM_RESERVED+20)    // get a name for a format
  112. #define ICM_ENUMFORMATS            (ICM_RESERVED+21)    // cycle through formats
  113.  
  114. #define ICM_GETDEFAULTQUALITY       (ICM_RESERVED+30)    // get the default value for quality
  115. #define ICM_GETQUALITY              (ICM_RESERVED+31)    // get the current value for quality
  116. #define ICM_SETQUALITY              (ICM_RESERVED+32)    // set the default value for quality
  117.  
  118. /************************************************************************
  119.  
  120.     ICM specific messages.
  121.  
  122. ************************************************************************/
  123.  
  124. #define ICM_COMPRESS_GET_FORMAT     (ICM_USER+4)    // get compress format or size
  125. #define ICM_COMPRESS_GET_SIZE       (ICM_USER+5)    // get output size
  126. #define ICM_COMPRESS_QUERY          (ICM_USER+6)    // query support for compress
  127. #define ICM_COMPRESS_BEGIN          (ICM_USER+7)    // begin a series of compress calls.
  128. #define ICM_COMPRESS                (ICM_USER+8)    // compress a frame
  129. #define ICM_COMPRESS_END            (ICM_USER+9)    // end of a series of compress calls.
  130.  
  131. #define ICM_DECOMPRESS_GET_FORMAT   (ICM_USER+10)   // get decompress format or size
  132. #define ICM_DECOMPRESS_QUERY        (ICM_USER+11)   // query support for dempress
  133. #define ICM_DECOMPRESS_BEGIN        (ICM_USER+12)   // start a series of decompress calls
  134. #define ICM_DECOMPRESS              (ICM_USER+13)   // decompress a frame
  135. #define ICM_DECOMPRESS_END          (ICM_USER+14)   // end a series of decompress calls
  136. #define ICM_DECOMPRESS_GET_PALETTE  (ICM_USER+30)   // fill in the DIB color table
  137.  
  138. #define ICM_DRAW_QUERY              (ICM_USER+31)   // query support for dempress
  139. #define ICM_DRAW_BEGIN              (ICM_USER+15)   // start a series of draw calls
  140. #define ICM_DRAW_GET_PALETTE        (ICM_USER+16)   // get the palette needed for drawing
  141. #define ICM_DRAW_UPDATE             (ICM_USER+17)   // update screen with current frame
  142. #define ICM_DRAW_START              (ICM_USER+18)   // start decompress clock
  143. #define ICM_DRAW_STOP               (ICM_USER+19)   // stop decompress clock
  144. #define ICM_DRAW_BITS               (ICM_USER+20)   // decompress a frame to screen
  145. #define ICM_DRAW_END                (ICM_USER+21)   // end a series of draw calls
  146. #define ICM_DRAW_GETTIME            (ICM_USER+32)   // get value of decompress clock
  147. #define ICM_DRAW                    (ICM_USER+33)   // generalized "render" message
  148. #define ICM_DRAW_WINDOW             (ICM_USER+34)   // drawing window has moved or hidden
  149. #define ICM_DRAW_SETTIME            (ICM_USER+35)   // set correct value for decompress clock
  150. #define ICM_DRAW_REALIZE            (ICM_USER+36)   // realize palette for drawing
  151. #define ICM_DRAW_FLUSH                (ICM_USER+37)   // clear out buffered frames
  152. #define ICM_DRAW_RENDERBUFFER       (ICM_USER+38)   // draw undrawn things in queue
  153.  
  154. #define ICM_GETBUFFERSWANTED        (ICM_USER+41)   // ask about prebuffering
  155.  
  156. #define ICM_GETDEFAULTKEYFRAMERATE  (ICM_USER+42)   // get the default value for key frames
  157.  
  158. /************************************************************************
  159. ************************************************************************/
  160.  
  161. typedef struct {
  162.     DWORD               dwSize;         // sizeof(ICOPEN)
  163.     DWORD               fccType;        // 'vidc'
  164.     DWORD               fccHandler;     //
  165.     DWORD               dwVersion;      // version of compman opening you
  166.     DWORD               dwFlags;        // LOWORD is type specific
  167.     LRESULT             dwError;        // error return.
  168. } ICOPEN;
  169.  
  170. /************************************************************************
  171. ************************************************************************/
  172.  
  173. typedef struct {
  174.     DWORD   dwSize;                 // sizeof(ICINFO)
  175.     DWORD   fccType;                // compressor type     'vidc' 'audc'
  176.     DWORD   fccHandler;             // compressor sub-type 'rle ' 'jpeg' 'pcm '
  177.     DWORD   dwFlags;                // flags LOWORD is type specific
  178.     DWORD   dwVersion;              // version of the driver
  179.     DWORD   dwVersionICM;           // version of the ICM used
  180.     char    szName[16];             // short name
  181.     char    szDescription[128];     // long name
  182.     char    szDriver[128];          // driver that contains compressor
  183. }   ICINFO;
  184.  
  185. /* Flags for the <dwFlags> field of the <ICINFO> structure. */
  186. #define VIDCF_QUALITY        0x0001  // supports quality
  187. #define VIDCF_CRUNCH         0x0002  // supports crunching to a frame size
  188. #define VIDCF_TEMPORAL       0x0004  // supports inter-frame compress
  189. #define VIDCF_COMPRESSFRAMES 0x0008  // wants the compress all frames message
  190. #define VIDCF_DRAW           0x0010  // supports drawing
  191. #define VIDCF_FASTTEMPORAL   0x0020  // can do temporal without handholding
  192. #define VIDCF_QUALITYTIME    0x0040  // supports temporal quality
  193.  
  194. /************************************************************************
  195. ************************************************************************/
  196.  
  197. #define ICCOMPRESS_KEYFRAME    0x00000001L
  198.     
  199. typedef struct {
  200.     DWORD               dwFlags;        // flags
  201.  
  202.     LPBITMAPINFOHEADER  lpbiOutput;     // output format
  203.     LPVOID              lpOutput;       // output data
  204.  
  205.     LPBITMAPINFOHEADER  lpbiInput;      // format of frame to compress
  206.     LPVOID              lpInput;        // frame data to compress
  207.  
  208.     LPDWORD             lpckid;         // ckid for data in AVI file
  209.     LPDWORD             lpdwFlags;      // flags in the AVI index.
  210.     LONG                lFrameNum;      // frame number of seq.
  211.     DWORD               dwFrameSize;    // reqested size in bytes. (if non zero)
  212.  
  213.     DWORD               dwQuality;      // quality
  214.  
  215.     // these are new fields
  216.     LPBITMAPINFOHEADER  lpbiPrev;       // format of previous frame
  217.     LPVOID              lpPrev;         // previous frame
  218.  
  219. } ICCOMPRESS;
  220.  
  221. /************************************************************************
  222. ************************************************************************/
  223.  
  224. #define ICDECOMPRESS_HURRYUP    0x80000000L     // don't draw just buffer (hurry up!)
  225.  
  226. typedef struct {
  227.     DWORD               dwFlags;    // flags (from AVI index...)
  228.  
  229.     LPBITMAPINFOHEADER  lpbiInput;  // BITMAPINFO of compressed data
  230.                                     // biSizeImage has the chunk size
  231.     LPVOID              lpInput;    // compressed data
  232.  
  233.     LPBITMAPINFOHEADER  lpbiOutput; // DIB to decompress to
  234.     LPVOID              lpOutput;
  235.     DWORD        ckid;        // ckid from AVI file
  236. } ICDECOMPRESS;
  237.  
  238. /************************************************************************
  239. ************************************************************************/
  240.  
  241. #define ICDRAW_QUERY        0x00000001L   // test for support
  242. #define ICDRAW_FULLSCREEN   0x00000002L   // draw to full screen
  243. #define ICDRAW_HDC          0x00000004L   // draw to a HDC/HWND
  244.  
  245. typedef struct {
  246.     DWORD               dwFlags;        // flags
  247.  
  248.     HPALETTE            hpal;           // palette to draw with
  249.     HWND                hwnd;           // window to draw to
  250.     HDC                 hdc;            // HDC to draw to
  251.  
  252.     int                 xDst;           // destination rectangle
  253.     int                 yDst;
  254.     int                 dxDst;
  255.     int                 dyDst;
  256.  
  257.     LPBITMAPINFOHEADER  lpbi;           // format of frame to draw
  258.  
  259.     int                 xSrc;           // source rectangle
  260.     int                 ySrc;
  261.     int                 dxSrc;
  262.     int                 dySrc;
  263.  
  264.     DWORD               dwRate;         // frames/second = (dwRate/dwScale)
  265.     DWORD               dwScale;
  266.  
  267. } ICDRAWBEGIN;
  268.  
  269. /************************************************************************
  270. ************************************************************************/
  271.  
  272. #define ICDRAW_HURRYUP      0x80000000L   // don't draw just buffer (hurry up!)
  273. #define ICDRAW_UPDATE       0x40000000L   // don't draw just update screen
  274. #define ICDRAW_PREROLL        0x20000000L      // this frame is before real start
  275. #define ICDRAW_NULLFRAME    0x10000000L      // repeat last frame
  276.  
  277. typedef struct {
  278.     DWORD               dwFlags;        // flags
  279.  
  280.     HDC                 hdc;            // HDC to draw to
  281.  
  282.     int                 xDst;           // destination rectangle
  283.     int                 yDst;
  284.     int                 dxDst;
  285.     int                 dyDst;
  286.  
  287.     LPBITMAPINFOHEADER  lpbi;           // format of frame to decompress
  288.     LPVOID              lpData;         // frame data to decompress
  289.  
  290.     int                 xSrc;           // source rectangle
  291.     int                 ySrc;
  292.     int                 dxSrc;
  293.     int                 dySrc;
  294. } ICDRAWBITS;
  295.  
  296. typedef struct {
  297.     DWORD               dwFlags;        // flags
  298.     LPVOID        lpFormat;       // format of frame to decompress
  299.     LPVOID              lpData;         // frame data to decompress
  300.     DWORD               cbData;
  301.     LONG                lTime;          // time in drawbegin units (see dwRate and dwScale)
  302. } ICDRAW;
  303.  
  304. /************************************************************************
  305. ************************************************************************/
  306.  
  307. typedef struct {
  308.     DWORD               dwFlags;    // flags (from AVI index...)
  309.     int                 iStart;     // first palette to change
  310.     int                 iLen;       // count of entries to change.
  311.     LPPALETTEENTRY      lppe;       // palette
  312. } ICPALETTE;
  313.  
  314. #ifndef RC_INVOKED
  315. #pragma pack()          /* Revert to default packing */
  316. #endif  /* RC_INVOKED */
  317.  
  318. #ifdef __cplusplus
  319. }                       /* End of extern "C" { */
  320. #endif    /* __cplusplus */
  321.  
  322. #endif  /* _INC_COMPDDK */
  323.