BufferedPacket Class Reference

#include <MultiFramedRTPSource.hh>

Inheritance diagram for BufferedPacket:

Inheritance graph
[legend]
Collaboration diagram for BufferedPacket:

Collaboration graph
[legend]

Public Member Functions

 BufferedPacket ()
virtual ~BufferedPacket ()
Boolean hasUsableData () const
unsigned useCount () const
Boolean fillInData (RTPInterface &rtpInterface, Boolean &packetReadWasIncomplete)
void assignMiscParams (unsigned short rtpSeqNo, unsigned rtpTimestamp, struct timeval presentationTime, Boolean hasBeenSyncedUsingRTCP, Boolean rtpMarkerBit, struct timeval timeReceived)
void skip (unsigned numBytes)
void removePadding (unsigned numBytes)
void appendData (unsigned char *newData, unsigned numBytes)
void use (unsigned char *to, unsigned toSize, unsigned &bytesUsed, unsigned &bytesTruncated, unsigned short &rtpSeqNo, unsigned &rtpTimestamp, struct timeval &presentationTime, Boolean &hasBeenSyncedUsingRTCP, Boolean &rtpMarkerBit)
BufferedPacket *& nextPacket ()
unsigned short rtpSeqNo () const
timeval const & timeReceived () const
unsigned char * data () const
unsigned dataSize () const
Boolean rtpMarkerBit () const
BooleanisFirstPacket ()
unsigned bytesAvailable () const

Protected Member Functions

virtual void reset ()
virtual unsigned nextEnclosedFrameSize (unsigned char *&framePtr, unsigned dataSize)
virtual void getNextEnclosedFrameParameters (unsigned char *&framePtr, unsigned dataSize, unsigned &frameSize, unsigned &frameDurationInMicroseconds)

Protected Attributes

unsigned fPacketSize
unsigned char * fBuf
unsigned fHead
unsigned fTail

Private Attributes

BufferedPacketfNextPacket
unsigned fUseCount
unsigned short fRTPSeqNo
unsigned fRTPTimestamp
timeval fPresentationTime
Boolean fHasBeenSyncedUsingRTCP
Boolean fRTPMarkerBit
Boolean fIsFirstPacket
timeval fTimeReceived

Detailed Description

Definition at line 86 of file MultiFramedRTPSource.hh.


Constructor & Destructor Documentation

BufferedPacket::BufferedPacket (  ) 

Definition at line 334 of file MultiFramedRTPSource.cpp.

00335   : fPacketSize(MAX_PACKET_SIZE),
00336     fBuf(new unsigned char[MAX_PACKET_SIZE]),
00337     fNextPacket(NULL) {
00338 }

BufferedPacket::~BufferedPacket (  )  [virtual]

Definition at line 340 of file MultiFramedRTPSource.cpp.

References fBuf, and fNextPacket.

00340                                 {
00341   delete fNextPacket;
00342   delete[] fBuf;
00343 }


Member Function Documentation

Boolean BufferedPacket::hasUsableData (  )  const [inline]

Definition at line 91 of file MultiFramedRTPSource.hh.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00091 { return fTail > fHead; }

unsigned BufferedPacket::useCount (  )  const [inline]

Definition at line 92 of file MultiFramedRTPSource.hh.

References fUseCount.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00092 { return fUseCount; }

Boolean BufferedPacket::fillInData ( RTPInterface rtpInterface,
Boolean packetReadWasIncomplete 
)

Definition at line 375 of file MultiFramedRTPSource.cpp.

References bytesAvailable(), False, fBuf, fTail, RTPInterface::handleRead(), reset(), and True.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00375                                                                                                {
00376   if (!packetReadWasIncomplete) reset();
00377 
00378   unsigned numBytesRead;
00379   struct sockaddr_in fromAddress;
00380   unsigned const maxBytesToRead = bytesAvailable();
00381   if (maxBytesToRead == 0) return False; // exceeded buffer size when reading over TCP
00382   if (!rtpInterface.handleRead(&fBuf[fTail], maxBytesToRead, numBytesRead, fromAddress, packetReadWasIncomplete)) {
00383     return False;
00384   }
00385   fTail += numBytesRead;
00386   return True;
00387 }

void BufferedPacket::assignMiscParams ( unsigned short  rtpSeqNo,
unsigned  rtpTimestamp,
struct timeval  presentationTime,
Boolean  hasBeenSyncedUsingRTCP,
Boolean  rtpMarkerBit,
struct timeval  timeReceived 
)

Definition at line 390 of file MultiFramedRTPSource.cpp.

References fHasBeenSyncedUsingRTCP, fPresentationTime, fRTPMarkerBit, fRTPSeqNo, fRTPTimestamp, and fTimeReceived.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00393                                                 {
00394   fRTPSeqNo = rtpSeqNo;
00395   fRTPTimestamp = rtpTimestamp;
00396   fPresentationTime = presentationTime;
00397   fHasBeenSyncedUsingRTCP = hasBeenSyncedUsingRTCP;
00398   fRTPMarkerBit = rtpMarkerBit;
00399   fTimeReceived = timeReceived;
00400 }

