00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "MP3ADURTPSource.hh"
00022 #include "MP3ADUdescriptor.hh"
00023
00025
00026 class ADUBufferedPacket: public BufferedPacket {
00027 private:
00028 virtual unsigned nextEnclosedFrameSize(unsigned char*& framePtr,
00029 unsigned dataSize);
00030 };
00031
00032 class ADUBufferedPacketFactory: public BufferedPacketFactory {
00033 private:
00034 virtual BufferedPacket* createNewPacket(MultiFramedRTPSource* ourSource);
00035 };
00036
00038
00039 MP3ADURTPSource*
00040 MP3ADURTPSource::createNew(UsageEnvironment& env, Groupsock* RTPgs,
00041 unsigned char rtpPayloadFormat,
00042 unsigned rtpTimestampFrequency) {
00043 return new MP3ADURTPSource(env, RTPgs, rtpPayloadFormat,
00044 rtpTimestampFrequency);
00045 }
00046
00047 MP3ADURTPSource::MP3ADURTPSource(UsageEnvironment& env, Groupsock* RTPgs,
00048 unsigned char rtpPayloadFormat,
00049 unsigned rtpTimestampFrequency)
00050 : MultiFramedRTPSource(env, RTPgs,
00051 rtpPayloadFormat, rtpTimestampFrequency,
00052 new ADUBufferedPacketFactory) {
00053 }
00054
00055 MP3ADURTPSource::~MP3ADURTPSource() {
00056 }
00057
00058 char const* MP3ADURTPSource::MIMEtype() const {
00059 return "audio/MPA-ROBUST";
00060 }
00061
00063
00064 unsigned ADUBufferedPacket
00065 ::nextEnclosedFrameSize(unsigned char*& framePtr, unsigned dataSize) {
00066
00067
00068 unsigned char* frameDataPtr = framePtr;
00069 unsigned remainingFrameSize
00070 = ADUdescriptor::getRemainingFrameSize(frameDataPtr);
00071 unsigned descriptorSize = (unsigned)(frameDataPtr - framePtr);
00072 unsigned fullADUSize = descriptorSize + remainingFrameSize;
00073
00074 return (fullADUSize <= dataSize) ? fullADUSize : dataSize;
00075 }
00076
00077 BufferedPacket* ADUBufferedPacketFactory
00078 ::createNewPacket(MultiFramedRTPSource* ) {
00079 return new ADUBufferedPacket;
00080 }