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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: pxgifrnd.h,v 1.3.22.1 2004/07/09 01:54:03 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 _GIF_RENDER_H
  50. #define _GIF_RENDER_H
  51. // Forward declarations
  52. typedef _INTERFACE IHXStream                        IHXStream;
  53. typedef _INTERFACE IHXPlayer                        IHXPlayer;
  54. typedef _INTERFACE IHXValues                        IHXValues;
  55. typedef _INTERFACE IHXPacket                        IHXPacket;
  56. typedef _INTERFACE IHXBuffer                        IHXBuffer;
  57. typedef _INTERFACE IHXSite                          IHXSite;
  58. typedef _INTERFACE IHXVideoSurface                  IHXVideoSurface;
  59. typedef _INTERFACE IHXMultiInstanceSiteUserSupplier IHXMultiInstanceSiteUserSupplier;
  60. typedef _INTERFACE IHXCommonClassFactory            IHXCommonClassFactory;
  61. typedef _INTERFACE IHXHyperNavigate                 IHXHyperNavigate;
  62. typedef _INTERFACE IHXScheduler                     IHXScheduler;
  63. typedef _INTERFACE IHXStatusMessage                 IHXStatusMessage;
  64. typedef _INTERFACE IHXErrorMessages                 IHXErrorMessages;
  65. typedef _INTERFACE IHXUpdateProperties              IHXUpdateProperties;
  66. class CGIFCodec;
  67. class CResourceLoader;
  68. class PXCallback;
  69. class PXClientAdviseSink;
  70. class CGIFRenderer : public CHXBaseCountingObject,
  71.                      public IHXPlugin, 
  72.                      public IHXRenderer, 
  73.                      public IHXSiteUser,
  74.                      public IHXStatistics,
  75.                      public IHXValues,
  76.                      public IHXUpdateProperties,
  77.                      public PXCallbackResponse,
  78.                      public PXClientAdviseSinkResponse
  79. {
  80. public:
  81.     CGIFRenderer();
  82.     virtual ~CGIFRenderer();
  83.     // IUnknown Methods
  84.     STDMETHOD (QueryInterface)  (THIS_ REFIID ID, void** ppObj);
  85.     STDMETHOD_(UINT32, AddRef)  (THIS);
  86.     STDMETHOD_(UINT32, Release) (THIS);
  87.     // IHXPlugin Methods
  88.     STDMETHOD(GetPluginInfo) (THIS_ REF(BOOL)        rbLoadMultiple,
  89.                                     REF(const char*) rpszDescription,
  90.                                     REF(const char*) rpszCopyright,
  91.                                     REF(const char*) rpszMoreInfoURL,
  92.                                     REF(UINT32)      rulVersionNumber);
  93.     STDMETHOD(InitPlugin)    (THIS_ IUnknown* pContext);
  94.     // IHXRenderer Methods
  95.     STDMETHOD(GetRendererInfo) (THIS_ REF(const char**) rppszStreamMimeType,
  96.                                       REF(UINT32)        rulInitialGranularity);
  97.     STDMETHOD(StartStream)     (THIS_ IHXStream* pStream, IHXPlayer* pPlayer);
  98.     STDMETHOD(EndStream)       (THIS);
  99.     STDMETHOD(OnHeader)        (THIS_ IHXValues* pStreamHeaderObj);
  100.     STDMETHOD(OnPacket)        (THIS_ IHXPacket* pPacket, INT32 lTimeOffset);
  101.     STDMETHOD(OnTimeSync)      (THIS_ UINT32 ulTime);
  102.     STDMETHOD(OnPreSeek)       (THIS_ UINT32 ulTimeBefore, UINT32 ulTimeAfter);
  103.     STDMETHOD(OnPostSeek)      (THIS_ UINT32 ulTimeBefore, UINT32 ulTimeAfter);
  104.     STDMETHOD(OnPause)         (THIS_ UINT32 ulTimeBeforePause);
  105.     STDMETHOD(OnBegin)         (THIS_ UINT32 ulTimeAfterBegin);
  106.     STDMETHOD(OnBuffering)     (THIS_ UINT32 ulReason, UINT16 usPercentComplete);
  107.     STDMETHOD(GetDisplayType)  (THIS_ REF(HX_DISPLAY_TYPE) rDisplayType,
  108.                                       REF(IHXBuffer*)     rpDisplayInfo);
  109.     STDMETHOD(OnEndofPackets)  (THIS);
  110.     // IHXSiteUser Methods
  111.     STDMETHOD(AttachSite)               (THIS_ IHXSite* pSite);
  112.     STDMETHOD(DetachSite)               (THIS);
  113.     STDMETHOD(HandleEvent)              (THIS_ HXxEvent* pEvent);
  114.     STDMETHOD_(BOOL,NeedsWindowedSites) (THIS);
  115.     // IHXStatistics methods
  116.     STDMETHOD(InitializeStatistics) (THIS_ UINT32 ulRegistryID);
  117.     STDMETHOD(UpdateStatistics)     (THIS);
  118.     // IHXValues methods
  119.     STDMETHOD(SetPropertyULONG32)      (THIS_ const char* pName, ULONG32 ulVal);
  120.     STDMETHOD(GetPropertyULONG32)      (THIS_ const char* pName, REF(ULONG32) rulVal);
  121.     STDMETHOD(GetFirstPropertyULONG32) (THIS_ REF(const char*) rpName, REF(ULONG32) rulVal);
  122.     STDMETHOD(GetNextPropertyULONG32)  (THIS_ REF(const char*) rpName, REF(ULONG32) rulVal);
  123.     STDMETHOD(SetPropertyBuffer)       (THIS_ const char* pName, IHXBuffer* pVal);
  124.     STDMETHOD(GetPropertyBuffer)       (THIS_ const char* pName, REF(IHXBuffer*) rpVal);
  125.     STDMETHOD(GetFirstPropertyBuffer)  (THIS_ REF(const char*) rpName, REF(IHXBuffer*) rpVal);
  126.     STDMETHOD(GetNextPropertyBuffer)   (THIS_ REF(const char*) rpName, REF(IHXBuffer*) rpVal);
  127.     STDMETHOD(SetPropertyCString)      (THIS_ const char* pName, IHXBuffer* pVal);
  128.     STDMETHOD(GetPropertyCString)      (THIS_ const char* pName, REF(IHXBuffer*) rpVal);
  129.     STDMETHOD(GetFirstPropertyCString) (THIS_ REF(const char*) rpName, REF(IHXBuffer*) rpVal);
  130.     STDMETHOD(GetNextPropertyCString)  (THIS_ REF(const char*) rpName, REF(IHXBuffer*) rpVal);
  131.     // IHXUpdateProperties methods
  132.     STDMETHOD(UpdatePacketTimeOffset)  (THIS_ INT32 lTimeOffset);
  133.     STDMETHOD(UpdatePlayTimes)        (THIS_
  134.         IHXValues* pProps);
  135.     // PXCallbackResponse methods
  136.     STDMETHOD(HandleCallback) (THIS_ UINT32 ulSchedulerTime, UINT32 ulInstance);
  137.     // PXClientAdviseSinkResponse methods
  138.     STDMETHOD(CASOnPosLength)          (THIS_ UINT32 ulPosition, UINT32 ulLength);
  139.     STDMETHOD(CASOnPresentationOpened) (THIS);
  140.     STDMETHOD(CASOnPresentationClosed) (THIS);
  141.     STDMETHOD(CASOnStatisticsChanged)  (THIS);
  142.     STDMETHOD(CASOnPreSeek)            (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  143.     STDMETHOD(CASOnPostSeek)           (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  144.     STDMETHOD(CASOnStop)               (THIS);
  145.     STDMETHOD(CASOnPause)              (THIS_ ULONG32 ulTime);
  146.     STDMETHOD(CASOnBegin)              (THIS_ ULONG32 ulTime);
  147.     STDMETHOD(CASOnBuffering)          (THIS_ ULONG32 ulFlags, UINT16 unPercentComplete);
  148.     STDMETHOD(CASOnContacting)         (THIS_ const char* pHostName);
  149.     // CGIFRenderer methods
  150.     void      HandleClick();
  151.     void      DrawToRMASurface(IHXVideoSurface* pVideoSurface, UINT32 ulX, UINT32 ulY, const HXxSize &size);
  152.     HX_RESULT RMASurfaceUpdate2(IHXSubRectVideoSurface* pSurface,
  153.                                 HXxRect*                 pExtents,
  154.                                 HXxBoxRegion*              pDirtyRegion);
  155.     HX_RESULT UpdateDisplay(UINT32 ulTime);
  156.     // CGIFRenderer static public methods
  157.     static HX_RESULT STDAPICALLTYPE HXCreateInstance(IUnknown** ppIUnknown);
  158. protected:
  159.     enum
  160.     {
  161.         kCallbackInterval      = 30,
  162.         kMinCallbackInterval   = 20,
  163.         kNotFinishedInterval   = 100,
  164.         kTargetBrowser         = 0,
  165.         kTargetPlayer          = 1
  166.     };
  167.     INT32                              m_lRefCount;
  168.     IUnknown*                          m_pContext;
  169.     IHXStream*                        m_pStream;
  170.     HXxSize                            m_cSize;
  171.     IHXMultiInstanceSiteUserSupplier* m_pMISUS;
  172.     IHXSite*                          m_pMISUSSite;
  173.     IHXCommonClassFactory*            m_pCommonClassFactory;
  174.     IHXHyperNavigate*                 m_pHyperNavigate;
  175.     CGIFCodec*                         m_pGIFCodec;
  176.     UINT32                             m_ulBitsPerPixel;
  177.     UINT32                             m_ulBytesPerPixel;
  178.     UINT32                             m_ulPadWidth;
  179.     UINT32                             m_ulCurImg;
  180.     UINT32                             m_ulCurImgRenderTime;
  181.     UINT32                             m_ulCurDelayTime;
  182.     UINT32                             m_ulDataWidth;
  183.     IHXBuffer*                        m_pOutputBuffer;
  184.     BYTE                               m_ucTarget;
  185.     GString                            m_cURL;
  186.     UINT32                             m_ulBackgroundColor;
  187.     IHXScheduler*                     m_pScheduler;
  188.     UINT32                             m_ulLoopsDone;
  189.     IHXStatusMessage*                 m_pStatusMessage;
  190.     INT16                              m_sOldMouseX;
  191.     INT16                              m_sOldMouseY;
  192.     INT32                              m_lLastImg;
  193.     IHXErrorMessages*                 m_pErrorMessages;
  194. #if defined(_WINDOWS)
  195.     HCURSOR                            m_hPreHyperlinkCursor;
  196.     HCURSOR                            m_hHyperlinkCursor;
  197. #elif defined(_MACINTOSH)
  198.     CursHandle                         m_hHyperlinkCursor;
  199.     typedef enum
  200.     {
  201.         CURSOR_ARROW,
  202.         CURSOR_HYPERLINK
  203.     }
  204.     CursorShapes;
  205.     CursorShapes                       m_eCurrentCursor;
  206.     CResourceLoader*                   m_pResourceLoader;
  207. #elif defined(_UNIX) && defined(USE_XWINDOWS)
  208.     Cursor                              m_hHyperlinkCursor;
  209.     Cursor                              m_hCurrentCursor;
  210.     Display*                            m_pDisplay;          
  211.     Window                              m_Window;
  212. #endif
  213.     IHXBuffer*                        m_pStreamHeaderBuffer;
  214.     UINT32                             m_ulStreamHeaderOffset;
  215.     PXCallback*                        m_pCallback;
  216.     UINT32                             m_ulRendererFlags;
  217.     UINT32                             m_ulWidth;
  218.     UINT32                             m_ulHeight;
  219.     IHXValues*                        m_pValues;
  220.     UINT32                             m_ulBackgroundOpacity;
  221.     UINT32                             m_ulMediaOpacity;
  222.     UINT32                             m_ulMediaChromaKey;
  223.     UINT32                             m_ulMediaChromaKeyTolerance;
  224.     UINT32                             m_ulMediaChromaKeyOpacity;
  225.     INT32                              m_lTimeOffset;
  226.     HXTimeval                         m_tSchedulerTimeBase;
  227.     UINT32                             m_ulTimeAtSchedulerTimeBase;
  228.     UINT32                             m_ulCurFrameIndex;
  229.     PXClientAdviseSink*                m_pClientAdviseSink;
  230.     UINT32                             m_ulEndTime;
  231.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  232.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  233.     HX_BITFIELD                        m_bRowsInverted : 1;
  234.     HX_BITFIELD                        m_bRGBOrdering : 1;
  235.     HX_BITFIELD                        m_bDecompressFinished : 1;
  236.     HX_BITFIELD                        m_bSetHyperlinkCursor : 1;
  237.     HX_BITFIELD                        m_bStatusMsgWillNeedErasing : 1;
  238.     HX_BITFIELD                        m_bFirstTimeSync : 1;
  239.     HX_BITFIELD                        m_bFirstDraw : 1;
  240.     HX_BITFIELD                        m_bSiteAttached : 1;
  241.     HX_BITFIELD                        m_bIgnorePackets : 1;
  242.     HX_BITFIELD                        m_bImageBombed : 1;
  243.     HX_BITFIELD                        m_bMediaChromaKeySpecified : 1;
  244.     HX_BITFIELD                        m_bUsesAlphaChannel : 1;
  245.     HX_BITFIELD                        m_bPreserveMediaRepeat : 1;
  246.     HX_BITFIELD                        m_bPaused : 1;
  247.     HX_BITFIELD                        m_bNoNativeSize : 1;
  248.     HX_BITFIELD                        m_bCanBltSubRects : 1;
  249.     static const char* const           m_pszName;
  250.     static const char* const           m_pszDescription;
  251.     static const char* const           m_pszCopyright;
  252.     static const char* const           m_pszMoreInfoURL;
  253.     static const char* const           m_ppszStreamMimeType[];
  254.     static const UINT32                m_ulHighestSupportedContentVersion;
  255.     static const UINT32                m_ulHighestSupportedStreamVersion;
  256.     HX_RESULT                          GetCurrentMousePos(INT16& rsXPos, INT16& rsYPos);
  257.     void                               OnMouseMove(INT16 fwKeys, INT16 xPos, INT16 yPos);
  258.     HX_RESULT                          CopyBombImage();
  259.     void                               DrawBackgroundColor();
  260.     UINT32                             GetCycleTime();
  261.     UINT32                             GetNextFrameTime(UINT32 ulTime);
  262.     UINT32                             GetTimevalDiff(HXTimeval t1, HXTimeval t2);
  263.     void                               DamageFrameRect(UINT32 i);
  264. };
  265. #endif