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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: packetq.h,v 1.1.1.1.50.1 2004/07/09 02:04:29 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 _PACKETQ_H_
  50. #define _PACKETQ_H_
  51. // #define _PKTQ_DEBUG
  52. class PacketQueue
  53. {
  54. public:
  55.     /****** Public Class Methods ******************************************/
  56.     PacketQueue(const UINT32 ulWinSize = 25,
  57. const UINT16 unProbation = 2,
  58. const UINT32 ulWinTime = 0,
  59. const BOOL bUsesRTPPackets = FALSE);
  60.     ~PacketQueue();
  61.     HX_RESULT Init(IHXCommonClassFactory* pClassFactory);
  62.     HX_RESULT AddPacket(UINT16 unSeq, 
  63.   IHXPacket* pPacket,
  64.   ULONG32 ulArrivalTime = 0);
  65.     HX_RESULT GetPacket(REF(IHXPacket*) pPacket, ULONG32 ulTimeNow = 0);
  66.     HX_RESULT GetNextTS(REF(UINT32)ulTS, ULONG32 ulTimeNow = 0);    
  67.     UINT16 GetPercentDone(void);
  68.     ULONG32 GetAge(ULONG32 ulTimeNow);
  69.     /****** inlines ******/
  70.     inline void     SetMinWindowSize(UINT32 ulWinSize);
  71.     inline void     SetMinWindowTime(UINT32 ulWinTime);
  72.     inline UINT32   GetMinWindowSize(void);
  73.     UINT32 GetMinWindowTime(void)   { return m_ulMinWindowTime; }
  74.     inline UINT32   GetLatePktCount(void);    
  75.     inline UINT32   GetQueuedPktCount(void);
  76.     inline BOOL     IsUntouched(void) { return m_bInitial; }
  77.     inline void     SetFlexTimeWindow(BOOL bIsFlexTimeWindow);
  78.     inline BOOL     IsFlexTimeWindow(void)  { return m_bIsFlexTimeWindow; }
  79.         
  80. private:
  81.     class CArrivedPacket
  82.     {
  83.     public:
  84. CArrivedPacket(IHXPacket* pPacket,
  85.        ULONG32 ulArrivalTS)
  86. : m_pPacket(pPacket)
  87. , m_ulArrivalTS(ulArrivalTS)
  88. {
  89.     if (pPacket)
  90.     {
  91. pPacket->AddRef();
  92.     }
  93. }
  94. ~CArrivedPacket()
  95. {
  96.     HX_RELEASE(m_pPacket);
  97. }
  98. IHXPacket* m_pPacket;
  99. ULONG32 m_ulArrivalTS;
  100.     };
  101.     void     ReInitVars(void);
  102.     inline BOOL     IsSeqNumGT(UINT16 seq1, UINT16 seq2)
  103.     {
  104. return (((INT16) (seq1 - seq2)) > 0);
  105.     }
  106.     BOOL     PacketSufficientlyAged(CArrivedPacket* pArrivedPacket,
  107.    ULONG32 ulTimeNow);
  108.     inline BOOL     IsBufferingForSure(void)
  109.     {
  110. BOOL bIsBufferingForSure = FALSE;
  111. if (m_ulMinWindowTime == 0)
  112. {
  113.     bIsBufferingForSure = TRUE;
  114.     if (((UINT32) m_pBuf->GetCount()) >= m_ulMinWindowSize)
  115.     {
  116. bIsBufferingForSure = FALSE;
  117.     }
  118. }
  119. return bIsBufferingForSure;
  120.     }
  121.     CHXMapLongToObj* m_pBuf;
  122.     const UINT16    m_unInitProbation;
  123.     UINT32     m_ulMinWindowSize;
  124.     UINT32     m_ulMinWindowTime;     
  125.     UINT32     m_ulLate;
  126.     UINT32     m_ulLateSinceTermination;
  127.     BOOL     m_bIsFlexTimeWindow;
  128.     BOOL     m_bUsesRTPPackets;
  129.     ULONG32     m_ulLastReturnedArrivalTime;
  130.     UINT16     m_unLastReturnedArrivalSeq;
  131.     BOOL     m_bLastReturnedArrivalSet;
  132.     UINT16     m_unCurrent;
  133.     BOOL     m_bPacketReturned;
  134.     IHXCommonClassFactory* m_pClassFactory;    
  135.     BOOL     m_bInitial;
  136.     UINT16     m_unProbation;
  137. #ifdef _PKTQ_DEBUG
  138.     FILE*     m_pLogFile;
  139. #endif
  140. };
  141. inline void
  142. PacketQueue::SetMinWindowSize(UINT32 ulWinSize)
  143. {
  144. #ifdef _PKTQ_DEBUG
  145.     if (m_pLogFile)
  146.     {
  147. fprintf(m_pLogFile, "**** Setting WindowSize: %un", ulWinSize);
  148. fflush(stdout);
  149.     }
  150. #endif    
  151.     m_ulMinWindowSize = ulWinSize;
  152. }
  153. inline void
  154. PacketQueue::SetMinWindowTime(UINT32 ulWinTime)
  155. {
  156. #ifdef _PKTQ_DEBUG
  157.     if (m_pLogFile)
  158.     {
  159. fprintf(m_pLogFile, "**** Setting WindowTime: %un", ulWinTime);
  160. fflush(stdout);
  161.     }
  162. #endif    
  163.     m_ulMinWindowTime = ulWinTime;
  164. }
  165. inline void 
  166. PacketQueue::SetFlexTimeWindow(BOOL bIsFlexTimeWindow)
  167. {
  168. #ifdef _PKTQ_DEBUG
  169.     if (m_pLogFile)
  170.     {
  171. fprintf(m_pLogFile, "**** Setting Flex TimeWindow: %un", bIsFlexTimeWindow);
  172. fflush(stdout);
  173.     }
  174. #endif // _PKTQ_DEBUG
  175.     m_bIsFlexTimeWindow = bIsFlexTimeWindow; 
  176. }
  177. inline UINT32
  178. PacketQueue::GetMinWindowSize(void)
  179. {
  180.     return m_ulMinWindowSize;
  181. }
  182. inline UINT32   
  183. PacketQueue::GetLatePktCount(void)
  184. {
  185.     return m_ulLate;
  186. }
  187. inline UINT32
  188. PacketQueue::GetQueuedPktCount(void)
  189. {
  190.     return m_pBuf ? m_pBuf->GetCount() : 0;
  191. }
  192. #endif