void BufferedPacket::skip ( unsigned  numBytes  ) 

Definition at line 402 of file MultiFramedRTPSource.cpp.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00402                                            {
00403   fHead += numBytes;
00404   if (fHead > fTail) fHead = fTail;
00405 }

void BufferedPacket::removePadding ( unsigned  numBytes  ) 

Definition at line 407 of file MultiFramedRTPSource.cpp.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00407                                                     {
00408   if (numBytes > fTail-fHead) numBytes = fTail-fHead;
00409   fTail -= numBytes;
00410 }

void BufferedPacket::appendData ( unsigned char *  newData,
unsigned  numBytes 
)

Definition at line 412 of file MultiFramedRTPSource.cpp.

References fBuf, fPacketSize, and fTail.

00412                                                                          {
00413   if (numBytes > fPacketSize-fTail) numBytes = fPacketSize - fTail;
00414   memmove(&fBuf[fTail], newData, numBytes);
00415   fTail += numBytes;
00416 }

void BufferedPacket::use ( unsigned char *  to,
unsigned  toSize,
unsigned &  bytesUsed,
unsigned &  bytesTruncated,
unsigned short &  rtpSeqNo,
unsigned &  rtpTimestamp,
struct timeval &  presentationTime,
Boolean hasBeenSyncedUsingRTCP,
Boolean rtpMarkerBit 
)

Definition at line 418 of file MultiFramedRTPSource.cpp.

References fBuf, fHasBeenSyncedUsingRTCP, fHead, fPresentationTime, frameSize, fRTPMarkerBit, fRTPSeqNo, fRTPTimestamp, fTail, fUseCount, and getNextEnclosedFrameParameters().

Referenced by MultiFramedRTPSource::doGetNextFrame1().

00423                                                 {
00424   unsigned char* origFramePtr = &fBuf[fHead];
00425   unsigned char* newFramePtr = origFramePtr; // may change in the call below
00426   unsigned frameSize, frameDurationInMicroseconds;
00427   getNextEnclosedFrameParameters(newFramePtr, fTail - fHead,
00428                                  frameSize, frameDurationInMicroseconds);
00429   if (frameSize > toSize) {
00430     bytesTruncated += frameSize - toSize;
00431     bytesUsed = toSize;
00432   } else {
00433     bytesTruncated = 0;
00434     bytesUsed = frameSize;
00435   }
00436 
00437   memmove(to, newFramePtr, bytesUsed);
00438   fHead += (newFramePtr - origFramePtr) + frameSize;
00439   ++fUseCount;
00440 
00441   rtpSeqNo = fRTPSeqNo;
00442   rtpTimestamp = fRTPTimestamp;
00443   presentationTime = fPresentationTime;
00444   hasBeenSyncedUsingRTCP = fHasBeenSyncedUsingRTCP;
00445   rtpMarkerBit = fRTPMarkerBit;
00446 
00447   // Update "fPresentationTime" for the next enclosed frame (if any):
00448   fPresentationTime.tv_usec += frameDurationInMicroseconds;
00449   if (fPresentationTime.tv_usec >= 1000000) {
00450     fPresentationTime.tv_sec += fPresentationTime.tv_usec/1000000;
00451     fPresentationTime.tv_usec = fPresentationTime.tv_usec%1000000;
00452   }
00453 }

BufferedPacket*& BufferedPacket::nextPacket (  )  [inline]

Definition at line 108 of file MultiFramedRTPSource.hh.

References fNextPacket.

Referenced by ReorderingPacketBuffer::releaseUsedPacket(), and ReorderingPacketBuffer::storePacket().

00108 { return fNextPacket; }

unsigned short BufferedPacket::rtpSeqNo (  )  const [inline]

Definition at line 110 of file MultiFramedRTPSource.hh.

References fRTPSeqNo.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket(), and ReorderingPacketBuffer::storePacket().

00110 { return fRTPSeqNo; }

struct timeval const& BufferedPacket::timeReceived (  )  const [inline, read]

Definition at line 111 of file MultiFramedRTPSource.hh.

References fTimeReceived.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket().

00111 { return fTimeReceived; }

unsigned char* BufferedPacket::data (  )  const [inline]

Definition at line 113 of file MultiFramedRTPSource.hh.

References fBuf, and fHead.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00113 { return &fBuf[fHead]; }

unsigned BufferedPacket::dataSize (  )  const [inline]

Definition at line 114 of file MultiFramedRTPSource.hh.

References fHead, and fTail.

Referenced by MultiFramedRTPSource::networkReadHandler1().

00114 { return fTail-fHead; }

Boolean BufferedPacket::rtpMarkerBit (  )  const [inline]

Definition at line 115 of file MultiFramedRTPSource.hh.

References fRTPMarkerBit.

00115 { return fRTPMarkerBit; }

Boolean& BufferedPacket::isFirstPacket (  )  [inline]

Definition at line 116 of file MultiFramedRTPSource.hh.

References fIsFirstPacket.

