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

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2003 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 HXBUFSTATE_H
  36. #define HXBUFSTATE_H
  37. #include "hxtypes.h"
  38. #include "hxresult.h"
  39. #include "hxcom.h"
  40. #include "hxsmbw.h" // IHXASMProps
  41. #include "hxslist.h" // CHXSimpleList
  42. class HXBufferingState
  43. {
  44. public:
  45.     HXBufferingState();
  46.     ~HXBufferingState();
  47.     void OnStreamHeader(UINT32 ulPreroll,
  48. UINT32 ulPredata,
  49. BOOL preDataAtStart,
  50. BOOL preDataAfterSeek,
  51. BOOL prerollAtStart,
  52. BOOL prerollAfterSeek,
  53. ULONG32 ulAvgBitRate);
  54.     void OnStream(IUnknown* pStream);
  55.     void Init(ULONG32 ulPerfectPlayTime);
  56.     
  57.     void SetMinimumPreroll(UINT32 ulSourcePreroll, 
  58.    UINT32 ulInitialAudioPreroll,
  59.    UINT32 ulPerfectPlayTime,
  60.    BOOL   bIsRebuffering);
  61.     void Stop();
  62.     void Reset(BOOL bIsSeeking, UINT32 ulSeekTime);
  63.     void GetRemainToBuffer(REF(UINT32) ulRemainToBufferInMs,
  64.    REF(UINT32) ulRemainToBuffer);
  65.     ULONG32 GetMinPrerollInMs() { return m_ulMinimumPrerollInMs;}
  66.     UINT16 GetPercentDone(BOOL bIsSeekPerformed);
  67.     void SetPreroll(ULONG32 ulPreroll) { m_ulPreroll = ulPreroll;}
  68.     void UpdatePreroll(ULONG32 ulPreroll);
  69.     void SetPredata(ULONG32 ulPredata) { m_ulPredata = ulPredata;}
  70.     BOOL HasPreroll(BOOL bIsSeekPerformed);
  71.     BOOL HasPredata(BOOL bIsSeekPerformed);
  72.     INT64 CreateINT64Timestamp(UINT32 ulTime);
  73.     INT64 CreateINT64Timesync(UINT32 ulTime);
  74.     void OnPacket(UINT32 ulTimestamp, UINT32 ulPacketSize, 
  75.   UINT32 ulElapsedTime, BOOL bIsLive,
  76.   BOOL bIsBufferedPlayMode);
  77.     void UpdateBufferingInMs(INT64 llRefLowTimestamp,
  78.      INT64 llHighTimestamp, 
  79.      BOOL bIsBufferedPlayMode,
  80.      BOOL bIsTimestampDelivery,
  81.      UINT32 ulElapsedTime);
  82.     void UpdateTransportStats(INT64 llLowTSAtTransport,
  83.       INT64 llHighTSAtTransport,
  84.       ULONG32 ulBytesAtTransport,
  85.       BOOL bDoneAtTransport);
  86.     HX_RESULT GetBufferingStats(REF(INT64) llLowTimestamp, 
  87. REF(INT64) llHighTimestamp,
  88. REF(UINT32) ulBytesBuffered,
  89. BOOL bUseTransportStats);
  90.     void GetExcessBufferInfo(INT64 llTheLowestTS,
  91.      INT64 llTheHighestTS,
  92.      BOOL bIsSeekPerformed,
  93.      REF(UINT32) ulRemainToBufferInMs,
  94.      REF(UINT32) ulRemainToBuffer,
  95.      REF(UINT32) ulExcessBufferInMs,
  96.      REF(UINT32) ulExcessBuffer,
  97.      REF(UINT32) ulExcessForThisStreamInMs,
  98.      REF(UINT32) ulExcessForThisStream);
  99.     
  100.     UINT32 LastPacketTimestamp() {return m_ulLastPacketTimeStamp;}
  101.     
  102.     INT64 LowTS() { return m_llLowestTimeStamp;}
  103.     UINT32 AvgBandwidth() { return m_ulAvgBandwidth;}
  104.     void OnTimeSync(UINT32 ulCurrentTime);
  105.     // Should remove
  106.     void SetAvgBWToASMBw();
  107.     BOOL DoneAtTransport() { return ((m_ulNumBytesAtTransport == 0) &&
  108.      m_bDoneAtTransport);}
  109. private:
  110.     void SetMinPrerollInMs(ULONG32 ulMinPrerollInMs, 
  111.    ULONG32 ulMinBufferingInMs);
  112.     void UpdateCurrentBufferingInMs(INT64 llLowestTimeStamp, 
  113.     INT64 llHighestTimeStamp);
  114.     void SetMinPreroll();
  115.     void SetMinPreroll(UINT32 ulMinPreroll, UINT32 ulMinBuffering);
  116.     void UpdateMinPredata();
  117.     BOOL DataBasedPreroll() { return (m_preDataAtStart || m_preDataAfterSeek);}
  118.     ULONG32 MsToBytes(UINT32 ulValueInMs, UINT32 ulBw) const;
  119.     
  120.     void CalcRemainingToBufferInMs();
  121.     void CalcRemainingToBufferInMs(ULONG32 ulElapsedTime);
  122.     void CalcRemainingToBuffer();
  123.     void CalcRemainingToBuffer(ULONG32 ulDenom);
  124.     UINT32 CalcRemaining(UINT32 ulMinimumBuffering,
  125.  UINT32 ulCurrentBuffering,
  126.  UINT32 ulMinimumPreroll,
  127.  UINT32 ulDenom) const;
  128.     
  129.     /* Functions for tracking the amount of data
  130.      * buffered in the renderer
  131.      */
  132.     void ClearPktInfo(); /* Clears out information about buffered packets */
  133.     void AddPktInfo(INT64 llTimestamp, UINT32 ulPacketSize); /* Called when
  134.       * a packet is 
  135.       * sent to the
  136.       * renderer 
  137.       */
  138.     UINT32 GetBufferedData(); /* Get the current amount of data buffered
  139.        * in the renderer
  140.        */
  141.     ULONG32 m_ulPreroll;
  142.     ULONG32 m_ulPredata;
  143.     UINT32 m_ulMinimumPrerollInMs;
  144.     UINT32 m_ulMinimumPreroll;
  145.     UINT32 m_ulMinimumBufferingInMs;
  146.     UINT32 m_ulMinimumBuffering;
  147.     UINT32 m_ulRemainingToBufferInMs;
  148.     UINT32 m_ulRemainingToBuffer;
  149.     UINT32 m_ulCurrentBufferingInMs;
  150.     UINT32 m_ulCurrentBuffering;
  151.     HX_BITFIELD m_bIsFirstPacket : 1;
  152.     HX_BITFIELD m_preDataAtStart : 1;
  153.     HX_BITFIELD m_prerollAtStart : 1;
  154.     HX_BITFIELD m_preDataAfterSeek : 1;
  155.     HX_BITFIELD m_prerollAfterSeek : 1;   
  156.     INT64 m_llLowestTimeStamp;
  157.     INT64 m_llHighestTimeStamp;
  158.     INT64 m_llLowestTimestampAtTransport; 
  159.     INT64 m_llHighestTimestampAtTransport; 
  160.     UINT32 m_ulNumBytesAtTransport;
  161.     BOOL m_bDoneAtTransport;
  162.     UINT32 m_ulTSRollOver;
  163.     ULONG32 m_ulLastPacketTimeStamp;
  164.     ULONG32 m_ulAvgBandwidth;
  165.     IHXASMProps* m_pASMProps;
  166.     UINT32              m_ulLastTimeSync;
  167.     INT64               m_llFirstLivePacketTimestamp;
  168.     UINT32              m_ulTimeSyncRollOver;    
  169.     // These variable keep track of the amount of
  170.     // data buffered in the renderer
  171.     INT64               m_llCurrentPlaybackTime; /* Cached value of last
  172.   * OnTimeSync() call
  173.   */
  174.     UINT32              m_ulBufferedData; /* Data buffered in renderer.
  175.    * Always use GetBufferedData()
  176.    * to retreive the value
  177.    */
  178.     CHXSimpleList       m_pktInfo; /* List of packet information */
  179. };
  180. inline
  181. BOOL HXBufferingState::HasPreroll(BOOL bIsSeekPerformed) 
  182. {
  183.     return (bIsSeekPerformed) ? (m_prerollAfterSeek) : (m_prerollAtStart);
  184. }
  185. inline
  186. BOOL HXBufferingState::HasPredata(BOOL bIsSeekPerformed) 
  187. {
  188.     return (bIsSeekPerformed) ? (m_preDataAfterSeek) : (m_preDataAtStart);
  189. }
  190. #endif /* HXBUFSTATE_H */