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

Symbian

开发平台:

Visual C++

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