Referenced by ReorderingPacketBuffer::getNextCompletedPacket(), and ReorderingPacketBuffer::storePacket().

00116 { return fIsFirstPacket; }

unsigned BufferedPacket::bytesAvailable (  )  const [inline]

Definition at line 117 of file MultiFramedRTPSource.hh.

References fPacketSize, and fTail.

Referenced by fillInData(), and MultiFramedRTPSource::networkReadHandler1().

00117 { return fPacketSize - fTail; }

void BufferedPacket::reset (  )  [protected, virtual]

Reimplemented in JPEGBufferedPacket.

Definition at line 345 of file MultiFramedRTPSource.cpp.

References False, fHead, fIsFirstPacket, fTail, and fUseCount.

Referenced by fillInData(), and JPEGBufferedPacket::reset().

00345                            {
00346   fHead = fTail = 0;
00347   fUseCount = 0;
00348   fIsFirstPacket = False; // by default
00349 }

unsigned BufferedPacket::nextEnclosedFrameSize ( unsigned char *&  framePtr,
unsigned  dataSize 
) [protected, virtual]

Reimplemented in AMRBufferedPacket, H264BufferedPacket, JPEGBufferedPacket, ADUBufferedPacket, MPEG4GenericBufferedPacket, LATMBufferedPacket, QCELPBufferedPacket, QTGenericBufferedPacket, and VorbisBufferedPacket.

Definition at line 353 of file MultiFramedRTPSource.cpp.

Referenced by getNextEnclosedFrameParameters().

00353                                                                        {
00354   // By default, use the entire buffered data, even though it may consist
00355   // of more than one frame, on the assumption that the client doesn't
00356   // care.  (This is more efficient than delivering a frame at a time)
00357   return dataSize;
00358 }

void BufferedPacket::getNextEnclosedFrameParameters ( unsigned char *&  framePtr,
unsigned  dataSize,
unsigned &  frameSize,
unsigned &  frameDurationInMicroseconds 
) [protected, virtual]

Definition at line 361 of file MultiFramedRTPSource.cpp.

References nextEnclosedFrameSize().

Referenced by use().

00363                                                                         {
00364   // By default, use the entire buffered data, even though it may consist
00365   // of more than one frame, on the assumption that the client doesn't
00366   // care.  (This is more efficient than delivering a frame at a time)
00367 
00368   // For backwards-compatibility with existing uses of (the now deprecated)
00369   // "nextEnclosedFrameSize()", call that function to implement this one:
00370   frameSize = nextEnclosedFrameSize(framePtr, dataSize);
00371 
00372   frameDurationInMicroseconds = 0; // by default.  Subclasses should correct this.
00373 }


Field Documentation

unsigned BufferedPacket::fPacketSize [protected]

Definition at line 129 of file MultiFramedRTPSource.hh.

Referenced by appendData(), bytesAvailable(), and JPEGBufferedPacket::reset().

unsigned char* BufferedPacket::fBuf [protected]

Definition at line 130 of file MultiFramedRTPSource.hh.

Referenced by appendData(), data(), fillInData(), use(), and ~BufferedPacket().

unsigned BufferedPacket::fHead [protected]

Definition at line 131 of file MultiFramedRTPSource.hh.

Referenced by data(), dataSize(), hasUsableData(), removePadding(), reset(), JPEGBufferedPacket::reset(), skip(), and use().

unsigned BufferedPacket::fTail [protected]

Definition at line 132 of file MultiFramedRTPSource.hh.

Referenced by appendData(), bytesAvailable(), dataSize(), fillInData(), hasUsableData(), removePadding(), reset(), JPEGBufferedPacket::reset(), skip(), and use().

BufferedPacket* BufferedPacket::fNextPacket [private]

Definition at line 135 of file MultiFramedRTPSource.hh.

Referenced by nextPacket(), and ~BufferedPacket().

unsigned BufferedPacket::fUseCount [private]

Definition at line 137 of file MultiFramedRTPSource.hh.

Referenced by reset(), use(), and useCount().

unsigned short BufferedPacket::fRTPSeqNo [private]

Definition at line 138 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), rtpSeqNo(), and use().

unsigned BufferedPacket::fRTPTimestamp [private]

Definition at line 139 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

struct timeval BufferedPacket::fPresentationTime [read, private]

Definition at line 140 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

Boolean BufferedPacket::fHasBeenSyncedUsingRTCP [private]

Definition at line 141 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and use().

Boolean BufferedPacket::fRTPMarkerBit [private]

Definition at line 142 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), rtpMarkerBit(), and use().

Boolean BufferedPacket::fIsFirstPacket [private]

Definition at line 143 of file MultiFramedRTPSource.hh.

Referenced by isFirstPacket(), and reset().

struct timeval BufferedPacket::fTimeReceived [read, private]

Definition at line 144 of file MultiFramedRTPSource.hh.

Referenced by assignMiscParams(), and timeReceived().


The documentation for this class was generated from the following files:
Generated on Mon Apr 29 13:31:17 2013 for live by  doxygen 1.5.2