rmavsurf.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:7k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /****************************************************************************
  2.  *
  3.  *  $Id: rmavsurf.h,v 1.1 2003/05/30 02:18:02 gabest Exp $
  4.  *
  5.  *  Copyright (C) 1995,1996,1997 Progressive Networks.
  6.  *  All rights reserved.
  7.  *
  8.  *  http://www.real.com/devzone
  9.  *
  10.  *  This program contains proprietary
  11.  *  information of Progressive Networks, Inc, and is licensed
  12.  *  subject to restrictions on use and distribution.
  13.  *
  14.  *
  15.  *  RealMedia Architecture Video Surface Interfaces.
  16.  *
  17.  */
  18. #ifndef _RMAVSURF_H_
  19. #define _RMAVSURF_H_
  20. /****************************************************************************
  21.  *
  22.  *  Video Surface Data Structures and Constants
  23.  */
  24. typedef struct _RMABitmapInfoHeader
  25. {
  26.     UINT32  biSize;
  27.     INT32   biWidth;
  28.     INT32   biHeight;
  29.     UINT16  biPlanes;
  30.     UINT16  biBitCount;
  31.     UINT32  biCompression;
  32.     UINT32  biSizeImage;
  33.     INT32   biXPelsPerMeter;
  34.     INT32   biYPelsPerMeter;
  35.     UINT32  biClrUsed;
  36.     UINT32  biClrImportant;
  37.     UINT32  rcolor;
  38.     UINT32  gcolor;
  39.     UINT32  bcolor;
  40. } RMABitmapInfoHeader;
  41. /*
  42.  * RMABitmapInfo structure.
  43.  */
  44. typedef struct _RMABitmapInfo
  45. {
  46.     struct
  47.     {
  48.         UINT32  biSize;         /* use OFFSETOF(dwBitMask) here     */
  49.         INT32   biWidth;        /* image width (in pixels)          */
  50.         INT32   biHeight;       /* image height                     */
  51.         UINT16  biPlanes;       /* # of bitplanes; always use 1     */
  52.         UINT16  biBitCount;     /* average # bits/pixel             */
  53.         UINT32  biCompression;  /* one of the RMA_... FOURCC codes  */
  54.         UINT32  biSizeImage;    /* = width * height * bitCount / 8  */
  55.         INT32   biXPelsPerMeter;/* always 0                         */
  56.         INT32   biYPelsPerMeter;/* always 0                         */
  57.         UINT32  biClrUsed;      /* !0, if 8-bit RGB; 0, otherwise   */
  58.         UINT32  biClrImportant; /* !0, if 8-bit RGB; 0, otherwise   */
  59.     } bmiHeader;
  60.     union
  61.     {
  62.         UINT32  dwBitMask[3];   /* color masks (for BI_BITFIELDS)   */
  63.         UINT32  dwPalette[256]; /* palette (for 8-bit RGB image)    */
  64.     } un;
  65. } RMABitmapInfo;
  66. typedef UINT32  RMA_COMPRESSION_TYPE;
  67. /*
  68.  * Windows DIB formats & MKFOURCC() macro:
  69.  */
  70. #ifndef BI_RGB
  71. #define BI_RGB          0L      /* RGB-8, 16, 24, or 32             */
  72. #define BI_RLE8         1L      /* 8-bit RLE compressed image       */
  73. #define BI_RLE4         2L      /* 4-bit RLE compressed image       */
  74. #define BI_BITFIELDS    3L      /* RGB 555, 565, etc.               */
  75. #endif
  76. #ifndef MKFOURCC
  77. #define MKFOURCC(c0,c1,c2,c3)   
  78.         ((UINT32)(BYTE)(c0) | ((UINT32)(BYTE)(c1) << 8) |   
  79.         ((UINT32)(BYTE)(c2) << 16) | ((UINT32)(BYTE)(c3) << 24))
  80. #endif
  81. /*
  82.  * RMA image formats:
  83.  */
  84. #define RMA_RGB         BI_RGB  /* Windows-compatible RGB formats:  */
  85. #define RMA_RLE8        BI_RLE8
  86. #define RMA_RLE4        BI_RLE4
  87. #define RMA_BITFIELDS   BI_BITFIELDS
  88. #define RMA_I420        MKFOURCC('I','4','2','0') /* planar YCrCb   */
  89. #define RMA_YV12        MKFOURCC('Y','V','1','2') /* planar YVU420  */
  90. #define RMA_YUY2        MKFOURCC('Y','U','Y','2') /* packed YUV422  */
  91. #define RMA_UYVY        MKFOURCC('U','Y','V','Y') /* packed YUV422  */
  92. #define RMA_YVU9        MKFOURCC('Y','V','U','9') /* Intel YVU9     */
  93. /*
  94.  * Non-standard FOURCC formats (these are just few aliases to what can be
  95.  * represented by the standard formats, and they are left for backward
  96.  * compatibility only).
  97.  */
  98. #define RMA_RGB3_ID     MKFOURCC('3','B','G','R') /* RGB-32 ??      */
  99. #define RMA_RGB24_ID    MKFOURCC('B','G','R',' ') /* top-down RGB-24*/
  100. #define RMA_RGB565_ID   MKFOURCC('6','B','G','R') /* RGB-16 565     */
  101. #define RMA_RGB555_ID   MKFOURCC('5','B','G','R') /* RGB-16 555     */
  102. #define RMA_8BIT_ID     MKFOURCC('T','I','B','8') /* RGB-8 w. pal-e */
  103. #define RMA_YUV420_ID   MKFOURCC('2','V','U','Y') /* planar YCrCb   */
  104. #define RMA_YUV411_ID   MKFOURCC('1','V','U','Y') /* ???            */
  105. #define RMA_YUVRAW_ID   MKFOURCC('R','V','U','Y') /* ???            */
  106. /****************************************************************************
  107.  *
  108.  *  Interface:
  109.  *
  110.  *  IRMAVideoSurface
  111.  *
  112.  *  Purpose:
  113.  *
  114.  *  Interface for IRMAVideoSurface objects.
  115.  *
  116.  *  IID_IRMAVideoSurface:
  117.  *
  118.  *  {00002200-0901-11d1-8B06-00A024406D59}
  119.  *
  120.  */
  121. DEFINE_GUID(IID_IRMAVideoSurface, 0x00002200, 0x901, 0x11d1, 0x8b,
  122.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  123. #undef  INTERFACE
  124. #define INTERFACE   IRMAVideoSurface
  125. DECLARE_INTERFACE_(IRMAVideoSurface, IUnknown)
  126. {
  127.     /*
  128.      * IUnknown methods
  129.      */
  130.     STDMETHOD(QueryInterface)   (THIS_
  131.                 REFIID riid,
  132.                 void** ppvObj) PURE;
  133.     STDMETHOD_(ULONG,AddRef)  (THIS) PURE;
  134.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  135.     /*
  136.      * IRMAVideoSurface methods usually called by renderers to
  137.      * Draw on the surface
  138.      */
  139.     STDMETHOD(Blt)      (THIS_
  140.                 UCHAR*          /*IN*/  pImageBits,
  141.                 RMABitmapInfoHeader*    /*IN*/  pBitmapInfo,
  142.                 REF(PNxRect)        /*IN*/  rDestRect,
  143.                 REF(PNxRect)        /*IN*/  rSrcRect) PURE;
  144.     /************************************************************************
  145.      *  Method:
  146.      *      IRMAVideoSurface::BeginOptimizedBlt
  147.      *  Purpose:
  148.      *      Called by renderer to commit to a bitmap format for all future
  149.      *      OptimizedBlt calls.
  150.      */
  151.     STDMETHOD(BeginOptimizedBlt)(THIS_
  152.                 RMABitmapInfoHeader*    /*IN*/  pBitmapInfo) PURE;
  153.     /************************************************************************
  154.      *  Method:
  155.      *      IRMAVideoSurface::OptimizedBlt
  156.      *  Purpose:
  157.      *      Called by renderer to draw to the video surface, in the format
  158.      *      previously specified by calling BeginOptimizedBlt.
  159.      */
  160.     STDMETHOD(OptimizedBlt) (THIS_
  161.                 UCHAR*          /*IN*/  pImageBits,
  162.                 REF(PNxRect)        /*IN*/  rDestRect,
  163.                 REF(PNxRect)        /*IN*/  rSrcRect) PURE;
  164.     /************************************************************************
  165.      *  Method:
  166.      *      IRMAVideoSurface::EndOptimizedBlt
  167.      *  Purpose:
  168.      *      Called by renderer allow the video surface to cleanup after all
  169.      *      OptimizedBlt calls have been made.
  170.      */
  171.     STDMETHOD(EndOptimizedBlt)  (THIS) PURE;
  172.     /************************************************************************
  173.      *  Method:
  174.      *      IRMAVideoSurface::GetOptimizedFormat
  175.      *  Purpose:
  176.      *      Called by the client to find out what compression type the
  177.      *      renderer committed to when it called BeginOptimizedBlt.
  178.      */
  179.     STDMETHOD(GetOptimizedFormat)(THIS_
  180.                 REF(RMA_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
  181.     /************************************************************************
  182.      *  Method:
  183.      *      IRMAVideoSurface::GetPreferredFormat
  184.      *  Purpose:
  185.      *      Called by renderer to find out what compression type the video
  186.      *      surface would prefer to be given in BeginOptimizedBlt.
  187.      */
  188.     STDMETHOD(GetPreferredFormat)(THIS_
  189.                 REF(RMA_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
  190. };
  191. #endif /* _RMAVSURF_H_ */