00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _AMR_AUDIO_RTP_SINK_HH
00022 #define _AMR_AUDIO_RTP_SINK_HH
00023
00024 #ifndef _AUDIO_RTP_SINK_HH
00025 #include "AudioRTPSink.hh"
00026 #endif
00027
00028 class AMRAudioRTPSink: public AudioRTPSink {
00029 public:
00030 static AMRAudioRTPSink* createNew(UsageEnvironment& env,
00031 Groupsock* RTPgs,
00032 unsigned char rtpPayloadFormat,
00033 Boolean sourceIsWideband = False,
00034 unsigned numChannelsInSource = 1);
00035
00036 Boolean sourceIsWideband() const { return fSourceIsWideband; }
00037
00038 protected:
00039 AMRAudioRTPSink(UsageEnvironment& env, Groupsock* RTPgs,
00040 unsigned char rtpPayloadFormat,
00041 Boolean sourceIsWideband, unsigned numChannelsInSource);
00042
00043
00044 virtual ~AMRAudioRTPSink();
00045
00046 private:
00047 virtual Boolean sourceIsCompatibleWithUs(MediaSource& source);
00048 virtual void doSpecialFrameHandling(unsigned fragmentationOffset,
00049 unsigned char* frameStart,
00050 unsigned numBytesInFrame,
00051 struct timeval framePresentationTime,
00052 unsigned numRemainingBytes);
00053 virtual Boolean
00054 frameCanAppearAfterPacketStart(unsigned char const* frameStart,
00055 unsigned numBytesInFrame) const;
00056
00057 virtual unsigned specialHeaderSize() const;
00058 virtual char const* auxSDPLine();
00059
00060 private:
00061 Boolean fSourceIsWideband;
00062 char* fFmtpSDPLine;
00063 };
00064
00065 #endif