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

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 _SM1RENDR_H_
  36. #define _SM1RENDR_H_
  37. #include "hxwintyp.h"
  38. #include "hxwin.h"
  39. #include "baseobj.h"
  40. #define STREAM_MAJOR_VERSION  0
  41. #define STREAM_MINOR_VERSION  0
  42. #define CONTENT_MAJOR_VERSION 0
  43. #define CONTENT_MINOR_VERSION 0
  44. class CSmilPacketParser;
  45. class CSmil1SiteSupplier;
  46. class CHXSimpleList;
  47. class CSmil1DocumentRenderer;
  48. class CSmilDocumentPacket;
  49. /////////////////////////////////////////////////////////////////////////////
  50. // 
  51. //  Class:
  52. //
  53. // CSmil1Renderer
  54. //
  55. //  Purpose:
  56. //
  57. // SMIL implementation of a basic renderer.
  58. //
  59. class CSmil1Renderer :   public IHXPlugin
  60. , public IHXRenderer
  61. , public IHXStatistics
  62. , public IHXPersistentRenderer
  63.                         , public CHXBaseCountingObject
  64. {
  65. private:
  66.     LONG32     m_lRefCount;
  67.     IUnknown*     m_pContext;
  68.     IHXStream*     m_pStream;
  69.     IHXPlayer*     m_pPlayer;
  70.     IHXClientEngine*     m_pEngine;
  71.     IUnknown*     m_pClientContext;
  72.     ULONG32     m_ulLastTime;
  73.     UINT32     m_ulGranularity;
  74.     UINT16     m_uLayoutRule;
  75.     UINT16     m_uSourceRule;
  76.     CHXString     m_urlPrefix;
  77.     CHXString     m_urlRoot;
  78.     char*     m_pURLFragment;
  79.     CSmilPacketParser*     m_pPacketParser;
  80.     CSmil1DocumentRenderer*  m_pSmilDocRenderer;
  81.     CHXString     m_smilDocument;
  82.     UINT32     m_ulTotalSMILPackets;
  83.     IHXCommonClassFactory* m_pCommonClassFactory;
  84.     HX_RESULT     m_lastOnPacketResult;
  85. #if defined(HELIX_FEATURE_SMIL2)
  86.     // /All of the following are needed for handling SMIL 2+ streams:
  87.     CSmilRenderer*     m_pNextGenSmilRenderer;
  88.     BOOL     m_bIsHigherVersionSmilStreamFromOldSMIL1FF;
  89.     IHXValues*     m_pHeader;
  90.     IHXBuffer*     m_pDefaultNamespace;
  91.     BOOL     m_bCSmil1StartStreamHasBeenCalled;
  92.     BOOL     m_bCSmil1EndStreamHasBeenCalled;
  93.     BOOL     m_bCSmil1GetDisplayTypeHasBeenCalled;
  94.     BOOL     m_bCSmil1InitializeStatisticsHasBeenCalled;
  95.     BOOL     m_bCSmil1InitPersistenHasBeenCalled;
  96.     BOOL     m_bCSmil1GetElementPropertiesHasBeenCalled;
  97.     BOOL     m_bCSmil1RemoveLayoutSiteGroupHasBeenCalled;
  98.     UINT32     m_ulRegistryID;
  99.     UINT16     m_uGroupID;
  100.     UINT16     m_uTrackID;
  101. #endif /* defined(HELIX_FEATURE_SMIL2). */
  102.     UINT32     m_ulPersistentComponentID;
  103.     UINT16     m_uPersistentGroupID;
  104.     UINT16     m_uPersistentTrackID;
  105.     IHXPersistentRenderer* m_pPersistentParent;
  106.     // /End "...handling SMIL 2+ streams".
  107.      
  108.     BOOL     m_bUseNestedMeta;    
  109.     UINT32     m_ulPersistentVersion;
  110.     PersistentType     m_persistentType;
  111.     IHXPersistentComponentManager* m_pPersistentComponentManager;
  112.     static const char* const zm_pName;
  113.     static const char* const zm_pDescription;
  114.     static const char* const zm_pCopyright;
  115.     static const char* const zm_pMoreInfoURL;
  116.     static const char* const zm_pStreamMimeTypes[];
  117.     ~CSmil1Renderer     ();
  118.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  119.     HX_RESULT handleSMILDocumentPacket
  120.     (CSmilDocumentPacket* pPacket);
  121.     HX_RESULT getErrorString     (SMILErrorTag tag,
  122.     CHXString& str);
  123.     HX_RESULT findValidDefaultNamespace(IHXBuffer* pStartOfFile);
  124.     HX_RESULT findSmilTagAndVersion (IHXBuffer* pFileChunk);
  125.     HX_RESULT setUpNextGenSmilRenderer ();
  126.     friend class CSmil1DocumentRenderer;
  127. #ifdef _WINDOWS
  128.     HDC m_hDC;
  129. #endif
  130. public:
  131.     CSmil1Renderer ();
  132.     // CSmil1Renderer methods
  133.     static HX_RESULT STDAPICALLTYPE CanUnload2(void);
  134.     static HX_RESULT STDAPICALLTYPE HXCreateInstance(IUnknown** ppIUnknown);
  135.     IHXCommonClassFactory* getFactory ()
  136. { return m_pCommonClassFactory; }
  137.     IHXClientEngine* getClientEngine () 
  138. { return m_pEngine; }
  139.     IUnknown* getClientContext () 
  140. { return m_pClientContext; }
  141.     IHXPlayer* getPlayer ()
  142. { return m_pPlayer; }
  143.     CHXString& getURLPrefix ()
  144. { return m_urlPrefix; }
  145.     CHXString& getURLRoot ()
  146. { return m_urlRoot; } 
  147.     UINT32 getGranularity ()
  148. { return m_ulGranularity; }
  149.     HX_RESULT HandleAddLayoutSiteGroup (IUnknown* pLSG);
  150.     HX_RESULT HandleRemoveLayoutSiteGroup (IUnknown* pLSG);
  151.     HX_RESULT HandleAttachElementLayout(IUnknown* pLSG, IHXValues* pProps);
  152.     void generatePreFix (void);
  153. #if defined(HELIX_FEATURE_SMIL2)
  154.     BOOL isHigherVersionSmilStreamFromOldSMIL1FF() {
  155. return m_bIsHigherVersionSmilStreamFromOldSMIL1FF;}
  156. #endif /* defined(HELIX_FEATURE_SMIL2). */
  157.     // *** IHXPlugin methods ***
  158.     /************************************************************************
  159.      * Method:
  160.      *     IHXPlugin::GetPluginInfo
  161.      * Purpose:
  162.      *     Returns the basic information about this plugin. Including:
  163.      *
  164.      *     bLoadMultiple whether or not this plugin DLL can be loaded
  165.      * multiple times. All File Formats must set
  166.      * this value to TRUE.
  167.      *     pDescription which is used in about UIs (can be NULL)
  168.      *     pCopyright which is used in about UIs (can be NULL)
  169.      *     pMoreInfoURL which is used in about UIs (can be NULL)
  170.      */
  171.     STDMETHOD(GetPluginInfo) (THIS_
  172. REF(BOOL)  /*OUT*/ bLoadMultiple,
  173. REF(const char*) /*OUT*/ pDescription,
  174. REF(const char*) /*OUT*/ pCopyright,
  175. REF(const char*) /*OUT*/ pMoreInfoURL,
  176. REF(ULONG32)  /*OUT*/ ulVersionNumber
  177. );
  178.     /************************************************************************
  179.      * Method:
  180.      *     IHXPlugin::InitPlugin
  181.      * Purpose:
  182.      *     Initializes the plugin for use. This interface must always be
  183.      *     called before any other method is called. This is primarily needed 
  184.      *     so that the plugin can have access to the context for creation of
  185.      *     IHXBuffers and IMalloc.
  186.      */
  187.     STDMETHOD(InitPlugin)   (THIS_
  188.     IUnknown*   /*IN*/  pContext);
  189.     // *** IUnknown methods ***
  190.     STDMETHOD(QueryInterface) (THIS_
  191. REFIID riid,
  192. void** ppvObj);
  193.     STDMETHOD_(ULONG32,AddRef) (THIS);
  194.     STDMETHOD_(ULONG32,Release) (THIS);
  195.     // *** IHXRenderer methods ***
  196.     /************************************************************************
  197.      * Method:
  198.      *     IHXRenderer::GetRendererInfo
  199.      * Purpose:
  200.      *     Returns information vital to the instantiation of rendering 
  201.      *     plugins.
  202.      */
  203.     STDMETHOD(GetRendererInfo) (THIS_
  204. REF(const char**) /*OUT*/ pStreamMimeTypes,
  205. REF(UINT32)      /*OUT*/ unInitialGranularity
  206. );
  207.     /////////////////////////////////////////////////////////////////////////
  208.     // Method:
  209.     //     IHXRenderer::StartStream
  210.     // Purpose:
  211.     //     Called by client engine to inform the renderer of the stream it
  212.     //     will be rendering. The stream interface can provide access to
  213.     //     its source or player. This method also provides access to the 
  214.     //     primary client controller interface.
  215.     //
  216.     STDMETHOD (StartStream) (THIS_
  217. IHXStream*     pStream,
  218. IHXPlayer*     pPlayer);
  219.     /////////////////////////////////////////////////////////////////////////
  220.     // Method:
  221.     //     IHXRenderer::EndStream
  222.     // Purpose:
  223.     //     Called by client engine to inform the renderer that the stream
  224.     //     is was rendering is closed.
  225.     //
  226.     STDMETHOD (EndStream) (THIS);
  227.     /////////////////////////////////////////////////////////////////////////
  228.     // Method:
  229.     // IHXRenderer::OnHeader
  230.     // Purpose:
  231.     // Called by client engine when a header for this renderer is 
  232.     // available. The header will arrive before any packets.
  233.     //
  234.     STDMETHOD (OnHeader) (THIS_
  235. IHXValues*     pHeader);
  236.     /////////////////////////////////////////////////////////////////////////
  237.     // Method:
  238.     //     IHXRenderer::OnPacket
  239.     // Purpose:
  240.     //     Called by client engine when a packet for this renderer is 
  241.     //     due.
  242.     //
  243.     STDMETHOD (OnPacket) (THIS_
  244. IHXPacket*     pPacket,
  245. LONG32      lTimeOffset);
  246.     /////////////////////////////////////////////////////////////////////////
  247.     // Method:
  248.     //     IHXRenderer::OnTimeSync
  249.     // Purpose:
  250.     //     Called by client engine to inform the renderer of the current
  251.     //     time relative to the streams synchronized time-line. The 
  252.     //     renderer should use this time value to update its display or
  253.     //     render it's stream data accordingly.
  254.     //
  255.     STDMETHOD (OnTimeSync) (THIS_
  256. ULONG32     ulTime);
  257.     /////////////////////////////////////////////////////////////////////////
  258.     //  Method:
  259.     //     IHXRenderer::OnPreSeek
  260.     //  Purpose:
  261.     //     Called by client engine to inform the renderer that a seek is
  262.     //     about to occur. The render is informed the last time for the 
  263.     //     stream's time line before the seek, as well as the first new
  264.     //     time for the stream's time line after the seek will be completed.
  265.     //
  266.     STDMETHOD (OnPreSeek) (THIS_
  267. ULONG32     ulOldTime,
  268. ULONG32     ulNewTime);
  269.     /////////////////////////////////////////////////////////////////////////
  270.     // Method:
  271.     //     IHXRenderer::OnPostSeek
  272.     // Purpose:
  273.     //     Called by client engine to inform the renderer that a seek has
  274.     //     just occured. The render is informed the last time for the 
  275.     //     stream's time line before the seek, as well as the first new
  276.     //     time for the stream's time line after the seek.
  277.     //
  278.     STDMETHOD (OnPostSeek) (THIS_
  279. ULONG32     ulOldTime,
  280. ULONG32     ulNewTime);
  281.     /////////////////////////////////////////////////////////////////////////
  282.     // Method:
  283.     //     IHXRenderer::OnPause
  284.     // Purpose:
  285.     //     Called by client engine to inform the renderer that a pause has
  286.     //     just occured. The render is informed the last time for the 
  287.     //     stream's time line before the pause.
  288.     //
  289.     STDMETHOD (OnPause) (THIS_
  290. ULONG32     ulTime);
  291.     /////////////////////////////////////////////////////////////////////////
  292.     // Method:
  293.     // IHXRenderer::OnBegin
  294.     // Purpose:
  295.     // Called by client engine to inform the renderer that a begin or
  296.     // resume has just occured. The render is informed the first time 
  297.     // for the stream's time line after the resume.
  298.     //
  299.     STDMETHOD (OnBegin) (THIS_
  300. ULONG32     ulTime);
  301.     /////////////////////////////////////////////////////////////////////////
  302.     // Method:
  303.     // IHXRenderer::OnBuffering
  304.     // Purpose:
  305.     // Called by client engine to inform the renderer that buffering
  306.     // of data is occuring. The render is informed of the reason for
  307.     // the buffering (start-up of stream, seek has occured, network
  308.     // congestion, etc.), as well as percentage complete of the 
  309.     // buffering process.
  310.     //
  311.     STDMETHOD (OnBuffering) (THIS_
  312. ULONG32     ulFlags,
  313. UINT16     unPercentComplete);
  314.     /////////////////////////////////////////////////////////////////////////
  315.     // Method:
  316.     // IHXRenderer::GetDisplayType
  317.     // Purpose:
  318.     // Called by client engine to ask the renderer for it's preferred
  319.     // display type. When layout information is not present, the 
  320.     // renderer will be asked for it's prefered display type. Depending
  321.     // on the display type a buffer of additional information may be 
  322.     // needed. This buffer could contain information about preferred
  323.     // window size.
  324.     //
  325.     STDMETHOD (GetDisplayType) (THIS_
  326. REF(HX_DISPLAY_TYPE) ulFlags,
  327. REF(IHXBuffer*) pBuffer);
  328.     /************************************************************************
  329.      * Method:
  330.      *     IHXRenderer::OnEndofPackets
  331.      * Purpose:
  332.      *     Called by client engine to inform the renderer that all the
  333.      *     packets have been delivered. However, if the user seeks before
  334.      *     EndStream() is called, renderer may start getting packets again
  335.      *     and the client engine will eventually call this function again.
  336.      */
  337.     STDMETHOD(OnEndofPackets) (THIS);
  338.     /************************************************************************
  339.      *  Method:
  340.      *      IHXStatistics::InitializeStatistics
  341.      *  Purpose:
  342.      *      Pass registry ID to the caller
  343.      */
  344.     STDMETHOD (InitializeStatistics)
  345. (THIS_
  346. UINT32     /*IN*/ ulRegistryID);
  347.     /************************************************************************
  348.      *  Method:
  349.      *      IHXStatistics::UpdateStatistics
  350.      *  Purpose:
  351.      *      Notify the client to update its statistics stored in the registry
  352.      */
  353.     STDMETHOD (UpdateStatistics)(THIS);
  354.     // IHXPersistentRenderer methods
  355.     STDMETHOD(InitPersistent) (THIS_
  356. UINT32 ulPersistentComponentID,
  357. UINT16 uPersistentGroupID,
  358. UINT16 uPersistentTrackID,
  359. IHXPersistentRenderer* pPersistentParent);
  360.     STDMETHOD(GetPersistentID) (THIS_
  361. REF(UINT32) ulPersistentComponentID);
  362.     STDMETHOD(GetPersistentProperties) (THIS_
  363.                                 REF(IHXValues*)    pProperties);
  364.     STDMETHOD(GetElementProperties) (THIS_
  365. UINT16     uGroupID,
  366. UINT16     uTrackID,
  367.                                 REF(IHXValues*)    pProperties);
  368.     STDMETHOD(AttachElementLayout) (THIS_
  369. UINT16     uGroupID,
  370. UINT16     uTrackID,
  371. IHXRenderer*     pRenderer,
  372. IHXStream*     pStream,
  373. IHXValues*     pProps);
  374.     STDMETHOD(DetachElementLayout) (THIS_
  375. IUnknown*     pLSG);
  376.     STDMETHOD(GetElementStatus) (THIS_
  377. UINT16     uGroupID,
  378. UINT16     uTrackID,
  379. UINT32     ulCurrentTime,
  380. REF(IHXValues*)    pStatus);
  381. };
  382. #endif // _SM1RENDR_H_