OPAL  Version 3.10.10
jitter.h
Go to the documentation of this file.
1 /*
2  * jitter.h
3  *
4  * Jitter buffer support
5  *
6  * Open H323 Library
7  *
8  * Copyright (c) 1999-2001 Equivalence Pty. Ltd.
9  *
10  * The contents of this file are subject to the Mozilla Public License
11  * Version 1.0 (the "License"); you may not use this file except in
12  * compliance with the License. You may obtain a copy of the License at
13  * http://www.mozilla.org/MPL/
14  *
15  * Software distributed under the License is distributed on an "AS IS"
16  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17  * the License for the specific language governing rights and limitations
18  * under the License.
19  *
20  * The Original Code is Open H323 Library.
21  *
22  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
23  *
24  * Portions of this code were written with the assisance of funding from
25  * Vovida Networks, Inc. http://www.vovida.com.
26  *
27  * Contributor(s): ______________________________________.
28  *
29  * $Revision: 28053 $
30  * $Author: rjongbloed $
31  * $Date: 2012-07-18 02:50:22 -0500 (Wed, 18 Jul 2012) $
32  */
33 
34 #ifndef OPAL_RTP_JITTER_H
35 #define OPAL_RTP_JITTER_H
36 
37 #ifdef P_USE_PRAGMA
38 #pragma interface
39 #endif
40 
41 #include <opal/buildopts.h>
42 
43 #include <rtp/rtp.h>
44 
45 
46 class RTP_JitterBuffer;
47 class RTP_JitterBufferAnalyser;
48 
49 
51 
55 class OpalJitterBuffer : public PSafeObject
56 {
57  PCLASSINFO(OpalJitterBuffer, PSafeObject);
58 
59  public:
66  unsigned minJitterDelay,
67  unsigned maxJitterDelay,
68  unsigned timeUnits = 8,
69  PINDEX packetSize = 2048
70  );
71 
74  virtual ~OpalJitterBuffer();
76 
80  void PrintOn(
81  ostream & strm
82  ) const;
84 
89  void SetDelay(
90  unsigned minJitterDelay,
91  unsigned maxJitterDelay,
92  PINDEX packetSize = 2048
93  );
94 
97  void Reset();
98 
101  virtual PBoolean WriteData(
102  const RTP_DataFrame & frame,
103  const PTimeInterval & tick = 0
104  );
105 
110  virtual PBoolean ReadData(
111  RTP_DataFrame & frame,
112  const PTimeInterval & tick = 0
113  );
114 
117  DWORD GetCurrentJitterDelay() const { return m_currentJitterDelay; }
118 
121  DWORD GetMinJitterDelay() const { return m_minJitterDelay; }
122 
125  DWORD GetMaxJitterDelay() const { return m_maxJitterDelay; }
126 
129  unsigned GetTimeUnits() const { return m_timeUnits; }
130 
133  DWORD GetPacketsTooLate() const { return m_packetsTooLate; }
134 
137  DWORD GetBufferOverruns() const { return m_bufferOverruns; }
138 
142 
147 
148  protected:
149  DWORD CalculateRequiredTimestamp(DWORD playOutTimestamp) const;
150  bool AdjustCurrentJitterDelay(int delta);
151 
152  unsigned m_timeUnits;
153  PINDEX m_packetSize;
158  int m_jitterShrinkTime;
163 
170 
178 
179  enum {
185 
186  typedef std::map<DWORD, RTP_DataFrame> FrameMap;
187  FrameMap m_frames;
189 
190  RTP_JitterBufferAnalyser * m_analyser;
191 };
192 
193 
198 {
200  public:
202  unsigned minJitterDelay,
203  unsigned maxJitterDelay,
204  unsigned timeUnits = 8,
205  PINDEX packetSize = 2048
206  );
208 
215  virtual PBoolean ReadData(
216  RTP_DataFrame & frame
217  );
218 
223  virtual PBoolean OnReadPacket(
224  RTP_DataFrame & frame
225  ) = 0;
226 
227  void StartThread();
228 
229  protected:
230  PDECLARE_NOTIFIER(PThread, OpalJitterBufferThread, JitterThreadMain);
231 
233  void WaitForThreadTermination();
234 
235  PThread * m_jitterThread;
236  bool m_running;
237 };
238 
239 
241 
245 {
247  public:
249  RTP_Session & session,
250  unsigned minJitterDelay,
251  unsigned maxJitterDelay,
252  unsigned timeUnits = 8,
253  PINDEX packetSize = 2048
254  );
255  ~RTP_JitterBuffer();
256 
261  virtual PBoolean OnReadPacket(
262  RTP_DataFrame & frame
263  );
264 
265  protected:
268 };
269 
270 #endif // OPAL_RTP_JITTER_H
271 
272 
DWORD m_consecutiveLatePackets
Definition: jitter.h:169
unsigned m_timeUnits
Definition: jitter.h:152
DWORD m_minJitterDelay
Minimum jitter delay in timestamp units.
Definition: jitter.h:154
DWORD m_lastTimestamp
Definition: jitter.h:172
Definition: rtp.h:502
DWORD m_maxConsecutiveMarkerBits
Definition: jitter.h:168
virtual PBoolean WriteData(const RTP_DataFrame &frame, const PTimeInterval &tick=0)
int m_jitterShrinkTime
Amount to shrink jitter delay by if consistently filled.
Definition: jitter.h:159
bool m_running
Definition: jitter.h:236
DWORD GetMaxConsecutiveMarkerBits() const
Definition: jitter.h:141
DWORD m_lastSyncSource
Definition: jitter.h:173
std::map< DWORD, RTP_DataFrame > FrameMap
Definition: jitter.h:186
bool AdjustCurrentJitterDelay(int delta)
void SetDelay(unsigned minJitterDelay, unsigned maxJitterDelay, PINDEX packetSize=2048)
DWORD m_packetsTooLate
Definition: jitter.h:165
virtual PBoolean ReadData(RTP_DataFrame &frame, const PTimeInterval &tick=0)
void SetMaxConsecutiveMarkerBits(DWORD max)
Definition: jitter.h:145
DWORD GetCurrentJitterDelay() const
Definition: jitter.h:117
RTP_JitterBufferAnalyser * m_analyser
Definition: jitter.h:190
DWORD GetPacketsTooLate() const
Definition: jitter.h:133
unsigned GetTimeUnits() const
Definition: jitter.h:129
PThread * m_jitterThread
Definition: jitter.h:235
PMutex m_bufferMutex
Definition: jitter.h:188
DWORD GetMinJitterDelay() const
Definition: jitter.h:121
DWORD m_bufferEmptiedTime
Definition: jitter.h:176
DWORD GetMaxJitterDelay() const
Definition: jitter.h:125
Definition: rtp.h:71
DWORD m_silenceShrinkPeriod
Reduce jitter delay is silent for this long.
Definition: jitter.h:160
Definition: jitter.h:55
virtual ~OpalJitterBuffer()
OpalJitterBuffer(unsigned minJitterDelay, unsigned maxJitterDelay, unsigned timeUnits=8, PINDEX packetSize=2048)
DWORD m_bufferFilledTime
Definition: jitter.h:174
RTP_Session & m_session
Definition: jitter.h:267
void PrintOn(ostream &strm) const
DWORD GetBufferOverruns() const
Definition: jitter.h:137
Definition: jitter.h:197
DWORD m_maxJitterDelay
Maximum jitter delay in timestamp units.
Definition: jitter.h:155
int m_silenceShrinkTime
Amount to shrink jitter delay by if consistently silent.
Definition: jitter.h:161
FrameMap m_frames
Definition: jitter.h:187
DWORD m_bufferLowTime
Definition: jitter.h:175
Definition: jitter.h:244
int m_currentJitterDelay
Definition: jitter.h:164
DWORD m_jitterDriftPeriod
Definition: jitter.h:162
DWORD m_averageFrameTime
Definition: jitter.h:171
DWORD m_consecutiveMarkerBits
Definition: jitter.h:167
int m_timestampDelta
Definition: jitter.h:177
DWORD m_jitterShrinkPeriod
Definition: jitter.h:157
PINDEX m_packetSize
Definition: jitter.h:153
DWORD CalculateRequiredTimestamp(DWORD playOutTimestamp) const
DWORD m_bufferOverruns
Definition: jitter.h:166
enum OpalJitterBuffer::@35 m_synchronisationState
int m_jitterGrowTime
Amaint to increase jitter delay by when get "late" packet.
Definition: jitter.h:156