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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxstrm.h,v 1.2.24.1 2004/07/09 02:05:40 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 _HXSTREAM_
  50. #define _HXSTREAM_
  51. class  CHXMapPtrToPtr;
  52. class  CHXHeader;
  53. class  HXPlayer;
  54. class  HXSource;
  55. class  HXASMStream;
  56. struct IHXStream;
  57. struct IHXStreamSource;
  58. struct IHXASMStreamSink;
  59. struct IHXASMSource;
  60. struct IHXASMStream;
  61. struct IHXRegistryID;
  62. class HXStream :   public IHXStream,
  63.                     public IHXRegistryID,
  64.     public IHXLayoutStream     
  65. {
  66. protected:
  67.     LONG32 m_lRefCount;
  68. public:
  69.     HXStream();
  70.     ~HXStream();
  71.     /*
  72.      * IUnknown methods
  73.      */
  74.     STDMETHOD(QueryInterface) (THIS_
  75. REFIID riid,
  76. void** ppvObj);
  77.     STDMETHOD_(ULONG32,AddRef) (THIS);
  78.     STDMETHOD_(ULONG32,Release) (THIS);
  79.     /*
  80.      * IHXStream methods
  81.      */
  82.     /************************************************************************
  83.      * Method:
  84.      *     IHXStream::GetSource
  85.      * Purpose:
  86.      *     Get the interface to the source object of which the stream is
  87.      *     a part of.
  88.      *
  89.      */
  90.     STDMETHOD(GetSource)     (THIS_
  91.     REF(IHXStreamSource*) pSource);
  92.     
  93.     /************************************************************************
  94.      * Method:
  95.      *     IHXStream::GetStreamNumber
  96.      * Purpose:
  97.      *     Get the stream number for this stream relative to the source 
  98.      *     object of which the stream is a part of.
  99.      *
  100.      */
  101.     STDMETHOD_(UINT16,GetStreamNumber)     (THIS);
  102.     /************************************************************************
  103.      * Method:
  104.      *     IHXStream::GetStreamType
  105.      * Purpose:
  106.      *     Get the MIME type for this stream. NOTE: The returned string is
  107.      *     assumed to be valid for the life of the IHXStream from which it
  108.      *     was returned.
  109.      *
  110.      */
  111.     STDMETHOD_(const char*,GetStreamType)   (THIS);
  112.     /************************************************************************
  113.      * Method:
  114.      *     IHXStream::GetHeader
  115.      * Purpose:
  116.      *      Get the header for this stream.
  117.      *
  118.      */
  119.     STDMETHOD_(IHXValues*,GetHeader)       (THIS);
  120.     /************************************************************************
  121.      * Method:
  122.      *     IHXStream::ReportQualityOfService
  123.      * Purpose:
  124.      *     Call this method to report to the playback context that the 
  125.      *     quality of service for this stream has changed. The unQuality
  126.      *     should be on a scale of 0 to 100, where 100 is the best possible
  127.      *     quality for this stream. Although the transport engine can 
  128.      *     determine lost packets and report these through the user
  129.      *     interface, only the renderer of this stream can determine the 
  130.      *     "real" perceived damage associated with this loss.
  131.      *
  132.      *     NOTE: The playback context may use this value to indicate loss
  133.      *     in quality to the user interface. When the effects of a lost
  134.      *     packet are eliminated the renderer should call this method with
  135.      *     a unQuality of 100.
  136.      *
  137.      */
  138.     STDMETHOD(ReportQualityOfService)     (THIS_
  139.     UINT8   unQuality);
  140.     /************************************************************************
  141.      * Method:
  142.      *     IHXStream::ReportRebufferStatus
  143.      * Purpose:
  144.      *     Call this method to report to the playback context that the
  145.      *     available data has dropped to a critically low level, and that
  146.      *     rebuffering should occur. The renderer should call back into this
  147.      *     interface as it receives additional data packets to indicate the
  148.      *     status of its rebuffering effort.
  149.      *
  150.      *     NOTE: The values of unNeeded and unAvailable are used to indicate
  151.      *     the general status of the rebuffering effort. For example, if a
  152.      *     renderer has "run dry" and needs 5 data packets to play smoothly
  153.      *     again, it should call ReportRebufferStatus() with 5,0 then as
  154.      *     packet arrive it should call again with 5,1; 5,2... and eventually
  155.      *     5,5.
  156.      *
  157.      */
  158.     STDMETHOD(ReportRebufferStatus)     (THIS_
  159.     UINT8   unNeeded,
  160.     UINT8   unAvailable);
  161.     /************************************************************************
  162.      * Method:
  163.      *     IHXStream::SetGranularity
  164.      * Purpose:
  165.      *     Sets the desired Granularity for this stream. The actual 
  166.      *     granularity will be the lowest granularity of all streams.
  167.      */
  168.     STDMETHOD(SetGranularity)     (THIS_
  169.     ULONG32 ulGranularity);
  170.     /************************************************************************
  171.      * Method:
  172.      *     IHXStream::GetRendererCount
  173.      * Purpose:
  174.      *     Returns the current number of renderer instances supported by
  175.      *     this stream instance.
  176.      */
  177.     STDMETHOD_(UINT16, GetRendererCount)(THIS);
  178.     /************************************************************************
  179.      * Method:
  180.      *     IHXStream::GetRenderer
  181.      * Purpose:
  182.      *     Returns the Nth renderer instance supported by this stream.
  183.      */
  184.     STDMETHOD(GetRenderer) (THIS_
  185. UINT16 nIndex,
  186. REF(IUnknown*) pUnknown);
  187.     /************************************************************************
  188.      * Method:
  189.      *     IHXRegistryID::GetID
  190.      * Purpose:
  191.      *     Get registry ID(hash_key) of the objects(player, source and stream)
  192.      *
  193.      */
  194.     STDMETHOD(GetID) (THIS_
  195.                         REF(UINT32) /*OUT*/  ulRegistryID);
  196.     /*
  197.      * IHXLayoutStream methods
  198.      */
  199.     /************************************************************************
  200.      * Method:
  201.      *     IHXLayoutStream::GetProperty
  202.      * Purpose:
  203.      *     Get a layout stream property
  204.      *
  205.      */
  206.     STDMETHOD(GetProperties) (THIS_
  207.                          REF(IHXValues*) /*OUT*/  pProps);
  208.     /************************************************************************
  209.      * Method:
  210.      *     IHXLayoutStream::SetProperty
  211.      * Purpose:
  212.      *     Set a layout stream property
  213.      *
  214.      */
  215.     STDMETHOD(SetProperties) (THIS_
  216.                          IHXValues* /*IN*/  pProps);
  217.     
  218.     // other methods
  219.     HX_RESULT Init(HXPlayer* pPlayer, HXSource* pSource, IHXValues* pHeader, IUnknown* pUnkRenderer = NULL);
  220.     HX_RESULT ResetASMSource(IHXASMSource* pASMSource);
  221.     HX_RESULT SetRenderer(IUnknown* pUnkRenderer);
  222.     BOOL IsTimeStampDelivery();
  223.     void PostEndTimePacket(IHXPacket* pPacket, BOOL& bSentMe, BOOL& bEndMe);
  224.     void ResetASMRuleState(void);
  225.     HXSource* GetHXSource();
  226.     BOOL IsSureStream(void);
  227.     HX_BITFIELD m_bPostSeekToBeSent : 1;
  228. protected:
  229.     HXSource*     m_pSource;
  230.     IHXValues*     m_pHeader;
  231.     IUnknown*     m_pUnkRenderer;
  232.     UINT16     m_uStreamNumber;
  233. #if defined(HELIX_FEATURE_ASM)
  234.     HXASMStream*    m_pASMStream;
  235. #endif /* HELIX_FEATURE_ASM */
  236.     UINT32          m_ulRegistryID;
  237. };
  238. #endif //_HXSTREAM_