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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: basesurf.h,v 1.3.34.1 2004/07/09 01:58:56 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 _BASESURF_H_
  50. #define _BASESURF_H_
  51. #include "hxvctrl.h"
  52. #include "baseroot.h"
  53. #include "coloracc.h"
  54. #include "region.h"
  55. #include "hxmap.h"
  56. #include "hxwin.h"
  57. #if !defined(_GOLD) && 0
  58. #include "timestmp.h"    
  59. #endif
  60. //Bliting modes
  61. #define HX_NO_BLT          -1
  62. #define HX_BASIC_BLT       0
  63. #define HX_OVERLAY_BLT     1
  64. #define HX_BLT_YUV_STRETCH 2
  65. //defines for device caps
  66. #define HX_OVERLAY             (1<<0)  //Supports overlays of some type
  67. #define HX_OVERLAY_STRETCH     (1<<1)  //Supports stretchable overlays
  68. #define HX_BLTFOURCC           (1<<2)  //Supports color conversion in blts
  69. #define HX_OVER_KEYDEST    1
  70. #define HX_OVER_HIDE       2
  71. #define HX_OVER_SHOW       4  
  72. #define HX_OVER_BOB        8
  73. #define OVERLAY_NOT_VISIBLE 0
  74. //XXXgfw just to clean up the code. We still *REALLY* need to clean
  75. //this up in colormap.
  76. #ifdef _WIN32
  77. #define GETBITMAPCOLOR(x) GetBitmapColor( (LPBITMAPINFO)(x) )
  78. #else
  79. #define GETBITMAPCOLOR(x) GetBitmapColor( (HXBitmapInfo*)(x))
  80. #endif
  81. #ifdef _WIN32
  82. #define GETBITMAPPITCH(x) GetBitmapPitch( (LPBITMAPINFO)(x) )
  83. #else
  84. #define GETBITMAPPITCH(x) GetBitmapPitch( (HXBitmapInfo*)(x))
  85. #endif
  86. //Forward declarations
  87. class CHXBaseSite;
  88. class CBaseRootSurface;
  89. class CYUVInputFormatMngr;
  90. class CHWMemObj;
  91. //Just used to optimize YUV alphablending
  92. struct Image
  93. {
  94.     UCHAR*              pucImage;
  95.     HXBitmapInfoHeader bmiImage;
  96. };
  97. struct ImageBlock
  98. {
  99.     Image*       pImage;    //Image to draw
  100.     HXxRect      rect;      //Where to draw it, site rel coords.
  101.     CHXBaseSite* pSrcSite;  //The ARGB site this came from.
  102.     INT32        startX;    //Where this rect starts
  103.     INT32        startY;    //Where this rect starts
  104. };
  105. class CBaseSurface :
  106. public IHXSubRectVideoSurface,
  107. public IHXVideoControl,
  108. public IHXOverlayResponse
  109. {
  110. public:
  111.     friend class CHXBaseSite;
  112.    
  113. #ifdef _MACINTOSH
  114.     friend class CHXMacSite;
  115. #endif
  116.    
  117.     //Creation...
  118.     static CBaseSurface* Create(IUnknown* pContext, CHXBaseSite* pSite);
  119.     //IUnknown methods
  120.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);
  121.     STDMETHOD_(ULONG32,AddRef)(THIS);
  122.     STDMETHOD_(ULONG32,Release)(THIS);
  123.     //IHXVideoSurface methods usually called by renderers to Draw on
  124.     //the surface
  125.     STDMETHOD(Blt)(THIS_
  126.                    UCHAR*               pImageData,
  127.                    HXBitmapInfoHeader* pBitmapInfo,
  128.                    REF(HXxRect)         rDestRect,
  129.                    REF(HXxRect)         rSrcRect);
  130.     STDMETHOD(BeginOptimizedBlt)(THIS_ HXBitmapInfoHeader* pBitmapInfo);
  131.     STDMETHOD(OptimizedBlt)     (THIS_
  132.                                  UCHAR*      pImageBits,
  133.                                  REF(HXxRect) rDestRect,
  134.                                  REF(HXxRect) rSrcRect
  135.                                  );
  136.     STDMETHOD(EndOptimizedBlt)  (THIS);
  137.     STDMETHOD(GetOptimizedFormat)(THIS_ REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType);
  138.     STDMETHOD(GetPreferredFormat)(THIS_ REF(HX_COMPRESSION_TYPE) /*OUT*/ ulType);
  139.     
  140.     //IHXSubRectVideoSurface method.
  141.     STDMETHOD(BltSubRects)( THIS_
  142.                             UCHAR*               /*IN*/  pImageBits,
  143.                             HXBitmapInfoHeader* /*IN*/  pBitmapInfo,
  144.                             HXxBoxRegion*          /*IN*/  rDestRects,
  145.                             HXxBoxRegion*          /*IN*/  rSrcRects,
  146.                             float                        fScaleFactorX,
  147.                             float                        fScaleFactorY
  148.                             );
  149.    
  150.     //IHXVideoControls methods
  151.     STDMETHOD_(float, GetBrightness)(THIS);
  152.     STDMETHOD(SetBrightness)        (THIS_ float Brightness);
  153.     STDMETHOD_(float, GetContrast)  (THIS);
  154.     STDMETHOD(SetContrast)          (THIS_ float Contrast);
  155.     STDMETHOD_(float, GetSaturation)(THIS);
  156.     STDMETHOD(SetSaturation)        (THIS_ float Saturation);
  157.     STDMETHOD_(float, GetHue)       (THIS);
  158.     STDMETHOD(SetHue)               (THIS_ float Hue);
  159.     STDMETHOD_(float, GetSharpness) (THIS);
  160.     STDMETHOD(SetSharpness)         (THIS_ float Sharpness);
  161.     STDMETHOD(SetModeSharpness)     (THIS_ UINT16 dFlag);
  162.     /*
  163.      * IHXOverlayResponse methods
  164.      */
  165.     STDMETHOD(OverlayGranted) (THIS);
  166.     STDMETHOD(OverlayRevoked) (THIS);
  167.     // helper methods
  168.     virtual void SetRootSurface( CBaseRootSurface* pSurface);
  169.     HXxRect ComputeIntersection(HXxRect* pRect, HXxRect* newDestRect);
  170.     
  171.     //Overlay support.
  172.     void TryCreateOverlay(BOOL bOverlay);
  173.     void TryCreateOffScreenBuffer();
  174.     HX_RESULT CreateOverlay(BOOL, int cid, int x, int y);
  175.     virtual HX_RESULT ByPassCompositionSurface( UCHAR*               pImageData,
  176.                                         HXBitmapInfoHeader* pBitmapInfo,
  177.                                         HXxRect&             rDestRect,
  178.                                         HXxRect&             rSrcRect,
  179.                                         UCHAR*               pSurface,
  180.                                         LONG32               nSurfPitch 
  181.                                         );
  182.     HX_RESULT UpdateOverlay( REF(HXxRect) rDestRect,
  183.                              REF(HXxRect) rSrcRect,
  184.                              int x=0, int y=0  );
  185.     void      FillColorKey();
  186.     void      FillColorKey(HXxDC hdc);
  187.     INT32     GetOverlayColor();
  188.     void      UpdateDestRect(int x=0, int y=0);
  189.     void      DestroySurfaces();
  190.     virtual void ReInitSurfaces();
  191.     BOOL      ForceGDIMode(BOOL);
  192.     void      ResetUpdateOverlay();
  193.     HX_RESULT BltToPrimary(REF(HXxRect) rDestRect, REF(HXxRect) rSrcRect);
  194.     void      DrawTransitionBorders( HXBitmapInfoHeader* pBitmapInfo,
  195.                                      INT32                width,
  196.                                      ULONG32              color,
  197.                                      BOOL                 bBlendedBorders
  198.                                      );
  199.     void      SetColorspacePriorities(int* pList, int nEntries, int cid);
  200.     void      RestoreColorspacePriorities(int cid);
  201.     void      LinkOverlay(CHXBaseSite* pSite);
  202.     void      AddLinkedSite(CHXBaseSite* pSite);
  203.     virtual HX_RESULT RelinquishOverlay();
  204.     virtual HX_RESULT AcquireOverlay();
  205.     void      UpdateBltStats(HXxRect* pRect);
  206.     
  207.     void      DisableColorControls(float &fBrightness,
  208.                                    float &fContrast,
  209.                                    float &fSaturation,
  210.                                    float &fHue);
  211.     void      EnableColorControls(float fBrightness,
  212.                                   float fContrast,
  213.                                   float fSaturation,
  214.                                   float fHue);
  215.     virtual BOOL _IsDisplaySurfaceYuv();
  216.     HXxSize* GetSurfaceSize()   {return &m_surfaceSize;}
  217. private:
  218.    
  219.     CBaseSurface();
  220.     CBaseSurface( const CBaseSurface& it );
  221.     CBaseSurface& operator=(const CBaseSurface& rhs );
  222.    
  223. protected:
  224.     void _FillColorKey();
  225.     CBaseSurface(IUnknown* pContext, CHXBaseSite* pSite);
  226.     virtual ~CBaseSurface();
  227.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  228.       
  229.     //Converts window coordinates into device coordinates
  230.     //if needed. This is used on Windows at least because
  231.     //its overlays use screen coords instead of window coords.
  232.     //This is a noop on unix as its overlays are in window coords.
  233.     virtual void _GetWindowDeviceCords(HXxRect* rect )=0;
  234.    
  235.     LONG32    m_lRefCount;
  236.     IUnknown* m_pContext;
  237.     IHXOverlayManager* m_pOverlayManager; 
  238.     BOOL   m_bNeedColorKeyFilled;
  239.     BOOL   m_bOffBecauseofShinking;
  240.     float  m_Brightness;
  241.     float  m_Contrast;
  242.     float  m_Saturation;
  243.     float  m_Hue;
  244.     float  m_Sharpness;
  245.     UINT16 m_ModeSharpness;
  246.     float  m_PrevBrightness;
  247.     float  m_PrevContrast;
  248.     float  m_PrevSaturation;
  249.     float  m_PrevHue;
  250.     float  m_PrevSharpness;
  251.     CHXBaseSite*         m_pSite;
  252.     CBaseRootSurface*    m_pRootSurface;
  253.     HXBitmapInfoHeader* m_pOptimizedFormat;
  254.     UINT32               m_oldOverlayColorDepth;
  255.     UINT32               m_convertedOverlayColor;
  256.     
  257.     //Overlay Support
  258.     UINT32  m_nSrcCID;
  259.     UINT32  m_nSurfaceCID;
  260.     HXxSize m_surfaceSize;
  261. public:
  262.     INT32   m_nBltMode;
  263. protected:
  264.     INT32   m_nOldBltMode;
  265.     INT32   m_nOldBltMode2;
  266.     BOOL    m_bBackGroundDirty;
  267.     BOOL    m_bUseOverlays;
  268.     BOOL    m_bDisableFillColorKey;
  269.     BOOL    m_bMultipleOverlay;
  270.     HXxRect m_lastSrcRect;
  271.     BOOL    m_bSpamUpdateOverlay;
  272.     BOOL    m_bFlipOverlay;
  273.     int     m_nBackBufferCount;
  274.     int     m_nMaxBackBuffers;
  275.     int     m_nOverlayFailureCount;       
  276.     int     m_nDDSurfaceSize;
  277.     int     m_nUpdateOverlayByPassCount;
  278.     HXxRect m_lastUpdateDestRect;
  279.     HXxRect m_lastUpdateSrcRect;
  280.     CBaseSurface* m_pLinkedOverlay;
  281.     BOOL    m_bAllowOverlayLinking;
  282.     BOOL    m_bLostHWAcceleration;
  283. #if !defined(_GOLD) && 0
  284.     CTimeSample m_TimeStamps;
  285. #endif
  286.     HXBitmapInfoHeader m_bmi;
  287.     typedef struct tagFrameElement
  288.     {
  289.         int      nIndex;
  290.         INT32    lTimeStamp;
  291.         double   dTimeAvailable;
  292.         INT32    nBltMode;
  293.         UINT32   ulFlags;
  294.         UINT32   dwDDFlags;
  295.         UCHAR    *pImageData;
  296.         BOOL     bAlpha;
  297.         HXxRect  rcSrc;
  298.         HXxRect  rcDst;
  299.         HXBitmapInfoHeader bmi;
  300.         INT32    count;
  301.         AlphaStruct* pAlphaList;
  302.     } tFrameElement;
  303.     //Color Access Functions/
  304.     ColorFuncAccess*        zm_pColorAcc;
  305.     CYUVInputFormatMngr*    m_pyuvInputMngr;
  306.     CHWMemObj*              m_pHwMemObj;
  307.     //Scroll bar support
  308.     double        m_fScrollBarZoom;
  309.     //Support for Alpha Blending.....
  310.     UCHAR*              m_pucLastImage;
  311.     HXBitmapInfoHeader m_bmiLastImage;
  312.     HXBitmapInfoHeader m_bmiLastBlt;
  313.     UINT32              m_ulLastBlendTime;
  314. public:    
  315.     CHXMapPtrToPtr m_YUVAImageList; //Maps site to YUVA image.
  316.     CHXSimpleList  m_imageBlocks;   //List of YUV blended images to paint.
  317.     CHXBaseSite* GetSite()  {return m_pSite;}
  318. protected:
  319.     CHXSimpleList  m_LinkedSites;   
  320.     HXREGION*        m_pAdditionalColorKey;
  321.     BOOL           m_bYUVBlending;
  322.     BOOL           m_bVideoSurface2;
  323.     BOOL           m_bOptimalVideoScheduler;
  324.     
  325.     //XXXgfw I am assuming now that I can use the below scaling for
  326.     //XXXgfw my YUV optimized alphablending...
  327.     double m_scaleFactorX;
  328.     double m_scaleFactorY;
  329.     
  330.     HXxRect* m_paSrcRects;
  331.     HXxRect* m_paDestRects;
  332.     
  333.     //paSrcRects and paDestRects need to be HX_FREEed when you are done
  334.     //with them. internally a realloc is done so don't free then until
  335.     //you are sure you are done or want to reclaim the memory.
  336.     void _ConstructRects(HXxRect&  rSrcRectCopy,
  337.                          HXxRect&  rDestRectCopy,
  338.                          BOOL      bDoAlpha,
  339.                          int&      nNumRects,
  340.                          HXxRect** paSrcRects, 
  341.                          HXxRect** paDestRects,
  342.                          HXREGION*   pAdditionalRegion = NULL
  343.                          );
  344.     //This determines what is the best way to ask for system memory to
  345.     //be filled in by rvrend under VidSurf2.  You must delete the
  346.     //returned region.
  347.     HXREGION* _DetermineBestRegion();
  348. public:    
  349.     //Returns if any blending is going to happen or not.
  350.     BOOL _SetUpBlendRects( HXBitmapInfoHeader* pBitmapInfo = NULL,
  351.                            UCHAR* pImageData = NULL);
  352. protected:    
  353.     BOOL _RecursiveYUVBlend( Image* pImage,
  354.                              HXxRect boundingRect,
  355.                              CBaseSurface* pSurface,
  356.                              INT32 lXOffset,
  357.                              INT32 lYOffset);
  358.         
  359.     //blends the rects and put the results into m_imageBlocks.
  360.     BOOL _BlendYUVRects( AlphaStruct* pList, int nCount, UINT32 ulDestFourCC);
  361.     BOOL _DoYUVRectsIntersect();
  362.     
  363.     void _RemoveYUVImageLists();
  364.     CHXBaseSite* _SearchForYUV(CHXBaseSite* pSite);
  365.     BOOL _AlphaSetupAndBlending(HXBitmapInfoHeader* pBitmapInfo,
  366.                                 UCHAR*               pImageData,
  367.                                 HXxRect&             rSrcRect,
  368.                                 HXxRect&             rDestRect
  369.                                 );
  370.    
  371.     void _AlphaBlend( HXREGION*              pRegionToBlend,    //window coords 
  372.                       UCHAR*               pBottomImage,
  373.                       HXBitmapInfoHeader* pbmiBottomImageInfo,
  374.                       HXxPoint*            pBottomPosition,   //window coords
  375.                       UCHAR*               pTopImage,
  376.                       HXBitmapInfoHeader* pbmiTopImageInfo,
  377.                       HXxPoint*            pTopPosition      //window coords
  378.                       );
  379.    
  380.     //Returns whether or not this graphics device allows the shrinking of
  381.     //overlays.
  382.     virtual BOOL _AllowsOverlayShrinking();
  383.     virtual void _WaitForFlush();
  384.     BOOL m_bImageBlocksGood;
  385.     void         AlignRect(HXxRect *pRect, int nMaxWidth, int nMaxHeight);
  386.     virtual void CreateColorAccess(IUnknown* pUnk) {zm_pColorAcc = new ColorFuncAccess(pUnk);}
  387.     virtual void CreateYuvInputMngr();
  388.     BOOL    m_bAllocHook;   // Are we tracing mem allocs
  389.    
  390. public:
  391.    
  392.     //To test if a pixel is transparent or not.
  393.     BOOL IsPixelTransparent(HXxPoint& point, INT32 alpha );
  394.     HXBitmapInfo* GetLastBMI() { return (HXBitmapInfo*)&m_bmiLastBlt; }
  395.     void InitSurface(IUnknown* pUnk);
  396.       
  397.     //Virtual Functions which must me implemented by each OS.
  398.     /************************************************************************
  399.      *  Method:
  400.      *      _ReleaseSurface
  401.      *  Purpose:
  402.      *      Destroys pSurface
  403.      */
  404.     virtual void      _ReleaseSurface(CBaseRootSurface* pSurface) = 0;
  405.     /************************************************************************
  406.      *  Method:
  407.      *      _DrawBlack
  408.      *  Purpose:
  409.      *      Fill the entire region with black
  410.      */
  411.     virtual void      _DrawBlack(void* pWindow) = 0;
  412.     /************************************************************************
  413.      *  Method:
  414.      *      _BltToPrimary
  415.      *  Purpose:
  416.      *      Transfer data from offscreen memory to the primary surface.
  417.      *      This may not be applicable on some platforms.
  418.      */
  419.     virtual HX_RESULT _BltToPrimary(REF(HXxRect) rDestRect, REF(HXxRect) rSrcRect) = 0;
  420.     /************************************************************************
  421.      *  Method:
  422.      *      _CreateBuffer
  423.      *  Purpose:
  424.      *      Create an offscreen (non-overlay) video buffer.  This is used
  425.      *      when overlay is not available .
  426.      *      This may not be applicable on some platforms.
  427.      */
  428.     virtual void      _CreateBuffer() = 0;
  429.     /************************************************************************
  430.      *  Method:
  431.      *      _GetCaps
  432.      *  Purpose:
  433.      *      Query the current display device's drawing capabilities.  See
  434.      *      the list of display caps at the top of this file.
  435.      */
  436.     virtual HX_RESULT _GetCaps(UINT32 *pfSurfaceCaps) = 0;
  437.     /************************************************************************
  438.      *  Method:
  439.      *      _CreateOverlay
  440.      *  Purpose:
  441.      *      Create a video surface of type cid at dimenstions x,y.  If
  442.      *      bOverlay is TRUE, the surface must be overlay.
  443.      */
  444.     virtual HX_RESULT _CreateOverlay(BOOL bOverlay, int cid, int x, int y) = 0; 
  445.     /************************************************************************
  446.      *  Method:
  447.      *      _LockInternalSurface
  448.      *  Purpose:
  449.      *      Obtain a writable pointer to the allocated video surface and
  450.      *      prepare to write to it.
  451.      */
  452.     virtual HX_RESULT _LockInternalSurface(UCHAR** ppSurfPtr, LONG32* pnSurfPitch, REF(HXxSize) srcSize) = 0;
  453.     /************************************************************************
  454.      *  Method:
  455.      *      _UnlockInternalSurface
  456.      *  Purpose:
  457.      *      Inform the video surface that you are finished writing to it.
  458.      */
  459.     virtual HX_RESULT _UnlockInternalSurface(UCHAR* pSurfPtr) = 0;
  460.     
  461.     /************************************************************************
  462.      *  Method:
  463.      *      _SetupDCObjects
  464.      *  Purpose:
  465.      *      Set the current display context with a specific brush and pen.
  466.      *      This may not be applicable on some platforms.
  467.      */
  468.     virtual void      _SetupDCObjects(HXxDC hxxDC,
  469.                                       void** phOldBrush,
  470.                                       void** phOldPen) = 0;
  471.     /************************************************************************
  472.      *  Method:
  473.      *      _FillRectangle
  474.      *  Purpose:
  475.      *      Fill the specified rectangle with the current brush.
  476.      */
  477.     virtual void      _FillRectangle(HXxDC hxxDC,
  478.                                      UINT32 left,
  479.                                      UINT32 top,
  480.                                      UINT32 right,
  481.                                      UINT32 bottom) = 0;
  482.     
  483.     /************************************************************************
  484.      *  Method:
  485.      *      _RestoreDCObjects
  486.      *  Purpose:
  487.      *      Restore the default pen and brush of the display context.
  488.      *      This may not be applicable on some platforms.
  489.      */
  490.     virtual void  _RestoreDCObjects(HXxDC hxxDC, void* hOldBrush, void* hOldPen) = 0;
  491.     /************************************************************************
  492.      *  Method:
  493.      *      _GetCompositionSurfaceHXxDC
  494.      *  Purpose:
  495.      *      Get the display context of the composition surface.
  496.      *      This may not be applicable on some platforms.
  497.      */
  498.     virtual void  _GetCompositionSurfaceHXxDC(HXxDC *hdc) = 0;
  499.     /************************************************************************
  500.      *  Method:
  501.      *      _ReleaseCompositionSurfaceHXxDC
  502.      *  Purpose:
  503.      *      Release the display context of the composition surface.
  504.      *      This may not be applicable on some platforms.
  505.      */
  506.     virtual void  _ReleaseCompositionSurfaceHXxDC(HXxDC hdc) = 0;
  507.     /************************************************************************
  508.      *  Method:
  509.      *      _InsureColorMatch
  510.      *  Purpose:
  511.      *      Match inColor with that of the current display device.
  512.      *      This may not be applicable on some platforms.
  513.      */
  514.     virtual INT32 _InsureColorMatch(INT32 InColor) = 0;
  515.     /************************************************************************
  516.      *  Method:
  517.      *      _SetColorKey
  518.      *  Purpose:
  519.      *      Set the color of the overlay's colorkey.
  520.      *      This may not be applicable on some platforms.
  521.      */
  522.     virtual void  _SetColorKey(INT32 nColorSpaceLowValue, INT32 nColorSpaceHighValue) = 0;
  523.     /************************************************************************
  524.      *  Method:
  525.      *      _UpdateOverlay
  526.      *  Purpose:
  527.      *      Update the position, size, and mode of the overaly.
  528.      *      This may not be applicable on some platforms.
  529.      */
  530.     virtual void  _UpdateOverlay(HXxRect* src, HXxRect* dest, INT32 inFlags) = 0;
  531.     /************************************************************************
  532.      *  Method:
  533.      *      _IsSurfaceVisible
  534.      *  Purpose:
  535.      *      Is the current video surface visible.
  536.      */
  537.     virtual BOOL  _IsSurfaceVisible() = 0;
  538.     /************************************************************************
  539.      *  Method:
  540.      *      _ReleaseSurface
  541.      *  Purpose:
  542.      *      Destroys the allocated video surface
  543.      */
  544.     virtual void  _ReleaseSurface() = 0;
  545.     /************************************************************************
  546.      *  Method:
  547.      *      _GetDC
  548.      *  Purpose:
  549.      *      Get the display context for the site that owns this surface.
  550.      *      This may not be applicable on some platforms.
  551.      */
  552.     virtual HXxDC _GetDC(HXxWindow*) = 0;
  553.     /************************************************************************
  554.      *  Method:
  555.      *      _ReleaseDC
  556.      *  Purpose:
  557.      *      Release the display context for the site that owns this surface.
  558.      *      This may not be applicable on some platforms.
  559.      */
  560.     virtual void  _ReleaseDC(HXxWindow*, HXxDC) = 0;
  561.     
  562.     virtual void  _ColorWindows();
  563.     virtual BOOL  UsingOverlay();
  564.     virtual void _LockBlitter() {};
  565.     virtual void _UnlockBlitter() {};
  566.     virtual void _FlushSurfaces() {};
  567.     virtual void _WaitForQueuedFrames() {};
  568.     virtual HX_RESULT _ScheduleFrameForDisplay(void* pOsData,
  569.                                                tFrameElement* pItem,
  570.                                                UINT32 nResolution);
  571.     virtual void CreateHWMemObj(int cid) {};
  572. };
  573. #endif  /* _BASESURF_H_ */