00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef PTLIB_DELAYCHAN_H
00032 #define PTLIB_DELAYCHAN_H
00033 #include <ptlib/contain.h>
00034 #include <ptlib/object.h>
00035 #include <ptlib/timeint.h>
00036 #include <ptlib/ptime.h>
00037 #include <ptlib/indchan.h>
00038
00039 #ifdef P_USE_PRAGMA
00040 #pragma interface
00041 #endif
00042
00043
00052 class PAdaptiveDelay : public PObject
00053 {
00054 PCLASSINFO(PAdaptiveDelay, PObject);
00055
00056 public:
00057
00064 PAdaptiveDelay(
00065 unsigned maximumSlip = 0,
00066 unsigned minimumDelay = 0
00067 );
00069
00078 void SetMaximumSlip(PTimeInterval maximumSlip)
00079 { jitterLimit = maximumSlip; }
00080
00082 PTimeInterval GetMaximumSlip() const
00083 { return jitterLimit; }
00085
00102 PBoolean Delay(int time);
00103
00107 void Restart();
00109
00110 protected:
00111 PBoolean firstTime;
00112 PTime targetTime;
00113
00114 PTimeInterval jitterLimit;
00115 PTimeInterval minimumDelay;
00116 };
00117
00118
00134 class PDelayChannel : public PIndirectChannel
00135 {
00136 PCLASSINFO(PDelayChannel, PIndirectChannel);
00137 public:
00140 enum Mode {
00141 DelayReadsOnly,
00142 DelayWritesOnly,
00143 DelayReadsAndWrites
00144 };
00145
00153 PDelayChannel(
00154 Mode mode,
00155 unsigned frameDelay,
00156 PINDEX frameSize = 0,
00157 unsigned maximumSlip = 250,
00158 unsigned minimumDelay = 10
00159 );
00160
00168 PDelayChannel(
00169 PChannel &channel,
00170 Mode mode,
00171 unsigned frameDelay,
00172 PINDEX frameSize = 0,
00173 unsigned maximumSlip = 250,
00174 unsigned minimumDelay = 10
00175 );
00177
00178
00192 virtual PBoolean Read(
00193 void * buf,
00194 PINDEX len
00195 );
00196
00206 virtual PBoolean Write(
00207 const void * buf,
00208 PINDEX len
00209 );
00211
00212
00213 protected:
00214 virtual void Wait(PINDEX count, PTimeInterval & nextTick);
00215
00216 Mode mode;
00217 unsigned frameDelay;
00218 PINDEX frameSize;
00219 PTimeInterval maximumSlip;
00220 PTimeInterval minimumDelay;
00221
00222 PTimeInterval nextReadTick;
00223 PTimeInterval nextWriteTick;
00224 };
00225
00226
00227 #endif // PTLIB_DELAYCHAN_H
00228
00229
00230