⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smlrendr.h

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 H
字号:
/* ***** BEGIN LICENSE BLOCK ***** 
 * Version: RCSL 1.0/RPSL 1.0 
 *  
 * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
 *      
 * The contents of this file, and the files included with this file, are 
 * subject to the current version of the RealNetworks Public Source License 
 * Version 1.0 (the "RPSL") available at 
 * http://www.helixcommunity.org/content/rpsl unless you have licensed 
 * the file under the RealNetworks Community Source License Version 1.0 
 * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
 * in which case the RCSL will apply. You may also obtain the license terms 
 * directly from RealNetworks.  You may not use this file except in 
 * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
 * applicable to this file, the RCSL.  Please see the applicable RPSL or 
 * RCSL for the rights, obligations and limitations governing use of the 
 * contents of the file.  
 *  
 * This file is part of the Helix DNA Technology. RealNetworks is the 
 * developer of the Original Code and owns the copyrights in the portions 
 * it created. 
 *  
 * This file, and the files included with this file, is distributed and made 
 * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
 * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
 * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
 * 
 * Technology Compatibility Kit Test Suite(s) Location: 
 *    http://www.helixcommunity.org/content/tck 
 * 
 * Contributor(s): 
 *  
 * ***** END LICENSE BLOCK ***** */ 

#ifndef _SMLRENDR_H_
#define _SMLRENDR_H_

#include "baseobj.h"

#define STREAM_MAJOR_VERSION  0
#define STREAM_MINOR_VERSION  0

#define CONTENT_MAJOR_VERSION 0
#define CONTENT_MINOR_VERSION 0

#define HANDLE_BETA1_SMIL_1_0_STREAM
// /XXXEH- HELIX TO DO: shouldn't HANDLE_SMIL_1_0_STREAM be surrounded by
// #if !defined(HELIX_FEATURE_SMIL_SMIL1) ?  If so, then this would handle
// all SMIL files, and would do so differently, in some cases, from RealPlayer
// in that it would be more SMIL 1.0 compliant due to bug fixes.  See also
// errHandler.ReportError(SMILErrorSMIL10Document...) calls that would need
// the same treatment.
#if 0 // /20010417- removed this and added in old SMIL 1.0 renderer to installer:
#define HANDLE_SMIL_1_0_STREAM
#endif

#define HANDLE_SMIL_2_0_LASTCALL_STREAM
#define HANDLE_SMIL_2_0_CANDIDATE_REC_STREAM
#define HANDLE_SMIL_2_0_STREAM

#if defined(HANDLE_SMIL_2_0_STREAM)
#define NUM_RECOGNIZED_DEFAULT_NAMESPACES   5
#else
#define NUM_RECOGNIZED_DEFAULT_NAMESPACES   4
#endif

// Forward declarations
typedef _INTERFACE IHXCommonClassFactory             IHXCommonClassFactory;
typedef _INTERFACE IHXClientEngine                   IHXClientEngine;
typedef _INTERFACE IHXPlayer                         IHXPlayer;
typedef _INTERFACE IHXStream                         IHXStream;
typedef _INTERFACE IHXValues                         IHXValues;
typedef _INTERFACE IHXPacket                         IHXPacket;
typedef _INTERFACE IHXBuffer                         IHXBuffer;
typedef _INTERFACE IHXPersistentRenderer             IHXPersistentRenderer;
typedef _INTERFACE IHXPersistentComponentManager     IHXPersistentComponentManager;
typedef _INTERFACE IHXSmilToSmilRendererCommunicator IHXSmilToSmilRendererCommunicator;
typedef _INTERFACE IHXErrorMessages                  IHXErrorMessages;
class CHXString;
class CSmilPacketParser;
class CSmilDocumentRenderer;
class CSmilDocumentPacket;


