hxstrm.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:9k
源码类别:

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