hxvsurf.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:27k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxvsurf.h,v 1.1.1.1.50.1 2004/07/09 02:06:13 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _HXVSURF_H_
  50. #define _HXVSURF_H_
  51. /*
  52.  * Forward declarations of some interfaces defined or used here-in.
  53.  */
  54. typedef _INTERFACE  IHXBuffer IHXBuffer;
  55. typedef _INTERFACE  IHXValues IHXValues;
  56. /****************************************************************************
  57.  *
  58.  *  Video Surface Data Structures and Constants
  59.  */
  60. typedef struct _HXBitmapInfoHeader
  61. {
  62.     UINT32  biSize;
  63.     INT32   biWidth;
  64.     INT32   biHeight;
  65.     UINT16  biPlanes;
  66.     UINT16  biBitCount;
  67.     UINT32  biCompression;
  68.     UINT32  biSizeImage;
  69.     INT32   biXPelsPerMeter;
  70.     INT32   biYPelsPerMeter;
  71.     UINT32  biClrUsed;
  72.     UINT32  biClrImportant;
  73.     UINT32  rcolor;
  74.     UINT32  gcolor;
  75.     UINT32  bcolor;
  76. } HXBitmapInfoHeader;
  77. /*
  78.  * HXBitmapInfo structure.
  79.  */
  80. typedef struct _HXBitmapInfo
  81. {
  82.     struct
  83.     {
  84.         UINT32  biSize;         /* use OFFSETOF(dwBitMask) here     */
  85.         INT32   biWidth;        /* image width (in pixels)          */
  86.         INT32   biHeight;       /* image height                     */
  87.         UINT16  biPlanes;       /* # of bitplanes; always use 1     */
  88.         UINT16  biBitCount;     /* average # bits/pixel             */
  89.         UINT32  biCompression;  /* one of the RMA_... FOURCC codes  */
  90.         UINT32  biSizeImage;    /* = width * height * bitCount / 8  */
  91.         INT32   biXPelsPerMeter;/* always 0                         */
  92.         INT32   biYPelsPerMeter;/* always 0                         */
  93.         UINT32  biClrUsed;      /* !0, if 8-bit RGB; 0, otherwise   */
  94.         UINT32  biClrImportant; /* !0, if 8-bit RGB; 0, otherwise   */
  95.     } bmiHeader;
  96.     union
  97.     {
  98.         UINT32  dwBitMask[3];   /* color masks (for BI_BITFIELDS)   */
  99.         UINT32  dwPalette[256]; /* palette (for 8-bit RGB image)    */
  100.     } un;
  101. } HXBitmapInfo;
  102. typedef UINT32  HX_COMPRESSION_TYPE;
  103. /*
  104.  * Structure for source inputs used in IHXVideoSurface2::ColorConvert
  105.  */
  106. typedef struct _tagSourceInputStruct
  107. {
  108.     UCHAR*  *aSrcInput;
  109.     INT32   *aSrcPitch;
  110.     INT32   nNumInputs;
  111. } SourceInputStruct;
  112. /*
  113.  * Structure for alpha blending in IHXVideoSurface2
  114.  */
  115. typedef struct _tagAlphaStruct
  116. {
  117.     UCHAR*      pBuffer;        /* buffer for source image data     */
  118.     UINT32      ulFourCC;       /* fourcc of pBuffer                */
  119.     INT32       lPitch;         /* pitch of pBuffer                 */
  120.     UINT32      ulImageWidth;   /* source image width               */
  121.     UINT32      ulImageHeight;  /* source image height              */
  122.     HXxRect     rcImageRect;    /* subrect of src image requested   */ 
  123. } AlphaStruct;
  124. /*
  125.  * Structure for IHXVideoSurface2::GetVideoMem
  126.  */
  127. typedef struct _tagVideoMemStruct
  128. {
  129.     UCHAR*          pVidMem;    /* pointer to video memory          */
  130.     INT32           lPitch;     /* pitch of pVidMem                 */
  131.     HXBitmapInfoHeader  bmi;   /* desciption of pVidMem            */
  132.     AlphaStruct*    pAlphaList; /* alpha blending list              */
  133.     UINT32          ulCount;    /* alpha blending list length       */
  134. } VideoMemStruct;
  135. /*
  136.  * Windows DIB formats & MKFOURCC() macro:
  137.  */
  138. #ifndef BI_RGB
  139. #define BI_RGB          0L      /* RGB-8, 16, 24, or 32             */
  140. #define BI_RLE8         1L      /* 8-bit RLE compressed image       */
  141. #define BI_RLE4         2L      /* 4-bit RLE compressed image       */
  142. #define BI_BITFIELDS    3L      /* RGB 555, 565, etc.               */
  143. #endif
  144. #ifndef MKFOURCC
  145. #define MKFOURCC(c0,c1,c2,c3)   
  146.         ((UINT32)(BYTE)(c0) | ((UINT32)(BYTE)(c1) << 8) |   
  147.         ((UINT32)(BYTE)(c2) << 16) | ((UINT32)(BYTE)(c3) << 24))
  148. #endif
  149. /*
  150.  * RMA image formats:
  151.  */
  152. #define HX_RGB         BI_RGB  /* Windows-compatible RGB formats:  */
  153. #define HX_RLE8        BI_RLE8
  154. #define HX_RLE4        BI_RLE4
  155. #define HX_BITFIELDS   BI_BITFIELDS
  156. #define HX_I420        MKFOURCC('I','4','2','0') /* planar YCrCb   */
  157. #define HX_YV12        MKFOURCC('Y','V','1','2') /* planar YVU420  */
  158. #define HX_YUY2        MKFOURCC('Y','U','Y','2') /* packed YUV422  */
  159. #define HX_UYVY        MKFOURCC('U','Y','V','Y') /* packed YUV422  */
  160. #define HX_YVU9        MKFOURCC('Y','V','U','9') /* Intel YVU9     */
  161. #define HX_ARGB        MKFOURCC('A','R','G','B') /* ARGB32         */
  162. #define HX_DVPF        MKFOURCC('D','V','P','F') /* dvpf           */
  163. /*
  164.  * Non-standard FOURCC formats (these are just few aliases to what can be
  165.  * represented by the standard formats, and they are left for backward
  166.  * compatibility only).
  167.  */
  168. #define HXCOLOR_RGB3_ID     MKFOURCC('3','B','G','R') /* RGB-32 ??      */
  169. #define HXCOLOR_RGB24_ID    MKFOURCC('B','G','R',' ') /* top-down RGB-24*/
  170. #define HXCOLOR_RGB565_ID   MKFOURCC('6','B','G','R') /* RGB-16 565     */
  171. #define HXCOLOR_RGB555_ID   MKFOURCC('5','B','G','R') /* RGB-16 555     */
  172. #define HXCOLOR_8BIT_ID     MKFOURCC('T','I','B','8') /* RGB-8 w. pal-e */
  173. #define HXCOLOR_YUV420_ID   MKFOURCC('2','V','U','Y') /* planar YCrCb   */
  174. #define HXCOLOR_YUVA_ID     MKFOURCC('Y','U','V','A') /* planar YCrCb   */
  175. #define HXCOLOR_YUV411_ID   MKFOURCC('1','V','U','Y') /* ???            */
  176. #define HXCOLOR_YUVRAW_ID   MKFOURCC('R','V','U','Y') /* ???            */
  177. /*
  178.  * Flags for IHXVideoSurface2
  179.  */
  180. /* Flags for GetVideoMemory */
  181. #define HX_WAIT_FOREVER    0       /* Do not return until a buffer is available */
  182. #define HX_WAIT_NEVER      1       /* Return an error if no buffer is available */
  183. /* Flags for Present */
  184. #define HX_MODE_TIMED      0       /* Synchronize the frame to IHXRenderTimeLine */
  185. #define HX_MODE_IMMEDIATE  1       /* Display the frame ASAP */
  186. #define HX_MODE_REFRESH    (1<<1)  /* Refresh the current frame */
  187. /****************************************************************************
  188.  *
  189.  *  Interface:
  190.  *
  191.  *  IHXVideoSurface
  192.  *
  193.  *  Purpose:
  194.  *
  195.  *  Interface for IHXVideoSurface objects.
  196.  *
  197.  *  IID_IHXVideoSurface:
  198.  *
  199.  *  {00002200-0901-11d1-8B06-00A024406D59}
  200.  *
  201.  */
  202. DEFINE_GUID(IID_IHXVideoSurface, 0x00002200, 0x901, 0x11d1, 0x8b,
  203.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  204. #undef  INTERFACE
  205. #define INTERFACE   IHXVideoSurface
  206. DECLARE_INTERFACE_(IHXVideoSurface, IUnknown)
  207. {
  208.     /*
  209.      * IUnknown methods
  210.      */
  211.     STDMETHOD(QueryInterface)   (THIS_
  212.                 REFIID riid,
  213.                 void** ppvObj) PURE;
  214.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  215.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  216.     /*
  217.      * IHXVideoSurface methods usually called by renderers to
  218.      * Draw on the surface
  219.      */
  220.     STDMETHOD(Blt)      (THIS_
  221.                 UCHAR*          /*IN*/  pImageBits,
  222.                 HXBitmapInfoHeader*    /*IN*/  pBitmapInfo,
  223.                 REF(HXxRect)        /*IN*/  rDestRect,
  224.                 REF(HXxRect)        /*IN*/  rSrcRect) PURE;
  225.     /************************************************************************
  226.      *  Method:
  227.      *      IHXVideoSurface::BeginOptimizedBlt
  228.      *  Purpose:
  229.      *      Called by renderer to commit to a bitmap format for all future
  230.      *      OptimizedBlt calls.
  231.      */
  232.     STDMETHOD(BeginOptimizedBlt)(THIS_
  233.                 HXBitmapInfoHeader*    /*IN*/  pBitmapInfo) PURE;
  234.     /************************************************************************
  235.      *  Method:
  236.      *      IHXVideoSurface::OptimizedBlt
  237.      *  Purpose:
  238.      *      Called by renderer to draw to the video surface, in the format
  239.      *      previously specified by calling BeginOptimizedBlt.
  240.      */
  241.     STDMETHOD(OptimizedBlt) (THIS_
  242.                 UCHAR*          /*IN*/  pImageBits,
  243.                 REF(HXxRect)        /*IN*/  rDestRect,
  244.                 REF(HXxRect)        /*IN*/  rSrcRect) PURE;
  245.     /************************************************************************
  246.      *  Method:
  247.      *      IHXVideoSurface::EndOptimizedBlt
  248.      *  Purpose:
  249.      *      Called by renderer allow the video surface to cleanup after all
  250.      *      OptimizedBlt calls have been made.
  251.      */
  252.     STDMETHOD(EndOptimizedBlt)  (THIS) PURE;
  253.     /************************************************************************
  254.      *  Method:
  255.      *      IHXVideoSurface::GetOptimizedFormat
  256.      *  Purpose:
  257.      *      Called by the client to find out what compression type the
  258.      *      renderer committed to when it called BeginOptimizedBlt.
  259.      */
  260.     STDMETHOD(GetOptimizedFormat)(THIS_
  261.                 REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
  262.     /************************************************************************
  263.      *  Method:
  264.      *      IHXVideoSurface::GetPreferredFormat
  265.      *  Purpose:
  266.      *      Called by renderer to find out what compression type the video
  267.      *      surface would prefer to be given in BeginOptimizedBlt.
  268.      */
  269.     STDMETHOD(GetPreferredFormat)(THIS_
  270.                 REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
  271. };
  272. /****************************************************************************
  273.  *
  274.  *  Interface:
  275.  *
  276.  *  IHXVideoHook
  277.  *
  278.  *  Purpose:
  279.  *
  280.  *  Interface for IHXVideoHook objects.
  281.  *
  282.  *  IID_IHXVideoHook:
  283.  *
  284.  *  {00002202-0901-11d1-8B06-00A024406D59}
  285.  *
  286.  */
  287. DEFINE_GUID(IID_IHXVideoHook, 0x00002202, 0x901, 0x11d1, 0x8b,
  288.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  289. #undef INTERFACE
  290. #define INTERFACE   IHXVideoHook
  291. DECLARE_INTERFACE_(IHXVideoHook, IUnknown)
  292. {
  293.     /*
  294.      * IUnknown methods
  295.      */
  296.     STDMETHOD(QueryInterface) (THIS_
  297.  REFIID riid,
  298.  void** ppvObj) PURE;
  299.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  300.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  301.     /***
  302.      * IHXVideoHook::OnVideoFrame
  303.      ***
  304.      * This method will be called from the drawing thread, with the current
  305.      * frame, right before the frame is blitted to the screen. All 3rd party
  306.      * calculations that occur here are delaying the timely delivery of the 
  307.      * frame to the screen. They should be as optimized as possible.  pInFrame
  308.      * is the input frame buffer pOutFrame should be set to contain the output
  309.      * data on return, and destRect is provided so that the 3rd party can make
  310.      * sense of mouse events, but cannot be changed and does not have any
  311.      * direct bearing on image size.  srcRect is provided for inspection only
  312.      * for compatibility with the possible future addition of unfixed size
  313.      * input frames.  The client is responcible for maintaining and freeing
  314.      * the memory which they return in pOutFrame.  Simply setting pOutFrame to
  315.      * pInFrame is acceptable for in-place modifications as a result since it
  316.      * will still only be freed the requisite one time.
  317.      ***/
  318.     STDMETHOD(OnVideoFrame) (THIS_
  319.  UCHAR* /* In */ pInFrame,
  320.                                  ULONG32 /* In */ ulTimeStamp,
  321.  REF(HXxRect) /* In */ srcRect,
  322.  REF(HXxRect) /* In */ destRect,
  323.  REF(UCHAR*) /* Out */ pOutFrame) PURE;
  324.     /***
  325.      * IHXVideoHook::HandleHookEvent
  326.      ***
  327.      * This method provides a quick pass through by which events received by 
  328.      * the IHXVideoHookSink, such as mouse clicks, can be handed on to 
  329.      * registered IHXVideoHook objects.  Hook objects can use or ignore this
  330.      * information but setting the handled member of the passed HXxEvent is 
  331.      * not allowed.
  332.      ***/
  333.     
  334.     STDMETHOD(HandleHookEvent) (THIS_
  335.  HXxEvent* pEvent) PURE;
  336.     /***
  337.      * IHXVideoHook::GetProperties
  338.      ***
  339.      * This method provides a way for holders of an IHXVideoHook object to 
  340.      * query it for descriptive information.  Suggested property bindings are:
  341.      *  "Description" - CString describing plugin functionality.
  342.      *    "Copyright" - CString copyright notice.
  343.      *     "MoreInfo" - CString URL for obtaining more info.
  344.      *     "Version" - ULONG32 version number.
  345.      *  "InputFormat" - IHXBuffer containing input HXBitmapInfoHeader
  346.      *                  flattened as UCHAR array.
  347.      * "OutputFormat" - IHXBuffer containing output HXBitmapInfoHeader 
  348.      *                  flattened as UCHAR array.
  349.      * Others can obviously be included for specific hook-hook 
  350.      * communications, and more may also be required.
  351.      ***/
  352.     
  353.     STDMETHOD(GetProperties) (THIS_
  354.  REF(IHXValues*)   /* Out */ properties) PURE;
  355.     /***
  356.      * IHXVideoHook::HookAddedNotification
  357.      ***
  358.      * This method is called by the IHXVideoHookSink for all of its 
  359.      * registered hooks whenever it registers another.  This allows 
  360.      * registered hooks to redo their checking of the other hooks whenever
  361.      * new ones enter the loop.
  362.      ***/
  363.     STDMETHOD(HookAddedNotification) (THIS_
  364.  IHXVideoHook* pNewHook) PURE;
  365. };
  366. /****************************************************************************
  367.  *
  368.  *  Interface:
  369.  *
  370.  *  IHXVideoHookSink
  371.  *
  372.  *  Purpose:
  373.  *
  374.  *  Interface for IHXVideoHookSink objects.
  375.  *
  376.  *  IID_IHXVideoHookSink:
  377.  *
  378.  *  {00002201-0901-11d1-8B06-00A024406D59}
  379.  *
  380.  */
  381. DEFINE_GUID(IID_IHXVideoHookSink, 0x00002201, 0x901, 0x11d1, 0x8b,
  382.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  383. #undef INTERFACE
  384. #define INTERFACE   IHXVideoHookSink
  385. DECLARE_INTERFACE_(IHXVideoHookSink, IUnknown)
  386. {
  387.     /*
  388.      * IUnknown methods
  389.      */
  390.     STDMETHOD(QueryInterface) (THIS_
  391.  REFIID riid,
  392.  void** ppvObj) PURE;
  393.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  394.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  395.     /***
  396.      * IHXVideoHookSink::AddVideoHook
  397.      ***
  398.      * This method is called by an IHXVideoHook object which wishes to 
  399.      * connect to the receiving IHXVideoHookSink object to obtain video 
  400.      * frames immediately prior to blitting.  pHook is the object requesting 
  401.      * registry, and pOptions is an IHXValues object containing optional
  402.      * special flags affecting behavior. pFrameFormat should point to a
  403.      * pre-allocated HXBitmapInfoHeader struct which on exit is filled in
  404.      * with the bitmap format in which frame data will be supplied to 
  405.      * OnVideoFrame() and to which it will be expected to conform on exit of
  406.      * OnVideoFrame().  If this format is inappropriate for input or output
  407.      * formats, then after registration the IHXVideoHook object should use
  408.      * the IHXVideoHookSink object's  SetInputFormat() and/or
  409.      * SetOutputFormat() methods to arrive at a mutually acceptable exchange
  410.      * format, or to determine that none is available and take appropriate
  411.      * action.
  412.      ***
  413.      * pOptions:
  414.      * "ReceivesEvents" - 0:No, !0:Yes
  415.      * "ReceivesHookAdded" - 0:No, !0:Yes
  416.      * "ReceivesFrames" - 0:No, !0:Yes
  417.      * "TakesAnySize" - 0:No, !0:Yes
  418.      ***/
  419.     STDMETHOD(AddVideoHook) (THIS_
  420.      IHXVideoHook*     /* In */    pHook,
  421.      IHXValues*     /* I/O */   pOptions,
  422.      HXBitmapInfoHeader*   /* Out */   pFrameFormat) PURE;
  423.     /***
  424.      * IHXVideoHookSink::ForceSurfaceUpdate
  425.      ***
  426.      * This method provides a mechanism by which event-driven IHXVideoHook 
  427.      * objects can request that they be given a new image if the mouse is
  428.      * clicked (for example).  The entire frame is "damaged" so that 
  429.      * everything will be redrawn.
  430.      ***/
  431.     STDMETHOD(ForceSurfaceUpdate) (THIS) PURE;
  432.     /***
  433.      * IHXVideoHookSink::SetInputFormat
  434.      * IHXVideoHookSink::SetOutputFormat
  435.      ***
  436.      * These methods provide a way for the IHXVideoHookSink to negotiate 
  437.      * with its registered IHXVideoHook objects about what image formats 
  438.      * they require or return respectively.  pHook is the hook object
  439.      * which is requesting a change in format, pRequested points to an 
  440.      * HXBitmapInfoHeader describing the format which the hook wants (either
  441.      * to receive or return).
  442.      * This method returns HXR_FAIL and does not change formats, unless
  443.      * pRequested matches an acceptable format exactly, that format is
  444.      * registered for future frame transactions, and HXR_OK is returned.
  445.      * Should be called immediately after registration.
  446.      ***/
  447.     STDMETHOD(SetInputFormat) (THIS_
  448.  IHXVideoHook* pHook,
  449.  HXBitmapInfoHeader* pRequested) PURE;
  450.     STDMETHOD(SetOutputFormat) (THIS_
  451.  IHXVideoHook* pHook,
  452.  HXBitmapInfoHeader* pRequested) PURE;
  453.     /***
  454.      * IHXVideoHookSink::GetVideoHookCount
  455.      ***
  456.      * This method returns the number of IHXVideoHook objects registered 
  457.      * with this IHXVideoHookSink.  This value is only useful in the short 
  458.      * term as order and count may change for IHXVideoHook objects without
  459.      * notice.  Do not use it to store access to a given hook.
  460.      ***/
  461.     STDMETHOD_(UINT16,GetVideoHookCount) (THIS) PURE;
  462.     /***
  463.      * IHXVideoHookSink::GetVideoHook
  464.      ***
  465.      * This method provides access to registered IHXVideoHook objects by 
  466.      * index with valid indecies ranging from 0 to n-1 inclusive, where n
  467.      * is the value returned by GetVideoHookCount(), provided no sources
  468.      * have been added or removed since it was last called.
  469.      ***/
  470.     STDMETHOD(GetVideoHook) (THIS_
  471.  UINT16  nIndex,
  472.  REF(IUnknown*) pUnknown) PURE;
  473. };
  474. // $Private:
  475. /****************************************************************************
  476.  *
  477.  *  Interface:
  478.  *
  479.  *  IHXRenderTimeLine
  480.  *
  481.  *  Purpose:
  482.  *
  483.  *  Provide IHXVideoSurface2 a time line for scheduling its video frames
  484.  *
  485.  *  IID_IHXRenderTimeLine:
  486.  *
  487.  *  {00002204-0901-11d1-8B06-00A024406D59}
  488.  *
  489.  */
  490. DEFINE_GUID(IID_IHXRenderTimeLine, 0x00002204, 0x901, 0x11d1, 0x8b,
  491.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  492.  
  493. #undef  INTERFACE
  494. #define INTERFACE   IHXRenderTimeLine
  495. DECLARE_INTERFACE_(IHXRenderTimeLine, IUnknown)
  496. {
  497.     /*
  498.      * IUnknown methods
  499.      */
  500.     STDMETHOD(QueryInterface)   (THIS_
  501.                 REFIID riid,
  502.                 void** ppvObj) PURE;
  503.  
  504.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  505.  
  506.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  507.  
  508.  
  509.     /************************************************************************
  510.      *  Method:
  511.      *      IHXRenderTimeLine::GetTimeLineValue
  512.      *  Purpose:
  513.      *      Get the current presentation time
  514.      *
  515.      *  Notes:
  516.      *      returns HXR_TIMELINE_SUSPENDED when the time line is suspended
  517.      */
  518.     STDMETHOD (GetTimeLineValue) (THIS_ /*OUT*/ REF(UINT32) ulTime) PURE;
  519. };
  520. /****************************************************************************
  521.  *
  522.  *  Interface:
  523.  *
  524.  *  IHXVideoSurface2
  525.  *
  526.  *  Purpose:
  527.  *
  528.  *  Provides hardware video buffers to render plugins
  529.  *
  530.  *  IID_IHXVideoSurface2:
  531.  *
  532.  *  {00002203-0901-11d1-8B06-00A024406D59}
  533.  *
  534.  */
  535. DEFINE_GUID(IID_IHXVideoSurface2, 0x00002203, 0x901, 0x11d1, 0x8b,
  536.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  537.  
  538. #undef  INTERFACE
  539. #define INTERFACE   IHXVideoSurface2
  540. DECLARE_INTERFACE_(IHXVideoSurface2, IUnknown)
  541. {
  542.     /*
  543.      * IUnknown methods
  544.      */
  545.     STDMETHOD(QueryInterface)   (THIS_
  546.                 REFIID riid,
  547.                 void** ppvObj) PURE;
  548.  
  549.     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
  550.  
  551.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  552.  
  553.  
  554.     /************************************************************************
  555.      *  Method:
  556.      *      IHXVideoSurface2::SetProperties
  557.      *  Purpose:
  558.      *      Request ulNumBuffers hardware buffers of the format described
  559.      *      in bmi.  ulNumBuffers will contain the number of buffers actually
  560.      *      allocated.
  561.      *      pClock is the renderer's clock used for scheduling the video
  562.      *      frames received in the Present call.  A NULL clock causes Present
  563.      *      to ignore the timestamp and display synchronously.
  564.      */
  565.     STDMETHOD (SetProperties) (THIS_ /*IN/OUT*/ HXBitmapInfoHeader* bmi,
  566.                                      /*IN/OUT*/ REF(UINT32) ulNumBuffers,
  567.                                      /*IN*/     IHXRenderTimeLine* pClock) PURE;
  568.     /************************************************************************
  569.      *  Method:
  570.      *      IHXVideoSurface2::GetVideoMem
  571.      *  Purpose:
  572.      *      Requests the next available hardware video buffer.
  573.      *      If the presentation contains alpha blending, the blended regions
  574.      *      of the will be requested via VideoMemStruct.pAlphaList.  Fill
  575.      *      each AlphaStruct with the subrect of the video frame specified
  576.      *      by AlphaStruct.rcImageRect.  IHXVideoSurface2 will then alpha
  577.      *      blend the video with the presentation.
  578.      *     
  579.      *      This call blocks until a video buffer is available.  bmi 
  580.      *      describes the buffer returned.
  581.      *
  582.      *  Notes:
  583.      *      The buffer format can change with each call so bmi must be
  584.      *      checked everytime.
  585.      */
  586.     STDMETHOD (GetVideoMem) (THIS_ VideoMemStruct* /*IN/OUT*/ pVidMem,
  587.                                    UINT32 ulFlags) PURE;
  588.     /************************************************************************
  589.      *  Method:
  590.      *      IHXVideoSurface2::ReleaseVideoMem
  591.      *  Purpose:
  592.      *      Called on a buffer returned from GetVideoMem to discard the
  593.      *      buffer without displaying it.
  594.      */
  595.     STDMETHOD (ReleaseVideoMem) (THIS_ VideoMemStruct* pVidMem) PURE;
  596.     /************************************************************************
  597.      *  Method:
  598.      *      IHXVideoSurface2::Present
  599.      *  Purpose:
  600.      *      Called by renderer to put a video image on the screen at absoulte
  601.      *      time lTime.  prDestRect and prSrcRect are relative coordinates.
  602.      *      prSrcRect with all zeros defaults to the entire surface dimensions
  603.      *      and prDestRect with all zeros defaults to the entire client widnow.
  604.      *
  605.      *  Notes:
  606.      *      This is an asynchronous method.
  607.      */
  608.     STDMETHOD (Present) (THIS_
  609.                          VideoMemStruct* pVidMem,
  610.                          INT32 lTime,
  611.                          UINT32 ulFlags,
  612.                          HXxRect *prDestRect,
  613.                          HXxRect *prSrcRect) PURE;
  614.     /************************************************************************
  615.      *  Method:
  616.      *      IHXVideoSurface2::ColorConvert
  617.      *  Purpose:
  618.      *      Called by renderer to transform one video format to another.
  619.      *      It is optimized for writing to hardware memory.
  620.      */
  621.     STDMETHOD (ColorConvert) (THIS_
  622.                               INT32 fourCCIn, 
  623.                               HXxSize *pSrcSize,
  624.                               HXxRect *prSrcRect,
  625.                               SourceInputStruct *pInput,
  626.                               INT32 fourCCOut,
  627.                               UCHAR *pDestBuffer, 
  628.                               HXxSize *pDestSize, 
  629.                               HXxRect *prDestRect, 
  630.                               int nDestPitch) PURE;
  631.     
  632.     /************************************************************************
  633.      *  Method:
  634.      *      IHXVideoSurface2::Flush
  635.      *  Purpose:
  636.      *      Cancel any pending Present calls.
  637.      */
  638.     STDMETHOD_(void, Flush)(THIS) PURE;
  639.     /************************************************************************
  640.      *  Method:
  641.      *      IHXVideoSurface2::PresentIfReady
  642.      *  Purpose:
  643.      *      Optional method called by renderer to check the status of the
  644.      *      next Present. If will display the next image if it is time.  This
  645.      *      method assists the scheduler that is not getting its time slices
  646.      *      due to OS latency, non-cooperative multi-tasking, or any other
  647.      *      reason.
  648.      */
  649.     STDMETHOD (PresentIfReady) (THIS) PURE;
  650. };
  651. // $EndPrivate.
  652. // $Private:
  653. /****************************************************************************
  654.  *
  655.  *  Interface:
  656.  *
  657.  *  IHXSubRectVideoSurface
  658.  *
  659.  *  Purpose:
  660.  *
  661.  *  Interface for IHXSubRectVideoSurface objects.
  662.  *
  663.  *  IID_IHXSubRectVideoSurface:
  664.  *
  665.  *  {00002205-0901-11d1-8B06-00A024406D59}
  666.  *
  667.  */
  668. DEFINE_GUID(IID_IHXSubRectVideoSurface, 0x00002205, 0x901, 0x11d1, 0x8b,
  669.     0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
  670. #undef  INTERFACE
  671. #define INTERFACE   IHXSubRectVideoSurface
  672. DECLARE_INTERFACE_(IHXSubRectVideoSurface, IHXVideoSurface)
  673. {
  674.     STDMETHOD(BltSubRects)( THIS_
  675.                             UCHAR*               /*IN*/  pImageBits,
  676.                             HXBitmapInfoHeader* /*IN*/  pBitmapInfo,
  677.                             HXxBoxRegion*          /*IN*/  pDestRects,
  678.                             HXxBoxRegion*          /*IN*/  pSrcRects,
  679.                             float                        fScaleFactorX,
  680.                             float                        fScaleFactorY
  681.                             ) PURE;
  682. };
  683. // $EndPrivate.
  684. #endif /* _HXVSURF_H_ */