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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: baseroot.h,v 1.1.1.1.42.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. #include "coloracc.h"
  50. #include "hxvsurf.h"
  51. #include "hxengin.h"
  52. #include "hxslist.h"
  53. #ifndef _BASEROOT_H_
  54. #define _BASEROOT_H_
  55. // Forward declarations
  56. class CBaseRootSurface;
  57. class CHXBaseSite;
  58. #define HX_WINDOWLESS_DEBUG       0
  59. #define HX_WINDOWLESS_MINIMAL     1
  60. #define HX_WINDOWLESS_COMPOSITION 2
  61. #define TEXTOVERLAY "TextOverlay"
  62. // You would think that Video and System would be exclusive. 
  63. // Not so. There is a default which allows the system to decide.
  64. #define HX_ACCELERATION_ON     1
  65. #define HX_USE_VIDEO_MEMORY    2
  66. #define HX_USE_SYSTEM_MEMORY   4
  67. struct CModesDesc
  68. {
  69.    UINT32 m_nWidth;
  70.    UINT32 m_nHeight;
  71.    UINT32 m_nBitCount;
  72.    UINT32 m_fourCC;
  73. };
  74. class CBaseRootSurface : public IUnknown
  75. {
  76. public:
  77.     virtual ~CBaseRootSurface();
  78.     CBaseRootSurface(IUnknown* pContext, CHXBaseSite* pSite);
  79.     static CBaseRootSurface* Create(IUnknown* pContext, CHXBaseSite* pSite);
  80.     //IUnknown methods
  81.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj);
  82.     STDMETHOD_(ULONG32,AddRef) (THIS);
  83.     STDMETHOD_(ULONG32,Release) (THIS);
  84.     //BLTing methods.
  85.     STDMETHOD(Blt) (THIS_ UCHAR*                pImageData,
  86.                           HXBitmapInfoHeader*   pBitmapInfo,
  87.                           REF(HXxRect)          rDestRect,
  88.                           REF(HXxRect)          rSrcRect,
  89.                           CHXBaseSite*          pSite);
  90.     STDMETHOD(BeginOptimizedBlt)(THIS_ HXBitmapInfoHeader* pBitmapInfo);
  91.     STDMETHOD(OptimizedBlt) (THIS_ UCHAR* pImageBits,
  92.                                    REF(HXxRect) rDestRect,
  93.                                    REF(HXxRect) rSrcRect);
  94.     STDMETHOD(EndOptimizedBlt) (THIS);
  95.     STDMETHOD(GetOptimizedFormat)(THIS_ REF(HX_COMPRESSION_TYPE) ulType);
  96.     STDMETHOD(GetPreferredFormat)(THIS_ REF(HX_COMPRESSION_TYPE) ulType);
  97.     void BltComposition();
  98.     void         DestroySurfaces();
  99.     void         ReInitSurfaces();
  100.     void         FillBorders();
  101.     virtual void SetResolution(int x, int y, int depth, void* pWindow);
  102.     void         SetBltLock(BOOL bSet);
  103.     virtual void GetDisplayModes(CModesDesc* pModesDesc, INT32* nNumModes);
  104.     HX_RESULT    Lock(UINT32 nID);
  105.     HX_RESULT    Unlock(UINT32 nID, HXxWindow* pWindow, CHXBaseSite* pSite=NULL);
  106.     BOOL         IsCompositionEnabled();
  107.     virtual void ModifyBoundsRect(HXxRect* pRect);
  108.     HX_RESULT    MinimalLock();
  109.     HX_RESULT    MinimalUnlock(HXxWindow* pWindow);
  110.     HX_RESULT    SizeChanged();
  111.     virtual void _PreFlightBlt(HXxRect& dst) {}
  112.     virtual BOOL _OptimizedSurfaceOpened();
  113.     virtual UINT32 _GetNumberOfMonitors() { return 1; }
  114.     virtual BOOL _RectOnNthMonitor(HXxRect rect, UINT32 uMonitor, HXxRect& intersectRect);
  115.     virtual BOOL _IsHardwareAccelerationAvail();
  116.     virtual BOOL _AcquireHardwareAcceleration();
  117.     virtual BOOL _LoseHardwareAcceleration();
  118.     virtual BOOL _EnableHardwareAcceleration();
  119.     virtual BOOL _DisableHardwareAcceleration();
  120.     virtual void DrawFocusRect(int nSurfaceCID,
  121.                               HXxSize *pSurfaceSize,
  122.                               UCHAR *pVidMem,
  123.                               CHXBaseSite* pSite);
  124. #ifdef _WINDOWS
  125.     IHXPlayer*  GetPlayer();
  126. #endif
  127.     void         LockCompMutex(); 
  128.     void         UnlockCompMutex();
  129.     ColorFuncAccess* GetColorAccess() {return zm_pColorAcc;}
  130.    
  131. protected:
  132.     HXMutex*    m_pMutex;
  133.     HXMutex*    m_pCompMutex;
  134.     CHXSimpleList m_pBltRects;
  135.     LONG32       m_lRefCount;
  136.     IUnknown*    m_pContext;
  137.     CHXBaseSite* m_pSite;    
  138.     UINT32       m_fSurfaceType;
  139.     INT32        m_nBLTMode;
  140.     INT32        m_nCompositionSurfaceCID;
  141.     HXxSize      m_allocatedScratchSize;
  142.     UCHAR*       m_pCompositionSurface;
  143.     HXxSize      m_allocatedCompositionSize;
  144.     INT32        m_nCompositionPitch;
  145.     HXxRect      m_boundsRect;
  146.     HXxSize      m_compositionSize;
  147.     BOOL         m_bCompositionSurfaceCreated;
  148. #ifdef _WIN32
  149.     BITMAPINFO   m_bmiComposition;
  150. #else
  151.     HXBitmapInfo m_bmiComposition;
  152. #endif   
  153. #ifdef _WINDOWS
  154.     IHXPlayer*  m_pPlayer;
  155. #endif
  156.    
  157.     BOOL         m_bUseCardMemory;
  158.     CHXBaseSite* m_pUnlockingSite;
  159.     ColorFuncAccess* zm_pColorAcc;
  160.     
  161.     HX_RESULT DebugBlt( UCHAR*                pImageData,
  162.                         HXBitmapInfoHeader*  pBitmapInfo,
  163.                         REF(HXxRect)          rDestRect,
  164.                         REF(HXxRect)          rSrcRect);
  165.     HX_RESULT MinimalBlt( UCHAR* pImageData, HXBitmapInfoHeader* pBitmapInfo,
  166.                           REF(HXxRect) rDestRect, REF(HXxRect) rSrcRect, CHXBaseSite* pSite);
  167.     // Pure virtuals....
  168.    
  169.     /************************************************************************
  170.      *  Method:
  171.      *      _BltFromScratchToComposition
  172.      *  Purpose:
  173.      *      Transfer data from the scratch surface to the composition surface.
  174.      *      This may not be applicable on some platforms.
  175.      */
  176.     virtual void _BltFromScratchToComposition(HXxRect& rDestRect, HXxRect& rSrcRect)=0;
  177.     
  178.     /************************************************************************
  179.      *  Method:
  180.      *      _DebugBlt
  181.      *  Purpose:
  182.      *      Draw pImageData on the root surface's site.
  183.      */
  184.     virtual HX_RESULT _DebugBlt( UCHAR*                 pImageData,
  185.                                  HXBitmapInfoHeader*    pBitmapInfo,
  186.                                  REF(HXxRect)           rDestRect,
  187.                                  REF(HXxRect)           rSrcRect) = 0;
  188.     /************************************************************************
  189.      *  Method:
  190.      *      _GetYUVScratchWidthHeight
  191.      *  Purpose:
  192.      *      Query the dimensions of the scratch surface
  193.      */
  194.     virtual void _GetYUVScratchWidthHeight(UINT32* pWidth, UINT32* pHeight) = 0;
  195.     /************************************************************************
  196.      *  Method:
  197.      *      _CreateYUVScratchSurface
  198.      *  Purpose:
  199.      *      Create an offscreen yuv surface.  This is used when we need to
  200.      *      perform a 2 stage color converter (source->scratch->dest).
  201.      */
  202.     virtual void _CreateYUVScratchSurface(UINT32 width, UINT32 height) = 0;
  203.     /************************************************************************
  204.      *  Method:
  205.      *      _GetYUVScratchSurfacePointer
  206.      *  Purpose:
  207.      *      Get a writable pointer and the pitch of the scratch buffer.
  208.      */
  209.     virtual void _GetYUVScratchSurfacePointer(UCHAR** pYUVBits, INT32* YUVPitch) = 0;
  210.     /************************************************************************
  211.      *  Method:
  212.      *      CreateScratchSurface
  213.      *  Purpose:
  214.      *      Create an offscreen RGB surface to a 2 stage color convert
  215.      *      when going from YUV->RGB.
  216.      */
  217.     virtual HX_RESULT CreateScratchSurface( int nCompositionSurfaceCID,
  218.                                             HXxSize* pSize) = 0;
  219.     /************************************************************************
  220.      *  Method:
  221.      *      ScratchLock
  222.      *  Purpose:
  223.      *      Get a writable pointer and the pitch of the scratch buffer.
  224.      */
  225.     virtual HX_RESULT ScratchLock(UCHAR** pBits, INT32* pPitch) = 0;
  226.     /************************************************************************
  227.      *  Method:
  228.      *      ScratchUnlock
  229.      *  Purpose:
  230.      *      Finished writing to the scratch buffer.
  231.      */
  232.     virtual HX_RESULT ScratchUnlock(UCHAR* pBits) = 0;
  233.     /************************************************************************
  234.      *  Method:
  235.      *      _MinimalUnlock
  236.      *  Purpose:
  237.      *      Unlocks the composition surface for writing
  238.      */
  239.     virtual HX_RESULT _MinimalUnlock(HXxWindow* pWindow) = 0;
  240.     /************************************************************************
  241.      *  Method:
  242.      *      _LockComposition
  243.      *  Purpose:
  244.      *      Locks the composition surface for writing
  245.      */
  246.     virtual HX_RESULT _LockComposition(UCHAR** pBits, INT32* pPitch)=0;
  247.     /************************************************************************
  248.      *  Method:
  249.      *      _CreateCompositionSurface
  250.      *  Purpose:
  251.      *      Create an offscreen video surface matching the size and format
  252.      *      of the top level site.
  253.      */
  254.     virtual HX_RESULT _CreateCompositionSurface() = 0;
  255.     /************************************************************************
  256.      *  Method:
  257.      *      _DestroyCompositionSurface
  258.      *  Purpose:
  259.      *      Destroy the composition surface
  260.      */
  261.     virtual HX_RESULT _DestroyCompositionSurface() = 0;
  262.     virtual void _MinimalBlt(HXxRect& src, HXxRect& dest);
  263.     virtual void _FillBorders() {};
  264.     virtual void CreateColorAccess(IUnknown* pUnk) {zm_pColorAcc = new ColorFuncAccess(pUnk);}
  265.    
  266. private:
  267. };
  268. #endif  /* _BASEROOT_H_ */