class CSmilRenderer : public IHXPlugin,
                      public IHXRenderer,
                      public IHXStatistics,
		      public IHXSmilToSmilRendererCommunicator,
		      public IHXPersistentRenderer,
		      public CHXBaseCountingObject
{
public:
    CSmilRenderer();
    virtual ~CSmilRenderer();

    IHXCommonClassFactory* getFactory()       { return m_pCommonClassFactory; }
    IHXClientEngine*       getClientEngine()  { return m_pEngine; }
    IUnknown*               getClientContext() { return m_pClientContext; }
    IHXPlayer*             getPlayer()        { return m_pPlayer; }
    CHXString&              getURLPrefix()     { return m_urlPrefix; }
    CHXString&              getURLRoot()       { return m_urlRoot; } 
    UINT32                  getGranularity()   { return m_ulGranularity; }
    HX_RESULT               HandleAddLayoutSiteGroup(IUnknown* pLSG);
    HX_RESULT               HandleRemoveLayoutSiteGroup(IUnknown* pLSG);
    HX_RESULT		    HandleAttachElementLayout(IUnknown* pLSG, IHXValues* pProps);
    void                    generatePreFix(void);
    BOOL		    isStreamProxiedByOtherRenderer() 
			    {	return m_bStreamProxiedByOtherRenderer; }

    // /These call the respective IHXRendererAdviseSink methods:
    HX_RESULT		    SmilDocTrackDurationSet(UINT32 ulGroupIndex,
				    UINT32 ulTrackIndex, UINT32 ulDuration,
				    UINT32 ulDelay, BOOL bIsLive);
    HX_RESULT		    SmilDocRepeatedTrackDurationSet(const char* pID,
				    UINT32 ulDuration, BOOL bIsLive);
    HX_RESULT		    SmilDocTrackUpdated(UINT32 ulGroupIndex,
				    UINT32 ulTrackIndex, IHXValues* pValues);
    HX_RESULT		    SmilDocRendererInitialized(IHXRenderer* pRend,
				    IUnknown* pStream, IHXValues* pInfo);
    HX_RESULT		    SmilDocRendererClosed(IHXRenderer* pRend,
				    IHXValues* pInfo);

    // /These call their respective IHXGroupSink methods:
    HX_RESULT		    SmilDocGroupAdded(UINT16 uGroupIndex,
				    IHXGroup* pGroup);
    HX_RESULT		    SmilDocGroupRemoved(UINT16 uGroupIndex,
				    IHXGroup* pGroup);
    HX_RESULT		    SmilDocAllGroupsRemoved();
    HX_RESULT		    SmilDocTrackAdded(UINT16 uGroupIndex,
				    UINT16 uTrackIndex, IHXValues* pTrack);
    HX_RESULT		    SmilDocTrackRemoved(UINT16 uGroupIndex,
				    UINT16 uTrackIndex, IHXValues* pTrack);
    HX_RESULT		    SmilDocTrackStarted(UINT16 uGroupIndex,
				    UINT16 uTrackIndex, IHXValues* pTrack);
    HX_RESULT		    SmilDocTrackStopped(UINT16 uGroupIndex,
				    UINT16 uTrackIndex, IHXValues* pTrack);
    HX_RESULT		    SmilDocCurrentGroupSet(UINT16 uGroupIndex,
				    IHXGroup* pGroup);


    // IHXPlugin methods
    STDMETHOD(GetPluginInfo) (THIS_ REF(BOOL)        bLoadMultiple,
                                    REF(const char*) pDescription,
                                    REF(const char*) pCopyright,
                                    REF(const char*) pMoreInfoURL,
                                    REF(ULONG32)     ulVersionNumber);
    STDMETHOD(InitPlugin)    (THIS_ IUnknown* pContext);

    // IUnknown methods
    STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void** ppvObj);
    STDMETHOD_(ULONG32,AddRef)  (THIS);
    STDMETHOD_(ULONG32,Release) (THIS);

    // IHXRenderer methods
    STDMETHOD(GetRendererInfo) (THIS_ REF(const char**) pStreamMimeTypes,
                                      REF(UINT32)       unInitialGranularity);
    STDMETHOD(StartStream)     (THIS_ IHXStream* pStream, IHXPlayer* pPlayer);
    STDMETHOD(EndStream)       (THIS);
    STDMETHOD(OnHeader)        (THIS_ IHXValues* pHeader);
    STDMETHOD(OnPacket)        (THIS_ IHXPacket* pPacket, LONG32 lTimeOffset);
    STDMETHOD(OnTimeSync)      (THIS_ ULONG32 ulTime);
    STDMETHOD(OnPreSeek)       (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
    STDMETHOD(OnPostSeek)      (THIS_ ULONG32 ulOldTime, ULONG32 ulNewTime);
    STDMETHOD(OnPause)         (THIS_ ULONG32 ulTime);
    STDMETHOD(OnBegin)         (THIS_ ULONG32 ulTime);
    STDMETHOD(OnBuffering)     (THIS_ ULONG32 ulFlags, UINT16 unPercentComplete);
    STDMETHOD(GetDisplayType)  (THIS_ REF(HX_DISPLAY_TYPE) ulFlags,
                                      REF(IHXBuffer*)      pBuffer);
    STDMETHOD(OnEndofPackets)  (THIS);

    // IHXStatistics methods
    STDMETHOD(InitializeStatistics) (THIS_ UINT32 ulRegistryID);
    STDMETHOD(UpdateStatistics)     (THIS);

    // IHXPersistentRenderer methods
    STDMETHOD(InitPersistent)		(THIS_
					UINT32			ulPersistentComponentID,
					UINT16			uPersistentGroupID,
					UINT16			uPersistentTrackID,
					IHXPersistentRenderer*	pPersistentParent);

    STDMETHOD(GetPersistentID)		(THIS_
					REF(UINT32) ulPersistentComponentID);

    STDMETHOD(GetPersistentProperties)	(THIS_
                               		REF(IHXValues*)    pProperties);				

    STDMETHOD(GetElementProperties)	(THIS_
					UINT16		    uGroupID,
					UINT16		    uTrackID,
                               		REF(IHXValues*)    pProperties);

    STDMETHOD(AttachElementLayout)	(THIS_
					UINT16		    uGroupID,
					UINT16		    uTrackID,
					IHXRenderer*	    pRenderer,
					IHXStream*	    pStream,
					IHXValues*	    pProps);

    STDMETHOD(DetachElementLayout)	(THIS_
					IUnknown*	    pLSG);

    STDMETHOD(GetElementStatus)		(THIS_
					UINT16		    uGroupID,
					UINT16		    uTrackID,
					UINT32		    ulCurrentTime,
					REF(IHXValues*)    pStatus);

    // IHXSmilToSmilRendererCommunicator methods:
    STDMETHOD(InitSmilStreamProxiedByOtherRenderer) (THIS_
						    IHXBuffer* pVersionNamespace);


    // CSmilRenderer methods
    static HX_RESULT STDAPICALLTYPE HXCreateInstance(IUnknown** ppIUnknown);
    static HX_RESULT STDAPICALLTYPE CanUnload2(void);

    BOOL		    m_bUseNestedMeta;

    IHXBuffer*		    m_pVersionNamespaceFromProxyRenderer;

private:
    LONG32                  m_lRefCount;
    IUnknown*               m_pContext;
    IHXStream*             m_pStream;
    IHXPlayer*             m_pPlayer;
    IHXValues*             m_pHeader;
    IHXClientEngine*       m_pEngine;
    IHXErrorMessages*      m_pErrorMessages;
    IUnknown*               m_pClientContext;
    ULONG32                 m_ulLastTime;
    UINT32		    m_ulPersistentVersion;
    PersistentType	    m_persistentType;
    UINT32                  m_ulGranularity;
    UINT16                  m_uLayoutRule;
    UINT16                  m_uSourceRule;
    CHXString               m_urlPrefix;
    CHXString               m_urlRoot;
    char*                   m_pURLFragment;
    CSmilPacketParser*      m_pPacketParser;
    CSmilDocumentRenderer*  m_pSmilDocRenderer;
    CHXString               m_smilDocument;
    UINT32                  m_ulTotalSMILPackets;
    IHXCommonClassFactory* m_pCommonClassFactory;
    HX_RESULT               m_lastOnPacketResult;
    IHXPersistentComponentManager* m_pPersistentComponentManager;
    // ONLY HX_BITFIELD MEMBERS SHOULD GO BELOW THIS LINE!
    // ALL OTHER MEMBER TYPES SHOULD GO ABOVE THIS LINE!
    HX_BITFIELD             m_bInMetadata : 1;
    HX_BITFIELD             m_bStreamProxiedByOtherRenderer : 1;

    static const char* const zm_pName;
    static const char* const zm_pDescription;
    static const char* const zm_pCopyright;
    static const char* const zm_pMoreInfoURL;
    static const char* const zm_pStreamMimeTypes[];
    static const char* const zm_pRecognizedDefaultNamespaces[NUM_RECOGNIZED_DEFAULT_NAMESPACES + 1];

    HX_RESULT handleSMILDocumentPacket(CSmilDocumentPacket* pPacket);
    HX_RESULT getErrorString(SMILErrorTag tag, CHXString& str);
};


#endif // _SMLRENDR_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -