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
00031
00032 #ifndef OPAL_IAX2_JITTER_H
00033 #define OPAL_IAX2_JITTER_H
00034
00035 #ifndef _PTLIB_H
00036 #include <ptlib.h>
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #if OPAL_IAX2
00042
00043 #include <rtp/rtp.h>
00044 #include <rtp/jitter.h>
00045
00046
00047
00048 PDECLARE_LIST(RTP_DataFrameQueue, RTP_DataFrame *)
00049 #ifdef DOC_PLUS_PLUS //This makes emacs bracket matching code happy.
00050
00056 class RTP_DataFrameQueue : public RTP_DataFrame *
00057 {
00058 #endif
00059 public:
00060 };
00061
00063
00064 class PendingRtpDataFrames : public RTP_DataFrameQueue
00065 {
00066 PCLASSINFO(PendingRtpDataFrames, RTP_DataFrameQueue);
00067 public:
00069 PendingRtpDataFrames();
00070
00072 ~PendingRtpDataFrames();
00073
00076 void CloseDown();
00077
00080 RTP_DataFrame *GetLastFrame();
00081
00083 void AddNewFrame(RTP_DataFrame *newFrame);
00084
00085 protected:
00088 RTP_DataFrame *InternalGetLastFrame();
00089
00090
00092 PSyncPoint activate;
00093
00095 PMutex mutex;
00096
00098 PBoolean keepGoing;
00099 };
00100
00102
00105 class IAX2JitterBuffer : public OpalJitterBuffer
00106 {
00107 PCLASSINFO(IAX2JitterBuffer, OpalJitterBuffer);
00108
00109 public:
00111 IAX2JitterBuffer();
00112
00115 ~IAX2JitterBuffer();
00116
00121 virtual PBoolean OnReadPacket (
00122 RTP_DataFrame & frame,
00123 PBoolean loop
00124 ) ;
00125
00128 void NewFrameFromNetwork(RTP_DataFrame *newFrame)
00129 { receivedFrames.AddNewFrame(newFrame); }
00130
00137 void CloseDown();
00138
00139 protected:
00140
00147 PendingRtpDataFrames receivedFrames;
00148 };
00149
00150
00151 #endif // OPAL_IAX2
00152
00153 #endif // OPAL_IAX2_JITTER_H