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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: vidosurf.h,v 1.2.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 _VIDO_SURF_H_
  50. #define _VIDO_SURF_H_
  51. #ifdef _MACINTOSH
  52. #include "hxcolor.h"
  53. #ifdef _MAC_MACHO
  54. #include <QuickTime/QuickTime.h>
  55. #else
  56. #include <ImageCodec.h> // for overlay support
  57. #endif
  58. #endif
  59. class CHXSimpleList;
  60. class HXScheduler;
  61. class CHXVideoSurface : public CHXSurface
  62. {
  63. protected:
  64.     virtual ~CHXVideoSurface();
  65.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  66. #ifdef _WINDOWS
  67.     HDC     m_hDC;
  68.     // section build
  69.     BOOL     m_bInitialized;
  70.     HDC     m_hMemoryDC;
  71.     HBITMAP     m_hOldBitmap;
  72.     HBITMAP     m_hBmpMem;
  73.     HPALETTE     m_hOldPal;
  74.     HPALETTE     m_hPal;
  75.     int     m_nMemDCWidth;
  76.     int     m_nMemDCHeight;
  77.     // draw dib
  78.     HDRAWDIB     m_hDrawDIB;
  79.     // common
  80.     UCHAR*     m_pDibBits;
  81. #ifdef _WINDOWS
  82.     HFONT     m_hFont; // Font to draw the status text with
  83.     HBRUSH     m_hStatusBrush; // Brush with status text color
  84.     HPEN     m_hNullPen; // Pen for shadow of status text
  85. #endif /* _WIN32 */
  86. #endif /* _WINDOWS */
  87.     int     m_nStatusTextHeight;// Height of the status text
  88.     CHXString     m_StatusText; // The Status Text
  89. #if defined(_MACINTOSH) || defined(_WINDOWS)
  90.     HX_MOFTAG GetFormatForDisplay(INT16* pDisplayDepth);
  91. #endif
  92. #ifdef _MACINTOSH
  93.     
  94.     friend class CHXSiteManager;
  95.     friend class CHXSiteWindowed;
  96.     
  97.     enum {
  98. kEightBitDepth = 0,
  99. kSixteenBitDepth,
  100. kThirtyTwoBitDepth,
  101. kNumberOfDepths
  102.     };
  103.     enum {
  104. kMaxMonitors = 10
  105. // make the assumption that they won't have more than 10
  106. // monitors hooked up(!)
  107.     };
  108.     
  109.     RgnHandle     m_RgnHandle;
  110.     WindowPtr      m_pWnd;
  111.     UCHAR *     m_pImageData; 
  112.     static PicHandle     sLogoPict;
  113.     static UINT16     zm_Logo_PICT_ID;
  114.     static INT32     DepthToDepthEnum(short depth);
  115.     void     DrawBackgroundPICT(void);
  116.     void     SetupClipRegion(void);
  117.     void     RestoreClipRegion(void);
  118.     BOOL      GetBitDepth(INT16 &nDepth);
  119.     
  120.     static UINT32 zm_uNumberOfAttachedDevices;
  121.     static GDHandle zm_AttachedDevice[kMaxMonitors];
  122.     
  123.     GWorldPtr m_InterimGWorld[kNumberOfDepths];
  124.     PixMapHandle m_InterimGWorldPixMap[kNumberOfDepths];
  125.     UINT16 m_uInterimGWorldWidth;
  126.     UINT16 m_uInterimGWorldHeight;
  127.     UINT16 m_uLastBlitWidth;
  128.     UINT16 m_uLastBlitHeight;
  129.     LPHXCOLORCONVERTER m_pColorConverter[kNumberOfDepths];
  130.     
  131.     void SetUpColorConverter( HXBitmapInfoHeader* pBitmapInfo, Rect* dstRect );
  132.     void UpdateColorAdjustments();
  133.     
  134.     // stuff added for interrupt-time blitting... namely, we have to convert the visRgn
  135.     // into a list of rectangles.
  136.     
  137.     CHXSimpleList* mVisRgnRects;
  138.     RgnHandle mLastVisRgn;
  139.     void CheckRectRgn( Rect r, RgnHandle rgn, Point globalOffset );
  140.     void UpdateRegionIfNecessary( Rect boundingRect, Point globalOffset, BOOL bForceItToUpdate = FALSE );
  141.     
  142.     void ReflectRectsToScreen( CHXSimpleList* theListOfRectsToBlit, const Rect& trimToThisRect, REF(CHXxRect) rSrcRect );
  143.     static void MenuRestoreCallback( Rect* theRectToRestore );
  144.     static pascal void VisRgnChangedCallback(void);
  145.     
  146.     Point m_LocalToGlobalCoords;
  147.     BOOL m_bItsOKToDoAnInterruptBlit;
  148.     
  149.     static CHXSimpleList zm_VideoSurfaceList;
  150.     
  151.     class SystemTimeRequestCallback : public IHXCallback
  152.     {
  153.     private:
  154. LONG32 m_lRefCount;
  155. ~SystemTimeRequestCallback();
  156.     public:
  157. SystemTimeRequestCallback();
  158. // IUnknown methods
  159. STDMETHOD(QueryInterface) ( THIS_ REFIID riid, void**ppvObj );
  160. STDMETHOD_(ULONG32,AddRef) ( THIS );
  161. STDMETHOD_(ULONG32,Release) ( THIS );
  162. // IHXCallback methods
  163. STDMETHOD(Func) ( THIS );
  164. BOOL m_bPending;
  165. CallbackHandle m_ulSystemTimeRequestCallbackPendingID;
  166.     };
  167.     
  168.     SystemTimeRequestCallback* m_pSystemTimeRequestCallback;
  169.     HXScheduler* m_pScheduler;
  170.     
  171.     // overlay support on the Mac
  172.     
  173.     static CHXVideoSurface* zm_pSurfaceUsingOverlay; // will be nil if there are none.
  174.     static Ptr zm_pOverlayAddress;
  175.     static LPHXCOLORCONVERTER zm_pOverlayColorConverter;
  176.     static Handle zm_ImageDescription;
  177.     static Ptr zm_pDecompressRecord;
  178.     static ImageSubCodecDecompressRecord zm_DRP;
  179.     static ComponentInstanceRecord* zm_YUV;
  180.     static Rect zm_OverlayRect;
  181.     static BOOL zm_bInitializedOverlay;
  182.     static BOOL zm_bOverlayExists;
  183.     
  184.     int m_nInCID;
  185.     BOOL m_bNaughtDrawn;
  186.     BOOL m_bNeedToPaintOverlayKeyColor;
  187.     
  188.     
  189.     static BOOL SetUpOverlay(Rect globalScreenRect, int bitmapWidth, int bitmapHeight);
  190.     static void CleanUpOverlay();
  191.     BOOL ActualOverlayStuff( Rect globalScreenRect, unsigned char* pImageData,
  192.      int bitmapWidth, int bitmapHeight, int imagePitch,
  193.      int srcLeft, int srcTop, int srcWidth, int srcHeight);
  194. public:
  195.     static BOOL OverlayExists();
  196.     
  197. protected:
  198. #endif /* _MACINTOSH */
  199.     STDMETHOD(BltImage) (UCHAR* pImageData,
  200. HXBitmapInfoHeader* pBitmapInfo,
  201. REF(CHXxRect) rDestRect,
  202. REF(CHXxRect) rSrcRect);
  203. public:
  204.     CHXVideoSurface(IUnknown* pContext, CHXSiteWindowed* pSite);
  205.     STDMETHOD(SetStatusText) (const char* pszText);
  206. #ifdef _MACINTOSH
  207.     HX_RESULT Init(); 
  208. #endif
  209. #ifdef _WINDOWS
  210.     STDMETHOD (DrawStatusText)(HDC hdc, REF(CHXxRect) rDestRect);
  211.     HX_RESULT Init(HDC hDC); 
  212.     STDMETHOD (BltImageToDC)(
  213.    HDC hDC,
  214.    UCHAR* pImageData,
  215.    HXBitmapInfoHeader* pBitmapInfo,
  216.    REF(CHXxRect) rDestRect,
  217.    REF(CHXxRect) rSrcRect);
  218.     void SetupMemDC(const CHXxRect& rDestRect);
  219. #endif /* _WINDOWS */
  220. };
  221. #endif // _VIDO_SURF_H_