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

Symbian

开发平台:

Visual C++

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