hxrendr.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 _HXRENDR_H_
  36. #define _HXRENDR_H_
  37. /*
  38.  * Forward declarations of some interfaces defined or used here-in.
  39.  */
  40. typedef _INTERFACE IHXRenderer     IHXRenderer;
  41. typedef _INTERFACE IHXStream     IHXStream;
  42. typedef _INTERFACE IHXStreamSource     IHXStreamSource;
  43. typedef _INTERFACE IHXPlayer     IHXPlayer;
  44. typedef _INTERFACE IHXClientEngine     IHXClientEngine;
  45. // $Private:
  46. typedef _INTERFACE IHXPersistentRenderer     IHXPersistentRenderer;
  47. // $EndPrivate.
  48. typedef _INTERFACE IHXUntimedRenderer     IHXUntimedRenderer;
  49. /****************************************************************************
  50.  * 
  51.  *  Interface:
  52.  *
  53.  * IHXRenderer
  54.  *
  55.  *  Purpose:
  56.  *
  57.  * Interface implemented by all renderers. Parts of this interface are
  58.  * called by the client engine to provide data packets to the 
  59.  * individual renderers.
  60.  *
  61.  *  IID_IHXRenderer:
  62.  *
  63.  * {00000300-0901-11d1-8B06-00A024406D59}
  64.  *
  65.  */
  66. DEFINE_GUID(IID_IHXRenderer, 0x00000300, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  67. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  68. #undef  INTERFACE
  69. #define INTERFACE   IHXRenderer
  70. typedef ULONG32 HX_DISPLAY_TYPE;
  71. #define HX_DISPLAY_NONE                    0x00000000
  72. #define HX_DISPLAY_WINDOW                  0x00000001
  73. #define HX_DISPLAY_SUPPORTS_RESIZE         0x00000002
  74. #define HX_DISPLAY_SUPPORTS_FULLSCREEN     0x00000004
  75. #define HX_DISPLAY_SUPPORTS_VIDCONTROLS    0x00000008
  76. DECLARE_INTERFACE_(IHXRenderer, IUnknown)
  77. {
  78.     /*
  79.      * IUnknown methods
  80.      */
  81.     STDMETHOD(QueryInterface) (THIS_
  82. REFIID riid,
  83. void** ppvObj) PURE;
  84.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  85.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  86.     /*
  87.      * IHXRenderer methods
  88.      */
  89.     /************************************************************************
  90.      * Method:
  91.      *     IHXRenderer::GetRendererInfo
  92.      * Purpose:
  93.      *     Returns information vital to the instantiation of rendering 
  94.      *     plugins.
  95.      */
  96.     STDMETHOD(GetRendererInfo) (THIS_
  97. REF(const char**)/*OUT*/ pStreamMimeTypes,
  98. REF(UINT32)  /*OUT*/ unInitialGranularity
  99. ) PURE;
  100.     /************************************************************************
  101.      * Method:
  102.      *     IHXRenderer::StartStream
  103.      * Purpose:
  104.      *     Called by client engine to inform the renderer of the stream it
  105.      *     will be rendering. The stream interface can provide access to
  106.      *     its source or player. This method also provides access to the 
  107.      *     primary client controller interface.
  108.      *
  109.      */
  110.     STDMETHOD(StartStream) (THIS_
  111. IHXStream*     pStream,
  112. IHXPlayer*     pPlayer) PURE;
  113.     /************************************************************************
  114.      * Method:
  115.      *     IHXRenderer::EndStream
  116.      * Purpose:
  117.      *     Called by client engine to inform the renderer that the stream
  118.      *     is was rendering is closed.
  119.      *
  120.      */
  121.     STDMETHOD(EndStream) (THIS) PURE;
  122.     /************************************************************************
  123.      * Method:
  124.      * IHXRenderer::OnHeader
  125.      * Purpose:
  126.      * Called by client engine when a header for this renderer is 
  127.      * available. The header will arrive before any packets.
  128.      *
  129.      */
  130.     STDMETHOD(OnHeader) (THIS_
  131. IHXValues*     pHeader) PURE;
  132.     /************************************************************************
  133.      * Method:
  134.      *     IHXRenderer::OnPacket
  135.      * Purpose:
  136.      *     Called by client engine when a packet for this renderer is 
  137.      *     due.
  138.      *
  139.      */
  140.     STDMETHOD(OnPacket) (THIS_
  141. IHXPacket*     pPacket,
  142. LONG32     lTimeOffset) PURE;
  143.     /************************************************************************
  144.      * Method:
  145.      *     IHXRenderer::OnTimeSync
  146.      * Purpose:
  147.      *     Called by client engine to inform the renderer of the current
  148.      *     time relative to the streams synchronized time-line. The 
  149.      *     renderer should use this time value to update its display or
  150.      *     render it's stream data accordingly.
  151.      *
  152.      */
  153.     STDMETHOD(OnTimeSync) (THIS_
  154. ULONG32     ulTime) PURE;
  155.     /************************************************************************
  156.      * Method:
  157.      *     IHXRenderer::OnPreSeek
  158.      * Purpose:
  159.      *     Called by client engine to inform the renderer that a seek is
  160.      *     about to occur. The render is informed the last time for the 
  161.      *     stream's time line before the seek, as well as the first new
  162.      *     time for the stream's time line after the seek will be completed.
  163.      *
  164.      */
  165.     STDMETHOD(OnPreSeek) (THIS_
  166. ULONG32     ulOldTime,
  167. ULONG32     ulNewTime) PURE;
  168.     /************************************************************************
  169.      * Method:
  170.      *     IHXRenderer::OnPostSeek
  171.      * Purpose:
  172.      *     Called by client engine to inform the renderer that a seek has
  173.      *     just occurred. The render is informed the last time for the 
  174.      *     stream's time line before the seek, as well as the first new
  175.      *     time for the stream's time line after the seek.
  176.      *
  177.      */
  178.     STDMETHOD(OnPostSeek) (THIS_
  179. ULONG32     ulOldTime,
  180. ULONG32     ulNewTime) PURE;
  181.     /************************************************************************
  182.      * Method:
  183.      *     IHXRenderer::OnPause
  184.      * Purpose:
  185.      *     Called by client engine to inform the renderer that a pause has
  186.      *     just occurred. The render is informed the last time for the 
  187.      *     stream's time line before the pause.
  188.      *
  189.      */
  190.     STDMETHOD(OnPause) (THIS_
  191. ULONG32     ulTime) PURE;
  192.     /************************************************************************
  193.      * Method:
  194.      *     IHXRenderer::OnBegin
  195.      * Purpose:
  196.      *     Called by client engine to inform the renderer that a begin or
  197.      *     resume has just occurred. The render is informed the first time 
  198.      *     for the stream's time line after the resume.
  199.      *
  200.      */
  201.     STDMETHOD(OnBegin) (THIS_
  202. ULONG32     ulTime) PURE;
  203.     /************************************************************************
  204.      * Method:
  205.      *     IHXRenderer::OnBuffering
  206.      * Purpose:
  207.      *     Called by client engine to inform the renderer that buffering
  208.      *     of data is occuring. The render is informed of the reason for
  209.      *     the buffering (start-up of stream, seek has occurred, network
  210.      *     congestion, etc.), as well as percentage complete of the 
  211.      *     buffering process.
  212.      *
  213.      */
  214.     STDMETHOD(OnBuffering) (THIS_
  215. ULONG32     ulFlags,
  216. UINT16     unPercentComplete) PURE;
  217.     /************************************************************************
  218.      * Method:
  219.      *     IHXRenderer::GetDisplayType
  220.      * Purpose:
  221.      *     Called by client engine to ask the renderer for it's preferred
  222.      *     display type. When layout information is not present, the 
  223.      *     renderer will be asked for it's prefered display type. Depending
  224.      *     on the display type a buffer of additional information may be 
  225.      *     needed. This buffer could contain information about preferred
  226.      *     window size.
  227.      *
  228.      */
  229.     STDMETHOD(GetDisplayType) (THIS_
  230. REF(HX_DISPLAY_TYPE) ulFlags,
  231. REF(IHXBuffer*) pBuffer) PURE;
  232.     /************************************************************************
  233.      * Method:
  234.      *     IHXRenderer::OnEndofPackets
  235.      * Purpose:
  236.      *     Called by client engine to inform the renderer that all the
  237.      *     packets have been delivered. However, if the user seeks before
  238.      *     EndStream() is called, renderer may start getting packets again
  239.      *     and the client engine will eventually call this function again.
  240.      */
  241.     STDMETHOD(OnEndofPackets) (THIS) PURE;
  242. };
  243. // $Private:
  244. /****************************************************************************
  245.  * 
  246.  *  Interface:
  247.  * 
  248.  * IHXPersistentRenderer
  249.  * 
  250.  *  Purpose:
  251.  * 
  252.  * Interface exposed by a persistent renderer such as RAM and SMIL
  253.  * 
  254.  *  IID_IHXPersistentRenderer:
  255.  * 
  256.  * {00000301-0901-11d1-8B06-00A024406D59}
  257.  * 
  258.  */
  259. DEFINE_GUID(IID_IHXPersistentRenderer, 0x00000301, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  260. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  261. #undef  INTERFACE
  262. #define INTERFACE   IHXPersistentRenderer
  263. DECLARE_INTERFACE_(IHXPersistentRenderer, IUnknown)
  264. {
  265.     /*
  266.      * IUnknown methods
  267.      */
  268.     STDMETHOD(QueryInterface) (THIS_
  269. REFIID riid,
  270. void** ppvObj) PURE;
  271.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  272.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  273.     /*
  274.      * IHXPersistentRenderer methods
  275.      */
  276.     /************************************************************************
  277.      * Method:
  278.      *     IHXPersistentRenderer::InitPersistent
  279.      * Purpose:
  280.      *     Initialize the persistent renderer
  281.      */
  282.     STDMETHOD(InitPersistent) (THIS_
  283. UINT32 ulPersistentComponentID,
  284. UINT16 uPersistentGroupID,
  285. UINT16 uPersistentTrackID,
  286. IHXPersistentRenderer* pPersistentParent) PURE;
  287.     /************************************************************************
  288.      * Method:
  289.      *     IHXPersistentRenderer::GetPersistentID
  290.      * Purpose:
  291.      *     Get persistent component ID
  292.      */
  293.     STDMETHOD(GetPersistentID) (THIS_
  294. REF(UINT32) ulPersistentComponentID) PURE;
  295.     /************************************************************************
  296.      * Method:
  297.      *     IHXPersistentRenderer::GetPersistentProperties
  298.      * Purpose:
  299.      *     get properties of the persistent renderer such as the type and version#
  300.      */
  301.     STDMETHOD(GetPersistentProperties) (THIS_
  302.                                 REF(IHXValues*)    pProperties) PURE;
  303.     /************************************************************************
  304.      * Method:
  305.      *     IHXPersistentRenderer::GetElementProperties
  306.      * Purpose:
  307.      *     get properties of the element(track) spawned by this persistent renderer
  308.      */
  309.     STDMETHOD(GetElementProperties) (THIS_
  310. UINT16     uGroupID,
  311. UINT16     uTrackID,
  312.                                 REF(IHXValues*)    pProperties) PURE;
  313.     /************************************************************************
  314.     *  Method:
  315.     *      IHXPersistentRenderer::AttachElementLayout
  316.     *  Purpose:
  317.     *    attach the site created in its persitent parent as the root layout 
  318.     */
  319.     STDMETHOD(AttachElementLayout) (THIS_
  320. UINT16     uGroupID,
  321. UINT16     uTrackID,
  322. IHXRenderer*     pRenderer,
  323. IHXStream*     pStream,
  324. IHXValues*     pProps) PURE;
  325.     /************************************************************************
  326.     *  Method:
  327.     *      IHXPersistentRenderer::DetachElementLayout
  328.     *  Purpose:
  329.     *    Detach the root layout created by its persistent parent
  330.     */
  331.     STDMETHOD(DetachElementLayout) (THIS_
  332. IUnknown*     pLSG) PURE;
  333.     /************************************************************************
  334.      * Method:
  335.      *     IHXPersistentRenderer::GetElementShowStatus
  336.      * Purpose:
  337.      *     get element's status(such as its layout's show property) 
  338.      *      at current time
  339.      */
  340.     STDMETHOD(GetElementStatus) (THIS_
  341. UINT16     uGroupID,
  342. UINT16     uTrackID,
  343. UINT32     ulCurrentTime,
  344. REF(IHXValues*)    pStatus) PURE;
  345. };
  346. // $EndPrivate.
  347. // $Private:
  348. /****************************************************************************
  349.  * 
  350.  *  Interface:
  351.  * 
  352.  * IHXMediaPushdown
  353.  * 
  354.  *  Purpose:
  355.  * 
  356.  * Al's weird hack interface
  357.  * 
  358.  *  IHXMediaPushdown:
  359.  * 
  360.  * {00000302-0901-11d1-8B06-00A024406D59}
  361.  * 
  362.  */
  363. DEFINE_GUID(IID_IHXMediaPushdown, 0x00000302, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  364. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  365. #undef  INTERFACE
  366. #define INTERFACE   IHXMediaPushdown
  367. DECLARE_INTERFACE_(IHXMediaPushdown, IUnknown)
  368. {
  369.     /*
  370.      * IUnknown methods
  371.      */
  372.     STDMETHOD(QueryInterface) (THIS_
  373. REFIID riid,
  374. void** ppvObj) PURE;
  375.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  376.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  377.     /*
  378.      * IHXMediaPushdown methods
  379.      */
  380.     /************************************************************************
  381.      *  Method:
  382.      *      IHXMediaPushdown::GetCurrentPushdown
  383.      *  Purpose:
  384.      *      Retrieves the current queue depth ("pushdown depth") in milliseconds
  385.      *
  386.      *  Notes:
  387.      *      This is the *decoded* pushdown, not the undecoded pushdown.  Returns
  388.      *      HXR_TIMELINE_SUSPENDED if the stream is paused; HXR_FAIL
  389.      *      if the stream is finished, HXR_OK otherwise.
  390.      */
  391.     STDMETHOD (GetCurrentPushdown) (THIS_ /*OUT*/ 
  392.     REF(UINT32) ulPushdownMS,
  393.     REF(UINT32) ulNumFrames) PURE;
  394.     /************************************************************************
  395.      *  Method:
  396.      *      IHXMediaPushdown::IsG2Video
  397.      *  Purpose:
  398.      */
  399.     STDMETHOD_(BOOL, IsG2Video) (THIS) PURE;
  400. };
  401. // $EndPrivate.
  402. /****************************************************************************
  403.  * 
  404.  *  Interface:
  405.  * 
  406.  * IHXUntimedRenderer
  407.  * 
  408.  *  Purpose:
  409.  * 
  410.  * Interface exposed by a renderer capable of running faster than real time
  411.  * 
  412.  *  IID_IHXUntimedRenderer:
  413.  * 
  414.  * {00000303-0901-11d1-8B06-00A024406D59}
  415.  * 
  416.  */
  417. DEFINE_GUID(IID_IHXUntimedRenderer, 0x00000303, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 
  418. 0xa0, 0x24, 0x40, 0x6d, 0x59);
  419. #undef  INTERFACE
  420. #define INTERFACE   IHXUntimedRenderer
  421. DECLARE_INTERFACE_(IHXUntimedRenderer, IUnknown)
  422. {
  423.     STDMETHOD(QueryInterface) (THIS_
  424. REFIID riid,
  425. void** ppvObj) PURE;
  426.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  427.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  428.     STDMETHOD_(BOOL,IsUntimedRendering)(THIS) PURE;
  429.     STDMETHOD_(HX_RESULT,SetUntimedRendering)(THIS_ BOOL) PURE;
  430. };
  431. #endif /* _HXRENDR_H_ */