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

Symbian

开发平台:

Visual C++

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