00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _T140_TEXT_RTP_SINK_HH
00022 #define _T140_TEXT_RTP_SINK_HH
00023
00024 #ifndef _TEXT_RTP_SINK_HH
00025 #include "TextRTPSink.hh"
00026 #endif
00027 #ifndef _FRAMED_FILTER_HH
00028 #include "FramedFilter.hh"
00029 #endif
00030
00031 class T140IdleFilter;
00032
00033 class T140TextRTPSink: public TextRTPSink {
00034 public:
00035 static T140TextRTPSink* createNew(UsageEnvironment& env, Groupsock* RTPgs, unsigned char rtpPayloadFormat);
00036
00037 protected:
00038 T140TextRTPSink(UsageEnvironment& env, Groupsock* RTPgs, unsigned char rtpPayloadFormat);
00039
00040
00041 virtual ~T140TextRTPSink();
00042
00043 protected:
00044 virtual Boolean continuePlaying();
00045 virtual void doSpecialFrameHandling(unsigned fragmentationOffset,
00046 unsigned char* frameStart,
00047 unsigned numBytesInFrame,
00048 struct timeval framePresentationTime,
00049 unsigned numRemainingBytes);
00050 virtual Boolean frameCanAppearAfterPacketStart(unsigned char const* frameStart,
00051 unsigned numBytesInFrame) const;
00052
00053 protected:
00054 T140IdleFilter* fOurIdleFilter;
00055 Boolean fAreInIdlePeriod;
00056 };
00057
00058
00060
00061
00062
00063
00064
00065
00066 class T140IdleFilter: public FramedFilter {
00067 public:
00068 T140IdleFilter(UsageEnvironment& env, FramedSource* inputSource);
00069 virtual ~T140IdleFilter();
00070
00071 private:
00072 virtual void doGetNextFrame();
00073 virtual void doStopGettingFrames();
00074
00075 private:
00076 static void afterGettingFrame(void* clientData, unsigned frameSize,
00077 unsigned numTruncatedBytes,
00078 struct timeval presentationTime,
00079 unsigned durationInMicroseconds);
00080 void afterGettingFrame(unsigned frameSize,
00081 unsigned numTruncatedBytes,
00082 struct timeval presentationTime,
00083 unsigned durationInMicroseconds);
00084
00085 static void handleIdleTimeout(void* clientData);
00086 void handleIdleTimeout();
00087
00088 void deliverFromBuffer();
00089 void deliverEmptyFrame();
00090
00091 static void onSourceClosure(void* clientData);
00092 void onSourceClosure();
00093
00094 private:
00095 TaskToken fIdleTimerTask;
00096 unsigned fBufferSize, fNumBufferedBytes;
00097 char* fBuffer;
00098 unsigned fBufferedNumTruncatedBytes;
00099 struct timeval fBufferedDataPresentationTime;
00100 unsigned fBufferedDataDurationInMicroseconds;
00101 };
00102
00103 #endif