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

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 _SMLRENDR_H_
  36. #define _SMLRENDR_H_
  37. #include "baseobj.h"
  38. #define STREAM_MAJOR_VERSION  0
  39. #define STREAM_MINOR_VERSION  0
  40. #define CONTENT_MAJOR_VERSION 0
  41. #define CONTENT_MINOR_VERSION 0
  42. #define HANDLE_BETA1_SMIL_1_0_STREAM
  43. // /XXXEH- HELIX TO DO: shouldn't HANDLE_SMIL_1_0_STREAM be surrounded by
  44. // #if !defined(HELIX_FEATURE_SMIL_SMIL1) ?  If so, then this would handle
  45. // all SMIL files, and would do so differently, in some cases, from RealPlayer
  46. // in that it would be more SMIL 1.0 compliant due to bug fixes.  See also
  47. // errHandler.ReportError(SMILErrorSMIL10Document...) calls that would need
  48. // the same treatment.
  49. #if 0 // /20010417- removed this and added in old SMIL 1.0 renderer to installer:
  50. #define HANDLE_SMIL_1_0_STREAM
  51. #endif
  52. #define HANDLE_SMIL_2_0_LASTCALL_STREAM
  53. #define HANDLE_SMIL_2_0_CANDIDATE_REC_STREAM
  54. #define HANDLE_SMIL_2_0_STREAM
  55. #if defined(HANDLE_SMIL_2_0_STREAM)
  56. #define NUM_RECOGNIZED_DEFAULT_NAMESPACES   5
  57. #else
  58. #define NUM_RECOGNIZED_DEFAULT_NAMESPACES   4
  59. #endif
  60. // Forward declarations
  61. typedef _INTERFACE IHXCommonClassFactory             IHXCommonClassFactory;
  62. typedef _INTERFACE IHXClientEngine                   IHXClientEngine;
  63. typedef _INTERFACE IHXPlayer                         IHXPlayer;
  64. typedef _INTERFACE IHXStream                         IHXStream;
  65. typedef _INTERFACE IHXValues                         IHXValues;
  66. typedef _INTERFACE IHXPacket                         IHXPacket;
  67. typedef _INTERFACE IHXBuffer                         IHXBuffer;
  68. typedef _INTERFACE IHXPersistentRenderer             IHXPersistentRenderer;
  69. typedef _INTERFACE IHXPersistentComponentManager     IHXPersistentComponentManager;
  70. typedef _INTERFACE IHXSmilToSmilRendererCommunicator IHXSmilToSmilRendererCommunicator;
  71. typedef _INTERFACE IHXErrorMessages                  IHXErrorMessages;
  72. class CHXString;
  73. class CSmilPacketParser;
  74. class CSmilDocumentRenderer;
  75. class CSmilDocumentPacket;
  76. class CSmilRenderer : public IHXPlugin,
  77.                       public IHXRenderer,
  78.                       public IHXStatistics,
  79.       public IHXSmilToSmilRendererCommunicator,
  80.       public IHXPersistentRenderer,
  81.       public CHXBaseCountingObject
  82. {
  83. public:
  84.     CSmilRenderer();
  85.     virtual ~CSmilRenderer();
  86.     IHXCommonClassFactory* getFactory()       { return m_pCommonClassFactory; }
  87.     IHXClientEngine*       getClientEngine()  { return m_pEngine; }
  88.     IUnknown*               getClientContext() { return m_pClientContext; }
  89.     IHXPlayer*             getPlayer()        { return m_pPlayer; }
  90.     CHXString&              getURLPrefix()     { return m_urlPrefix; }
  91.     CHXString&              getURLRoot()       { return m_urlRoot; } 
  92.     UINT32                  getGranularity()   { return m_ulGranularity; }
  93.     HX_RESULT               HandleAddLayoutSiteGroup(IUnknown* pLSG);
  94.     HX_RESULT               HandleRemoveLayoutSiteGroup(IUnknown* pLSG);
  95.     HX_RESULT     HandleAttachElementLayout(IUnknown* pLSG, IHXValues* pProps);
  96.     void                    generatePreFix(void);
  97.     BOOL     isStreamProxiedByOtherRenderer() 
  98.     { return m_bStreamProxiedByOtherRenderer; }
  99.     // /These call the respective IHXRendererAdviseSink methods:
  100.     HX_RESULT     SmilDocTrackDurationSet(UINT32 ulGroupIndex,
  101.     UINT32 ulTrackIndex, UINT32 ulDuration,
  102.     UINT32 ulDelay, BOOL bIsLive);
  103.     HX_RESULT     SmilDocRepeatedTrackDurationSet(const char* pID,
  104.     UINT32 ulDuration, BOOL bIsLive);
  105.     HX_RESULT     SmilDocTrackUpdated(UINT32 ulGroupIndex,
  106.     UINT32 ulTrackIndex, IHXValues* pValues);
  107.     HX_RESULT     SmilDocRendererInitialized(IHXRenderer* pRend,
  108.     IUnknown* pStream, IHXValues* pInfo);
  109.     HX_RESULT     SmilDocRendererClosed(IHXRenderer* pRend,
  110.     IHXValues* pInfo);
  111.     // /These call their respective IHXGroupSink methods:
  112.     HX_RESULT     SmilDocGroupAdded(UINT16 uGroupIndex,
  113.     IHXGroup* pGroup);
  114.     HX_RESULT     SmilDocGroupRemoved(UINT16 uGroupIndex,
  115.     IHXGroup* pGroup);
  116.     HX_RESULT     SmilDocAllGroupsRemoved();
  117.     HX_RESULT     SmilDocTrackAdded(UINT16 uGroupIndex,
  118.     UINT16 uTrackIndex, IHXValues* pTrack);
  119.     HX_RESULT     SmilDocTrackRemoved(UINT16 uGroupIndex,
  120.     UINT16 uTrackIndex, IHXValues* pTrack);
  121.     HX_RESULT     SmilDocTrackStarted(UINT16 uGroupIndex,
  122.     UINT16 uTrackIndex, IHXValues* pTrack);
  123.     HX_RESULT     SmilDocTrackStopped(UINT16 uGroupIndex,
  124.     UINT16 uTrackIndex, IHXValues* pTrack);
  125.     HX_RESULT     SmilDocCurrentGroupSet(UINT16 uGroupIndex,
  126.     IHXGroup* pGroup);
  127.     // IHXPlugin methods
  128.     STDMETHOD(GetPluginInfo) (THIS_ REF(BOOL)        bLoadMultiple,
  129.                                     REF(const char*) pDescription,
  130.                                     REF(const char*) pCopyright,
  131.                                     REF(const char*) pMoreInfoURL,
  132.                                     REF(ULONG32)     ulVersionNumber);
  133.     STDMETHOD(InitPlugin)    (THIS_ IUnknown* pContext);
  134.     // IUnknown methods
  135.     STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void** ppvObj);
  136.     STDMETHOD_(ULONG32,AddRef)  (THIS);
  137.     STDMETHOD_(ULONG32,Release) (THIS);
  138.     // IHXRenderer methods
  139.     STDMETHOD(GetRendererInfo) (THIS_ REF(const char**) pStreamMimeTypes,
  140.                                       REF(UINT32)       unInitialGranularity);
  141.     STDMETHOD(StartStream)     (THIS_ IHXStream* pStream, IHXPlayer* pPlayer);
  142.     STDMETHOD(EndStream)       (THIS);
  143.     STDMETHOD(OnHeader)        (THIS_ IHXValues* pHeader);
  144.     STDMETHOD(OnPacket)        (THIS_ IHXPacket* pPacket, LONG32 lTimeOffset);
  145.     STDMETHOD(OnTimeSync)      (THIS_ ULONG32 ulTime);
  146.     STDMETHOD(OnPreSeek)       (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  147.     STDMETHOD(OnPostSeek)      (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
  148.     STDMETHOD(OnPause)         (THIS_ ULONG32 ulTime);
  149.     STDMETHOD(OnBegin)         (THIS_ ULONG32 ulTime);
  150.     STDMETHOD(OnBuffering)     (THIS_ ULONG32 ulFlags, UINT16 unPercentComplete);
  151.     STDMETHOD(GetDisplayType)  (THIS_ REF(HX_DISPLAY_TYPE) ulFlags,
  152.                                       REF(IHXBuffer*)      pBuffer);
  153.     STDMETHOD(OnEndofPackets)  (THIS);
  154.     // IHXStatistics methods
  155.     STDMETHOD(InitializeStatistics) (THIS_ UINT32 ulRegistryID);
  156.     STDMETHOD(UpdateStatistics)     (THIS);
  157.     // IHXPersistentRenderer methods
  158.     STDMETHOD(InitPersistent) (THIS_
  159. UINT32 ulPersistentComponentID,
  160. UINT16 uPersistentGroupID,
  161. UINT16 uPersistentTrackID,
  162. IHXPersistentRenderer* pPersistentParent);
  163.     STDMETHOD(GetPersistentID) (THIS_
  164. REF(UINT32) ulPersistentComponentID);
  165.     STDMETHOD(GetPersistentProperties) (THIS_
  166.                                 REF(IHXValues*)    pProperties);
  167.     STDMETHOD(GetElementProperties) (THIS_
  168. UINT16     uGroupID,
  169. UINT16     uTrackID,
  170.                                 REF(IHXValues*)    pProperties);
  171.     STDMETHOD(AttachElementLayout) (THIS_
  172. UINT16     uGroupID,
  173. UINT16     uTrackID,
  174. IHXRenderer*     pRenderer,
  175. IHXStream*     pStream,
  176. IHXValues*     pProps);
  177.     STDMETHOD(DetachElementLayout) (THIS_
  178. IUnknown*     pLSG);
  179.     STDMETHOD(GetElementStatus) (THIS_
  180. UINT16     uGroupID,
  181. UINT16     uTrackID,
  182. UINT32     ulCurrentTime,
  183. REF(IHXValues*)    pStatus);
  184.     // IHXSmilToSmilRendererCommunicator methods:
  185.     STDMETHOD(InitSmilStreamProxiedByOtherRenderer) (THIS_
  186.     IHXBuffer* pVersionNamespace);
  187.     // CSmilRenderer methods
  188.     static HX_RESULT STDAPICALLTYPE HXCreateInstance(IUnknown** ppIUnknown);
  189.     static HX_RESULT STDAPICALLTYPE CanUnload2(void);
  190.     BOOL     m_bUseNestedMeta;
  191.     IHXBuffer*     m_pVersionNamespaceFromProxyRenderer;
  192. private:
  193.     LONG32                  m_lRefCount;
  194.     IUnknown*               m_pContext;
  195.     IHXStream*             m_pStream;
  196.     IHXPlayer*             m_pPlayer;
  197.     IHXValues*             m_pHeader;
  198.     IHXClientEngine*       m_pEngine;
  199.     IHXErrorMessages*      m_pErrorMessages;
  200.     IUnknown*               m_pClientContext;
  201.     ULONG32                 m_ulLastTime;
  202.     UINT32     m_ulPersistentVersion;
  203.     PersistentType     m_persistentType;
  204.     UINT32                  m_ulGranularity;
  205.     UINT16                  m_uLayoutRule;
  206.     UINT16                  m_uSourceRule;
  207.     CHXString               m_urlPrefix;
  208.     CHXString               m_urlRoot;
  209.     char*                   m_pURLFragment;
  210.     CSmilPacketParser*      m_pPacketParser;
  211.     CSmilDocumentRenderer*  m_pSmilDocRenderer;
  212.     CHXString               m_smilDocument;
  213.     UINT32                  m_ulTotalSMILPackets;
  214.     IHXCommonClassFactory* m_pCommonClassFactory;
  215.     HX_RESULT               m_lastOnPacketResult;
  216.     IHXPersistentComponentManager* m_pPersistentComponentManager;
  217.     // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
  218.     // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
  219.     HX_BITFIELD             m_bInMetadata : 1;
  220.     HX_BITFIELD             m_bStreamProxiedByOtherRenderer : 1;
  221.     static const char* const zm_pName;
  222.     static const char* const zm_pDescription;
  223.     static const char* const zm_pCopyright;
  224.     static const char* const zm_pMoreInfoURL;
  225.     static const char* const zm_pStreamMimeTypes[];
  226.     static const char* const zm_pRecognizedDefaultNamespaces[NUM_RECOGNIZED_DEFAULT_NAMESPACES + 1];
  227.     HX_RESULT handleSMILDocumentPacket(CSmilDocumentPacket* pPacket);
  228.     HX_RESULT getErrorString(SMILErrorTag tag, CHXString& str);
  229. };
  230. #endif // _SMLRENDR_H_