basesurf.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:22k
源码类别:

Symbian

开发平台:

C/C++

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